;读写24C02 P1.3时钟信号 P1.4 数据信号 器件地址三个引脚全部接 地
clr p1.3 ;时钟信号初始化
setb p1.4;初始化scl低,sda高
setb p1.3 ;第一个时钟
nop
clr p1.4 ;数据信号相低跳变,表示起始信号
nop
clr p1.3;第一个脉冲结束,起始信号发送完毕
mov a,#0a0h ;器件地址10100000 表示写入前四位是固定的,接下来三位就是123引脚,全接地,所以都是0 。最后一个0表示写入
acall cadd ;发送器件地址,cadd是发送8位数据的子程序,相当于一个脉冲,往出移一位数据
setb p1.4 ;准备接收应答信号
nop
setb p1.3 ;给时钟信号,检测Ack回执信号
jb p1.4,$ ;等待ACK
nop
clr p1.3 ;读到应答信号,时钟结束
mov a,#33h;写入编程地址,数据要写到24C02的哪个单元,我写入了33h单元
acall cadd 发送地址
setb p1.4
nop
setb p1.3 ;给时钟,接收ACK。其实和上面发送是一样的
jb p1.4,$
nop
clr p1.3 ;读到ACK信号后时钟结束
mov a,33h ;写入数据
acall cadd
nop
setb p1.4 ;相当于再发送8位数据
nop
setb p1.3
jb p1.4,$
nop
clr p1.3 ;写入数据后接收到ACK
clr p1.4 ;以下是发送停止信号,以便24C02把接收到的数据正真写到芯片中
nop
setb p1.3 ;时钟高电平
nop
setb p1.4 ;数据上升跳变表示停止位
nop
clr p1.3 ;时钟结束,停止位发送完毕。同样写操作完成。
cadd: MOV R7,#08H
Nda: MOV C,ACC.7
MOV p1.4,C;给数据
RL A
SETB P1.3 ;给时钟
nop
clr p1.3 ;时钟结束
DJNZ R7,Nda
RET