SCL

NOP

NOP

NOP

NOP

NOP

CLR

SCL

SJMP WLP1

从节点的写字节子程序(返回为ACK):

SWRBYTE:MOV R0,#08H

WAGAIN: RRC A

MOVB,#37H

WWAIT1: JBSCL,WWAIT1;等待SCL为低

JCWR1;判断是发送“1”还是发送“0”

SETBSDA;发送“1”

AJMP COM

WR1:CLR SDA;发送“0”

COM:DJNZR0,WWAIT2;判断是否发送完毕

WWAIT3: JNBSCL,WWAIT3;发送完毕等待应答信号

WWAIT4: JBSCL,WWAIT4

WWAIT5: JNBSCL,WWAIT5

CLRACK

JB SDA,ST0

SETBACK

ST0:RET;返回

WWAIT2: JNBSCL,WWAIT2;等待SCL为高

SJMPWAGAIN

从节点的读字节同时判断是否有起始信号的子程序。如果有起始信号,则转为写字节子程序:

SRDBYTE:MOV R0,#08H

SETB20H;设置标志位判断是读还是写

SETBSDA;释放总线

RWAITJ: JNBSCL,RWAITJ;等待SCL为高

MOVC,SDA;从总线上读取数据

RRC A;存入累计器

DECR0

MOVC,ACC.7;判断是否为起始信号

JNCRWAITJ1;为低继续读取数据

REWAIT: JNBSCL,RWAITJ1;开始判断是否为起始信号

JB SDA,REWAIT

CLR20H;是,则清标志位并返回

AJMPSjRDOUT

RWAITJ1:JBSCL,RWAITJ1;等待SCL为低

RWAITJ3:JNBSCL,RWAITJ3;等待SCL为高

MOV C,SDA

RRCA

DJNZR0,RWAITJ2

SjRDOUT:RET

RWAITJ2:JBSCL,RWAITJ2;等待SCL为低继续读数据

SJMPRWAITJ3

5 总结

根据总线协议中的仲裁原理,提出的基于延时比较的模拟I2C多主通信的方法,不仅能够体现了I2C总线的高效性,而且还具有良好的扩展性。它使普通不具有I2C接口的MCU可以应用在多主通信的系统中,既增加了普通MCU的使用范围,又突破了模拟I2C总线的应用局限性,为I2C总线的推广起到了积极的作用

关于接口,总线,驱动就介绍完了,您有什么想法可以联系小编。