單片機IC卡讀寫器設計
3.2 停止條件(STOP_C)
在停止條件下,當SCL為高電平時,SDA由低轉為高。程序如下:
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 確認信號(ACK_IC)
在接收方應答下,每收到一字節后便將SDA電平拉低,程序如下:
ACK_IC:CLR SCL
NOP
NOP
CLR SDA
NOP
NOP
SEIB SCL
NOP
NOP
CLR SCL
NOP
SETB SDA
NOP
RET
3.4 寫一字節數據到IC卡(WR_BYTE)
在下列程序中,參數A表示源數據,R5表示字節位數。
WR_BYTE:MOV R5,#08 ;一字節8位數據
CLR SCL
NOP
NOP
WR_BYTE1:RLC A ;帶進位位左移,A.8->C
MOV SDA,C ;SCL低電平時改變SDA上的數據
NOP
SETB SCL ;拉高SCL把數據發送出去
NOP
NOP
CLR SCL
NOP
NOP
DJNZ R5,WR_BYTE1;依次發送A中的8位數據
SETB SDA
SETB SCL
JB SDA,$ ;等待IC卡確認信號
CLR SCL
NOP
RET
此子程序的主要作用是按照定義的時序,順序左移A中一字節8位數據,并通過引腳傳送出去。當一字節發完后,等待IC卡發回的確認信號。
3.5 從IC卡讀一字節(RD+BYTE)
從IC卡中讀一字節的源程序如下:
RD_BYTE:MOV R5,#08
SETB SDA ;設備SDA為讀狀態
CLR A ;清空A寄存器
RD_BTYE1:MOV C,SDA ;讀一位數據到進位位
RLC A ;左移數據到A.0
SETB SCL
NOP
NOP
CLR SCL
NOP
NOP
DJNZ R5,RD_BYTE1;依次讀出8位數據到A中
RET ;無應答信號
利用該程序可將讀出的數據存放在A中。需要注意的是:讀數據的器件不是通過確認狀態來應答的,而是隨后產生一個停止狀態。
3.6 字節寫入模式寫數據(WRITE_BYTE)
下列程序中的參數為:R6= =目的地址,A= =數據;數據如下:
WRITE_BYTE:PUSH ACC ;保存A中的數據
LCALL START_IC ;發開始信號
MOV A,#DEVICEAD_W;寫入器件地址
LCAL WR_BYTE
上拉電阻相關文章:上拉電阻原理
評論