📄 e2prom.asm
字号:
PUBLIC _READ_E2PROM
PUBLIC _WRITE_E2PROM
DE SEGMENT CODE
RSEG DE
CAT24C021_CLK BIT P3.0
CAT24C021_DIO BIT P3.1
_READ_E2PROM:
MOV A,R7
MOV R2,A
MOV A,R5
MOV R0,A
ACALL STR_24C021
MOV A,#0A0H
ACALL WBYTE_24C021
JC READFAIL
MOV A,R2
ACALL WBYTE_24C021
JC READFAIL
ACALL STR_24C021
MOV A,#0A1H
ACALL WBYTE_24C021
JC READFAIL
CLR F0
DJNZ R3,RD24C021_NEXT
SJMP RD24C021_LAST
RD24C021_NEXT:
ACALL RDBYTE_24C021
MOV @R0,A
INC R0
DJNZ R3,RD24C021_NEXT
RD24C021_LAST:
SETB F0
ACALL RDBYTE_24C021
MOV @R0,A
ACALL STOP_24C021
MOV A,#00H
RET
_WRITE_E2PROM:
MOV A,R7
MOV R2,A
MOV A,R5
MOV R0,A
ACALL STR_24C021
MOV A,#0A0H
ACALL WBYTE_24C021
JC WRITEFAIL
MOV A,R2
ACALL WBYTE_24C021
JC WRITEFAIL
WR24C021_NEXT:
MOV A,@R0
ACALL WBYTE_24C021
;JC WRITEFAIL
INC R0
DJNZ R3,WR24C021_NEXT
ACALL STOP_24C021
MOV R7,#30H
DELAY2:
MOV R6,#34H
DELAY1:
DJNZ R6,DELAY1
DJNZ R7,DELAY2
MOV A,#00H
RET
;================================================
;以下为I2C总线模拟子程序
READFAIL:
ACALL STOP_24C021
MOV A,#0FFH
RET
WRITEFAIL:
ACALL STOP_24C021
MOV A,#0FFH
RET
STR_24C021:
SETB CAT24C021_DIO
NOP
SETB CAT24C021_CLK
NOP
NOP
NOP
NOP
CLR CAT24C021_DIO
NOP
NOP
NOP
NOP
CLR CAT24C021_CLK
RET
;________________________________________
STOP_24C021:
CLR CAT24C021_DIO
NOP
NOP
NOP
NOP
SETB CAT24C021_CLK
NOP
NOP
NOP
NOP
SETB CAT24C021_DIO
NOP
NOP
NOP
NOP
RET
;*****************************************
WBYTE_24C021:
MOV R7,#08H
WBYO:
RLC A
JC WBY_ONE
CLR CAT24C021_DIO
SJMP WBY_ZERO
WBY_ONE:
SETB CAT24C021_DIO
NOP
WBY_ZERO:
NOP
SETB CAT24C021_CLK
NOP
NOP
NOP
NOP
CLR CAT24C021_CLK
DJNZ R7,WBYO
MOV R6,#5
WAITLOOP:
SETB CAT24C021_DIO
NOP
NOP
SETB CAT24C021_CLK
NOP
NOP
NOP
JB CAT24C021_DIO,NOACK
CLR C
CLR CAT24C021_CLK
RET
NOACK: DJNZ R6,WAITLOOP
SETB C
CLR CAT24C021_CLK
RET
;*******************************
RDBYTE_24C021:
SETB CAT24C021_DIO
MOV R7,#08H
RD24C021_CY1:
NOP
CLR CAT24C021_CLK
NOP
NOP
NOP
NOP
SETB CAT24C021_CLK
NOP
NOP
CLR C
JNB CAT24C021_DIO,RD24C021_ZERO
SETB C
RD24C021_ZERO:
RLC A
NOP
NOP
DJNZ R7,RD24C021_CY1
CLR CAT24C021_CLK
NOP
NOP
NOP
CLR CAT24C021_DIO
JNB F0,RD_ACK
SETB CAT24C021_DIO
RD_ACK:
NOP
NOP
SETB CAT24C021_CLK
NOP
NOP
NOP
CLR CAT24C021_CLK
NOP
NOP
CLR F0
CLR CAT24C021_DIO
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -