请看
LO24CXXX_ADDR EQU 08H
RW24CXXX_TIMES EQU 09H
BEGIN:
MOV SP,#40H
WRITE_XIANGXICHENGJIAO1: ;RO,RAM为写入地址,LO24CXXX为24C02写入地址
MOV R0,#10H
MOV LO24CXXX_ADDR,#00H ;写24C02 00H-08H的数据
MOV RW24CXXX_TIMES,#08
LCALL WRITE_24C02
WRITE_XIANGXICHENGJIAO2:
MOV R0,#18H
MOV LO24CXXX_ADDR,#08H ;写24C02 08H-0FH的数据
MOV RW24CXXX_TIMES,#08
LCALL WRITE_24C02
;如果需要再写,则地址和,R0设置一下就可以连续写入60个BYTE
AJMP $
;这里是连续写入多字节数据
WRITE_24C02:
WRITE_24C02PER:
CLR C
LCALL START_BIT ;初始化
MOV A,#01H
RLC A
ADD A,#0A0H ;
LCALL WRITE_BIT ;送出写控制字
MOV A,LO24CXXX_ADDR ;把低地址送入A中
LCALL WRITE_BIT
WRITE_BYTE: MOV A,@R0 ;向24CXXX写入单个字节
LCALL WRITE_BIT ;写入数据
INC R0
LCALL DELAY_24
DJNZ RW24CXXX_TIMES,WRITE_BYTE
LCALL STOP_BIT ;停止写入数据
WRITE_ENDDING: LCALL DELAY2MS_24
RET
START_BIT: NOP ;开始位
SETB SLK_24CXXX
SETB SDA_24CXXX
LCALL DELAY_24
CLR SDA_24CXXX
LCALL DELAY_24
RET
WRITE_BIT: CLR C
MOV R7,#08H ;循环次数
WRITE_LOP: NOP
CLR SLK_24CXXX
NOP
RLC A
MOV SDA_24CXXX,C
NOP
SETB SLK_24CXXX
NOP
DJNZ R7,WRITE_LOP
CLR SLK_24CXXX ;应答发送请求
lCALL DELAY_24
SETB SLK_24CXXX
lCALL DELAY_24
CLR SLK_24CXXX
LCALL DELAY_24
RET
DELAY_25: MOV R4,#00H ;以下为延时
MOV R5,#04H
AJMP DELAY2_24
DELAY_24: MOV R4,#03H
MOV R5,#01H
AJMP DELAY2_24
DELAY2MS_24:
MOV R4,#00H
MOV R5,#06H ;20ms延时
DELAY2_24: DJNZ R4,DELAY2_24
DJNZ R5,DELAY2_24
RET
发表时间:2004年10月7日15:16:33