新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)實(shí)現(xiàn)通用存貯器IC卡讀寫

        單片機(jī)實(shí)現(xiàn)通用存貯器IC卡讀寫

        作者: 時(shí)間:2012-07-19 來(lái)源:網(wǎng)絡(luò) 收藏


        3、讀寫操作軟件

        當(dāng)系統(tǒng)采用6MHz晶體振蕩器時(shí)所定義的I/O口線及器件地址如下:

        SCL BIT P1.7
        SDA BIT P1.6
        DEVICEAD_W DATA 10100000B ;寫卡器件地址
        DEVICEAD_R DATA 10100001B ;讀卡器件地址
        3.1 開始條件(START_IC)
        在開始條件下,當(dāng)SCL為高電平時(shí),SDA由高轉(zhuǎn)為低。程序如下:
        START_IC:CLR SCL;SCL低電平時(shí)才允許SDA更改
        NOP ;加入空指令延時(shí)以確保信號(hào)可靠
        NOP
        SETB SDA
        NOP
        NOP
        SETB SCL
        NOP
        NOP
        CLR SDA
        NOP
        NOP
        CLR SCL
        NOP
        RET

        3.2 停止條件(STOP_C)

        在停止條件下,當(dāng)SCL為高電平時(shí),SDA由低轉(zhuǎn)為高。程序如下:

        STOP_IC:CLR SCL
        NOP
        NOP
        CLR SDA
        NOP
        NOP
        SETB SCL
        NOP
        NOP
        SETB SDA
        NOP
        NOP
        CLR SCL
        NOP
        NOP
        CLR SDA
        RET

        3.3 確認(rèn)信號(hào)(ACK_IC)

        在接收方應(yīng)答下,每收到一字節(jié)后便將SDA電平拉低,程序如下:
        ACK_IC:CLR SCL
        NOP
        NOP
        CLR SDA
        NOP
        NOP
        SEIB SCL
        NOP
        NOP
        CLR SCL
        NOP
        SETB SDA
        NOP
        RET

        3.4 寫一字節(jié)數(shù)據(jù)到IC卡(WR_BYTE)

        在下列程序中,參數(shù)A表示源數(shù)據(jù),R5表示字節(jié)位數(shù)。
        WR_BYTE:MOV R5,#08 ;一字節(jié)8位數(shù)據(jù)
        CLR SCL
        NOP
        NOP
        WR_BYTE1:RLC A ;帶進(jìn)位位左移,A.8->C
        MOV SDA,C ;SCL低電平時(shí)改變SDA上的數(shù)據(jù)
        NOP
        SETB SCL ;拉高SCL把數(shù)據(jù)發(fā)送出去
        NOP
        NOP
        CLR SCL
        NOP
        NOP
        DJNZ R5,WR_BYTE1;依次發(fā)送A中的8位數(shù)據(jù)
        SETB SDA
        SETB SCL
        JB SDA,$ ;等待IC卡確認(rèn)信號(hào)
        CLR SCL
        NOP
        RET
        此子程序的主要作用是按照定義的時(shí)序,順序左移A中一字節(jié)8位數(shù)據(jù),并通過(guò)引腳傳送出去。當(dāng)一字節(jié)發(fā)完后,等待IC卡發(fā)回的確認(rèn)信號(hào)。

        3.5 從IC卡讀一字節(jié)(RD+BYTE)

        從IC卡中讀一字節(jié)的源程序如下:
        RD_BYTE:MOV R5,#08
        SETB SDA ;設(shè)備SDA為讀狀態(tài)
        CLR A ;清空A寄存器
        RD_BTYE1:MOV C,SDA ;讀一位數(shù)據(jù)到進(jìn)位位
        RLC A ;左移數(shù)據(jù)到A.0
        SETB SCL
        NOP
        NOP
        CLR SCL
        NOP
        NOP
        DJNZ R5,RD_BYTE1;依次讀出8位數(shù)據(jù)到A中
        RET ;無(wú)應(yīng)答信號(hào)
        利用該程序可將讀出的數(shù)據(jù)存放在A中。需要注意的是:讀數(shù)據(jù)的器件不是通過(guò)確認(rèn)狀態(tài)來(lái)應(yīng)答的,而是隨后產(chǎn)生一個(gè)停止?fàn)顟B(tài)。



        關(guān)鍵詞: 單片機(jī) 存貯器 IC卡讀寫

        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 五大连池市| 昌宁县| 天柱县| 定兴县| 靖远县| 英吉沙县| 克山县| 年辖:市辖区| 博兴县| 乌拉特中旗| 江油市| 清苑县| 江华| 涿州市| 固镇县| 屏南县| 确山县| 泰安市| 瑞安市| 凉城县| 西乌珠穆沁旗| 建宁县| 柳河县| 新源县| 延津县| 禄劝| 嘉祥县| 合作市| 光山县| 西畴县| 黑河市| 临湘市| 甘谷县| 安达市| 沂水县| 新乡市| 德庆县| 汨罗市| 札达县| 临潭县| 扶风县|