單片機實現通用存貯器IC卡讀寫
3.6 字節寫入模式寫數據(WRITE_BYTE)
下列程序中的參數為:R6= =目的地址,A= =數據;數據如下:
WRITE_BYTE:PUSH ACC ;保存A中的數據
LCALL START_IC ;發開始信號
MOV A,#DEVICEAD_W;寫入器件地址
LCAL WR_BYTE
MOV A,R6 ;寫入字節地址
LCALL WR_BYTE
POP ACC ;恢復A中數據
LCALL WR_BYTE ;寫入數據
LCALL STOP_IC
RET
在收到8位數據后,EEPROM將通過SDA來回送確認信號,而傳送設備必須用停止狀態來終止寫操作。這時,EEPROM將進入一個內時固定存貯器的寫入周期并且禁止在此其間的所有輸入,直到寫操作完成后才對通訊應答。其寫入周期可自定義,最大為10ms。
3.7 頁面寫入模式寫數據(WRITE_PAGE)
以下程序中的參數為P0= =源指針,R6= =目的地址,R7= =頁面長度。
WRITE_PAGE:LCALL START_IC
MOV A,#DEVICEAD_W
LCALL WR_BYTE
MOV A,R6
LCALL WR_BYTE
WRITE_PAGE1:MOV A,@R0
LCALL WR_BYTE
INC R0
DJNZ R7,WRITE_PAGE1
LCALL STOP_IC
RET
AT24C01/02可利用上述程序進行8字節的頁面寫入,它的操作類似于寫字節。不同的是,它無需在第一個字節送出后才以停止狀態,不同在收到確認信號后,再傳送7個字節的數據碼,最后以停止狀態來終止頁面寫序列。AT24C04/08/16的頁面為16字節。
3.8 立即地址讀模式(READ_BYTEC)
立即地址讀模式讀一字節數據的程序如下:READ_BYTEC:LCALL START_IC
MOV A,#DEVICEAD_R
LCALL WR_BYTE
LCALL RD_BYTE ;讀出默認地址數據
LCALL STOP_IC ;發停止狀態應答
RET
該程序執行后,其內部數據字地址指針將保持在上次讀寫操作訪問的最后一個地址,并按1遞增且在芯片上電期間一直有效。只有當地址為頁面的最末時,下次訪問才滾動到該頁面的首地址。
3.9 隨機地址讀模式(READ_BYTER)
在下列程序中,R6= =源地址,程序如下:
READ_BYTER:LCALL START_IC
MOV A,#DEVICEAD_W ;執行空字節寫序列
LCALL WR_BYTE ;載入數據地址
MOV A,R6
LCALL WR_BYTE
LCALL START_IC
MOV A,#DEVICEAD_R ;立即地址讀取
LCALL WR_BYTE
LCALL DR_BYTE
LCALL STOP_IC
RET
讀操作模式需要一個字節寫序列載入數據地址。在器件和數據地址寫入并得到確認后,將再產生另一個開始條件,并送出讀操作器件的地址,同時激發一個立即地址讀取。
3.10 順序地址讀取(READ_BYTES)
在下列程序中:R0= =目的指針;R7= =數據長度,程序如下:
READ+BYTES:LCALL START_IC
MOV A,#DEVICEAD_R
LCALL WR_BYTE
READ_BYTES2:LCALL RD_BYTE
MOV @R0,A ;存放數據到目的地址
INC R0
DJNZ R7,READ_BYTES1
LCALL STOP_IC ;讀寫指定長度后停止
RET
READ_BYTES1:LCALL ACK_IC ;收到數據后發確認信號SJMP READ_BYTES2
其中順序讀取由立即尋址讀或隨機地址讀激發,并在收到一字節數據后發確認信號應答。當讀數器件以停止狀態應答時,操作被終止。
4、總結
該系統結構簡單,在實際運行時具有很高的可靠性,同時具有一定的可擴展性,并可通過單片機的串行口經電平轉換后直接與計算機相連,以進行數據通訊。另外,也可根據需要連接到其它引腳或卡座觸點,如果適當改進電路和程序,還可讀寫加密卡和CPU卡等。
評論