?? 24c02的讀寫程序.txt
字號:
;=============================
;24c02的讀寫程序
;AUTHOR:LIXIN
;CREATE DATE:2004-5-23
;MODIFY DATE :2004-5-23
;電協資料001.DOC
;用于2號板
; ===================
BITCNT EQU 41H
SUBADR EQU 40H
SDA BIT P0.5
SCL BIT P0.4
ORG 00H
JMP MAIN
ORG 0100H
MAIN:
MOV R7,#01010101B
ACALL WRITE_24C02
ACALL DELAY
ACALL READ_24C02
;MOV P2,A
MOV P3,A
ACALL DELAY
;MOV P2,#0FFH
MOV P3,#0FFH
ACALL DELAY
JMP MAIN
;===================================
DELAY: MOV R0,#0FFH
DELAY0: MOV R1,#0FFH
DELAY1: NOP
NOP
NOP
DJNZ R1,DELAY1
DJNZ R0,DELAY0
RET
;============================
WRITE_24C02:
ACALL START ;發送IC總線起始條件
MOV A,#0A0H ;24C02總線地址
ACALL SENTBYTE ;發送24C02器件總線地址
JB F0,SENDRETURN ;出錯返回
MOV A,SUBADR ;取存儲地址
ACALL SENTBYTE
JB F0,SENDRETURN
MOV A,R7
ACALL SENTBYTE ;發送一次數據
JB F0,SENDRETURN ;出錯返回
ACALL STOP ;發送IC總線停止條件
DELAY10: ;延時10MS等待數據寫完
MOV 44H,30H
D1: MOV 45H,#34H
DJNZ 45H,$
DJNZ 44H,D1
SENDRETURN:
RET
;=======================================
READ_24C02: ;讀24C02
ACALL START ;發送IC總線起始條件
MOV A,#0A0H
ACALL SENTBYTE ;24C02總線地址
JB F0,RCVRETURN ;出錯返回
MOV A,SUBADR ;取存儲地址
ACALL SENTBYTE ;發送24C02器件總線地址
JB F0,SENDRETURN ;出錯返回
ACALL START ;發送IC總線重復起始條件
MOV A,#0A0H ;24C02總線地址
SETB ACC.0 ;取總線讀操作數
ACALL SENTBYTE ;發送被控制總線地址
JB F0,RCVRETURN ;出錯返回
ACALL RCVBYTE ;接受數據
RCVRETURN:
RET
;=========================================
START:
SETB SDA ;發送起始條件的數據信號
NOP
NOP
NOP
SETB SCL ;發送起始條件的時鐘信號
NOP ;起始條件建立時間大于4.7s
NOP
NOP
CLR SDA ;發送起始信號
NOP ;起始條件鎖定時間大于4s
NOP
NOP
CLR SCL ; 鉗住IC總線準備發送或接受數據
RET
;==================================
STOP:
CLR SDA ;發送停止條件的數據信號
NOP
NOP
NOP
SETB SCL ;發送停止條件的時鐘信號
NOP ;起始條件建立時間大于4s
NOP
NOP
SETB SDA ;發送IC總線停止信號
NOP
NOP
NOP
NOP
RET
;===============================
SENTBYTE: ;送數8位
MOV BITCNT,#08H
SENTB:
RLC A ;要發送的數據左移,發送入位C
MOV SDA,C
NOP
NOP
NOP
SETB SCL ;置時鐘線為高,通知被控制開始接受數據位
NOP ;保證時鐘高周期大于4s
NOP
NOP
CLR SCL ;鉗住總線準備接受下一個數據位
DJNZ BITCNT,SENTB ;8位沒發送完繼續發送
NOP
NOP
SETB SDA ;8位發送完后釋放數據線準備收應答位
NOP
NOP
SETB SCL ;開始接受應答信號
NOP
NOP
CLR F0 ;預先清發送數據出錯標志
JNB SDA,ACKEND ;判斷是否接受應答信號正常轉ACKEND
SETB F0 ;未受到應答置位錯誤標志
ACKEND:
NOP
CLR SCL ;發送結束鉗住總線準備下一步發送或接受數據或進行其他處理
RET
;=================================
RCVBYTE:
SETB SDA ;置數據線為輸入方式
MOV BITCNT,#08H ;要傳送的數據長度為8位
RCV:
NOP
CLR SCL ;置時鐘線為低,準備接受數據
NOP ;時鐘低周期大于4.7s
NOP
NOP
NOP
NOP
SETB SCL ;置時鐘線為高使數據線上數據有效
NOP
NOP
MOV C,SDA
RLC A ;接受的數據位放入ACC
NOP
NOP
DJNZ BITCNT,RCV ;8位沒收完繼續接受
CLR SCL ;8位接受完置時鐘線和數據線
NOP
NOP
CLR SDA
SETB SDA ;接受非應答信號
NOP
NOP
SETB SCL ;置時鐘線為高使應答位有效
NOP ;時鐘高周期大于4.7s
NOP
SETB SDA
NOP
NOP
NOP
CLR SCL ;清時鐘線鉗住IC總線以便發送停止條件
RET
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -