;---------IC_24C16----------------------------------------------------
IC_24C16_SDA BIT P2.5
IC_24C16_SCLK BIT P2.4
;----------
IC_24C16_WRITE: ;DPTR=ADDR,ACC-->EEPROM
;写一个字节
PUSH ACC
SETB IC_24C16_SDA
CLR IC_24C16_SCLK
CALL IC_24C16_START
MOV A,DPH
ANL A,#00000111B
CLR CY
RLC A
ORL A,#0A0H ;DEVICE ADDR_H,WRITE MODE
CALL IC_24C16_SHIFT8
CALL IC_24C16_ACK
MOV A,DPL ;ADDR_L
CALL IC_24C16_SHIFT8 ;WT ADDR TO 24C16 BEEFOR READ;
CALL IC_24C16_ACK
POP ACC ;DATA
CALL IC_24C16_SHIFT8
CALL IC_24C16_ACK
CALL IC_24C16_STOP
CALL IC_24C16_DELAY
RET
;----------
IC_24C16_READ: ;DPTR=ADDR,EEPROM-->ACC
SETB IC_24C16_SDA
CLR IC_24C16_SCLK
CALL IC_24C16_START
MOV A,DPH
ANL A,#00000111B
CLR CY
RLC A
ORL A,#0A0H ;DEVICE ADDR=0,WRITE MODE
CALL IC_24C16_SHIFT8
CALL IC_24C16_ACK
MOV A,DPL ;ADDR_L OF DATA
CALL IC_24C16_SHIFT8 ;WT ADDR_L TO 24C16 BEEFOR READ;
CALL IC_24C16_ACK
CALL IC_24C16_START
MOV A,DPH
ANL A,#00000111B ;ADDR_H
SETB CY
RLC A
ORL A,#0A0H ;DEVICE ADDR=0,READ MODE
CALL IC_24C16_SHIFT8
CALL IC_24C16_ACK
SETB IC_24C16_SDA
MOV R7,#8 ;READ DATA
CLR A
SETB IC_24C16_SDA
IC_24C16_READ_0:
RL A
SETB IC_24C16_SCLK
MOV C,IC_24C16_SDA
MOV ACC.0,C
CLR IC_24C16_SCLK
DJNZ R7,IC_24C16_READ_0
LCALL IC_24C16_STOP
RET
;--------- 24C01 READ & WRITE SUB --------------------
IC_24C16_START:
CLR IC_24C16_SDA
SETB IC_24C16_SDA
SETB IC_24C16_SCLK
CLR IC_24C16_SDA ;START
CLR IC_24C16_SCLK
RET
;----------
IC_24C16_STOP:
CLR IC_24C16_SDA
SETB IC_24C16_SCLK
SETB IC_24C16_SDA
RET
;----------
IC_24C16_ACK:
SETB IC_24C16_SCLK
CLR IC_24C16_SCLK
RET
;----------
IC_24C16_SHIFT8:
PUSH 07H
MOV R7,#8
IC_24C16_SH01:
RLC A
MOV IC_24C16_SDA,C
SETB IC_24C16_SCLK
CLR IC_24C16_SCLK
DJNZ R7,IC_24C16_SH01
POP 07H
RET
;----------
IC_24C16_DELAY:
PUSH 07H
MOV R7,#00H
IC_24C16_DELAY_01:
DJNZ R7,IC_24C16_DELAY_01
POP 07H
RET
;---------IC_24C16_END----------------------------------------------------