微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 用Proteus学习51单片机之I2C(IIC)总线

用Proteus学习51单片机之I2C(IIC)总线

时间:11-19 来源:互联网 点击:

里面有详细的注释。

PS:在调试时遇到的一个问题,可能大家也会碰到,记录一下。

我本来是循环着往芯片里面写数据,然后读出来,显示到液晶上,这时读写都正常,形式如下:

for(i=0;i<字符串长度;i++)

{

save(‘a’)

read(‘a’)

}

后来我为了试验多显示几个字符,换了种方式,换成一次把所有数据都保存进去,再读出来,变成下面的形式(伪代码):

save(‘a’)

save(‘b’)

save(‘c’)

read(1)

read(2)

read(3)

这时出现了一个问题,第一个能正常保存,第2个就不能保存,第3个又能保存,让我很是头疼。

后来分析了一下,前后两种代码的区别,就在于,第一种形式,保存后,又进行读取,相当于保存后进行了一定的延时,而第二种形式一直在保存,保存后没有延时,后来在第二种形式的save后,加上了延时,就一切正常了。

源代码下载:点击下载

IIC总线技术

IIC总线是微电子通信控制领域中被广泛采用的一种总线标准,具有接口线少,控制方式简单、器件封装外形小、通信速率高等特点。它仅通过两根线SDA和SCL即可实现完善的全双工同步数据传送,能够十分方便地构成多主机系统和外同器件扩展系统。

IIC总线数据传输只有任总线处于空闲状态时(SCL和SDA必须保证为高电平)才启动。IIC总线协议定义数据传输时序如图2所示,起始条件为当SCL为高电平时,SDA由高电平向低电平跳变,数据开始传输;结束条件为当SCL为低电平时,SDA由低电平向高电平跳变,数据传输结束。传输过程中,当SCL高时,SDA必须始终保持稳定状态,此时出现任何跳变都被认为是起始或停止条件,只有当SCL为低电平的时候才允许SDA上的数据改变。

 

IIC总线上的数据格式如图3所示,由起始位(S)、从机地址码、读写控制位(R/W)、应答位(A)、数据和停止位(P)等组成。通信启动时,主器件先发送启动信号和从机地址,总线上每个器件都有自己的唯一地址,与地址与某一从器件相匹配时,该从器件发一应答位,主器件则认为寻址成功,然后根据R/W位确定的数据传送方向进行数据传输。若主器件长时间收不到应答位,则认为超时,放弃本次数据传输。通信停止时,主机发送一个停止信号。

 

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top