发布者: 未知 来源:网络
24系列EEPROM为串行电擦除可编程CMOS存储器,擦除/写入周期可达10万次以上。片内数据保存时间可达40年以上,采用单一电压+5V工作。
MOV ADDRSS,#00H ; AT24c** 00H地址
MOV PAGE_ADDR,#00H ; AT24c** 0页
MOV R4,#08H ; 8个字节
MOV R0,#DISM0 ; 首地址为 DISM0的ram
LCALL BYTE_WRIT ; 将首地址为 DISM0的连续8个RAM单元的内容写入AT24C**的0页00H~07H地址
MOV ADDRSS,#00H
MOV PAGE_ADDR,#00H
MOV R0,#DISM0
MOV R4,#08H
LCALL BYTE_READ ; 从AT24C**的0页00H开始连续读出8个字节,并存入首地址为 DISM0的连续8个RAM单元
; 用户在引用这段子程序时,只要根据自己的需要更改页面地址和字节数就可以了
;*********************************************以下为应用源程序,用户可以直接调用,不用任何修改
BIT_READ: MOV R3,#08H
SETB SDA_24
LCALL DELAY1
LOOP_RBIT: CLR SCL_24
LCALL DELAY1
SETB SCL_24
LCALL DELAY1
MOV C,SDA_24
RLC A
DJNZ R3,LOOP_RBIT
RET
BYTE_WRIT: LCALL SDSTAR
MOV A,#0A0H
ORL A,PAGE_ADDR
LCALL SDBYTE
LCALL TX_ACK
MOV A,ADDRSS
LCALL SDBYTE
LCALL TX_ACK
LOOP_W24: MOV A,@R0
LCALL SDBYTE
LCALL TX_ACK
INC R0
DJNZ R4,LOOP_W24
LCALL SDSTOP
RET
BYTE_READ: LCALL SDSTAR
MOV A,#0A0H
ORL A,PAGE_ADDR
LCALL SDBYTE
LCALL TX_ACK
MOV A,ADDRSS
LCALL SDBYTE
LCALL TX_ACK
LCALL SDSTAR
MOV A,#0A1H
ORL A,PAGE_ADDR
LCALL SDBYTE
LCALL TX_ACK
LOOP_R25: LCALL BIT_READ
MOV @R0,A
INC R0
DJNZ R4,LOOP_R24
SETB SDA_24
LCALL DELAY1
LCALL SDSTOP
RET
LOOP_R24: LCALL RX_ACK
LJMP LOOP_R25
SDSTAR: SETB SDA_24
NOP
NOP
SETB SCL_24
LCALL DELAY1
CLR SDA_24
LCALL DELAY1
CLR SCL_24
LCALL DELAY1
RET
SDSTOP: CLR SDA_24
LCALL DELAY1
SETB SCL_24
LCALL DELAY1
SETB SDA_24
LCALL DELAY1
CLR SCL_24
MOV R7,#0A0H
WAIT_END: MOV R6,#0FFH
DJNZ R6,$
DJNZ R7,WAIT_END
RET
SDBYTE: MOV R3,#08H ; SEND DATA TO 24C16
SDLP1: RLC A
MOV SDA_24,C
LCALL DELAY1
SETB SCL_24
LCALL DELAY1
CLR SCL_24
DJNZ R3,SDLP1
LCALL DELAY1
RET
TX_ACK: CLR SCL_24
SETB SDA_24
LCALL DELAY1
SETB SCL_24
LCALL DELAY1
CLR SCL_24
LCALL DELAY1
RET
RX_ACK: CLR SCL_24
LCALL DELAY1
CLR SDA_24
LCALL DELAY1
SETB SCL_24
LCALL DELAY1
CLR SCL_24
LCALL DELAY1
RET
DELAY1: MOV R7,#0AH ; DELAY 11uS(22M晶振)
DJNZ R7,$
RET