ORG 00H
START: MOV ID,#00H
CLR P1.6 ;打开写保护
MOV A,#00H ;读地址
LCALL RD24;;
MOV ID, A;;将读的值给ID
KK1: JB K1,KK2
LCALL DELAY20MS ;10MS:可靠性低
JB K1,KK2
INC ID
MOV A,ID
CJNE A,#07,REL
MOV ID,#-1H
KK2: JB K2,REL
LCALL DELAY20MS ;10MS:可靠性低
JB K2,REL
DEC ID
MOV A,ID
CJNE A,#-1,REL
MOV ID,#06H ;07H:ERR
;RET:err
REL: JNB K1,$
JNB K2,$
LCALL DELAY20MS ;***
;JB K1,ZJ ;***
;JB K2,REL ;***
MOV A,ID
CJNE A,#00H,IS0
ORL P2,#01111111B ;***
CLR L1 ;***
MOV A,ID
LCALL WT24;;;写入24C02
LJMP KK1 ;START:ERR
IS0: CJNE A,#01H,IS1
ORL P2,#01111111B ;***
CLR L2 ;***
LJMP KK1 ;START:ERR
IS1: CJNE A,#02H,IS2
ORL P2,#01111111B ;***
CLR L3 ;***
LJMP KK1 ;START:ERR
IS2: CJNE A,#03H,IS3
ORL P2,#01111111B ;***
CLR L4 ;***
LJMP KK1 ;START:ERR
IS3: CJNE A,#04H,IS4
ORL P2,#01111111B ;***
CLR L5 ;***
LJMP KK1 ;START:ERR
IS4: CJNE A,#05H,IS5
ORL P2,#01111111B ;***
CLR L6 ;***
LJMP KK1 ;START:ERR
IS5: CJNE A,#06H,IS6
ORL P2,#01111111B ;***
CLR L7 ;***
LJMP KK1 ;START:ERR
IS6: LJMP START
RD24: PUSH ACC ;读24C02子程序。
SETB SDA24
CLR SCLK24
CALL START24
MOV A,#0A0H
CALL SHIFT8
CALL ACK
POP ACC
CALL SHIFT8
CALL ACK
CALL START24
MOV A,#0A1H
CALL SHIFT8
CALL ACK
SETB SDA24
MOV R7,#8
CLR A
SETB SDA24
RD000: RL A
SETB SCLK24
MOV C,SDA24
MOV ACC.0,C
CLR SCLK24
DJNZ R7,RD000
RET
;-------------------------------
;写入24C02程序:
WT24: PUSH ACC
SETB SDA24
CLR SCLK24
CALL START24
MOV A,#0A0H
CALL SHIFT8
CALL ACK
POP ACC
CALL SHIFT8
CALL ACK
MOV A,B
CALL SHIFT8
CALL ACK
CALL STOP
CALL DELAY2
RET
; -------------------------------
;开始条件
START24:CLR SDA24
SETB SDA24
SETB SCLK24
CLR SDA24
CLR SCLK24
RET
;停止条件
STOP: CLR SDA24
SETB SCLK24
SETB SDA24
RET
;应答信号
ACK: SETB SCLK24
CLR SCLK24
RET
;读、写数据
SHIFT8: MOV R7,#8
SH01: RLC A
MOV SDA24,C
SETB SCLK24
CLR SCLK24
DJNZ R7,SH01
RET
DELAY2:
NOP
NOP
NOP
NOP
RET
;DELAY10MS: MOV R6,#20
DELAY20MS: MOV R6,#40
LOOP1: MOV R7,#248
DJNZ R7,$
DJNZ R6,LOOP1
RET
;DELAY: MOV R5,#20
;LOOP2: LCALL DELAY10MS
; DJNZ R5,LOOP2
; RET
END