用Proteus学习51单片机之I2C(IIC)总线
里面有详细的注释。
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位确定的数据传送方向进行数据传输。若主器件长时间收不到应答位,则认为超时,放弃本次数据传输。通信停止时,主机发送一个停止信号。
Proteus51单片机I2 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)