第八章 IIC总线
这是一本很不错的学习单片机的的书,原先是很大的一个PDF文档,我一章一章的把它分开了。看起来很方便。180新概念51单片机C语言教程—入门、提高、开发、拓展全攻略位,最低位为方向位,用以表明主机与从器件的数据传送方向。方向位为0,表明主机接下来对从器件进行写操作;方向位为1,表明主机接下来对从器件进行读操作位:76543210从机地址R/W图8.1.5寻址字节的位定义主机发送地址时,总线上的每个从机都将这7位地址码与自己的地址进行比较,如果相同,则认为自己正被主机寻址,根据R/W位将自己确定为发送器或接收器。从机的地址由固定部分和可编程部分组成。在一个系统中可能希望接入多个相同的从机,从机地址中可编程部分决定了可接入总线该类器件的最大数目。如一个从机的7位寻址位有4位是固定位,3位是可编程位,这时仅能寻址8个同样的器件,即可以有8个同样的器件接入到该1C总线系统中。7.应答信号rC总线协议规定,每传送一个字节数据(含地址及命令字)后,都要有一个应答信号,以确定数据传送是否被对方收到。应答信号由接收设备产生,在SCL信号为高电平期间,接收设备将SDA拉为低电平,表示数据传输正确,产生应答,时序图如图8.1.6所示。(主机)SDA(主机)非应答SDA(从机)起始信号S应答图8.1.61C总线应答时序图8.数据传输主机发送寻址信号并得到从器件应答后,便可进行数据传输,每次一个字节,但每次传输都应在得到应答信号后再进行下一字节传送9.非应答信号当主机为接收设备时,主机对最后一个字节不应答,以向发送设备表示数据传送结束。10.发送停止信号在全部数据传送完毕后,主机发送停止信号,即在SCL为高电平期间,SDA上产生一上升沿信号,停止时序图如图8.1.7所示第8章C总线AT24c02芯片应用181SCISDA终止信号P图8.1.712C总线停止时序图82单片机模拟rC总线通信目前市场上很多单片机都已经具有硬件2C总线控制单元,这类单片机在工作时,总线状态由硬件监测,无须用户介入,操作非常方便。但是还有许多单片机并不具有C总线接口,如51单片机,不过我们可以在单片机应用系统中通过软件模拟PC总线的工作时序,在使用时,只需正确调用各个函数就能方便地扩展rC总线接口器件。在总线的一次数据传送过程中,可以有以下儿种组合方式(1)主机向从机发送数据,数据传送方向在整个传送过程中不变(2)主机在第一个字节后,立即从从机读数据。(3)在传送过程中,当需要改变传送方向时,需将起始信号和从机地址各重复产生一次而两次读/写方向位正好相反为了保证数据传送的可靠性,标准rC总线的数据传送有严格的时序要求。1℃C总线的起始信号、终止信号、应答或发送“0”、非应答或发送“1”的模拟时序如图82.1所示。>4.7pSDASDA起始信号S终止信号P>41sSCLDA应答/“0非应答/“1图8.2.1C总线模拟时序图单片机在模拟PC总线通信时,需写出如下几个关键部分的程序:总线初始化、启动信号、应答信号、停止信号、写一个字节、读一个字节。下面分别给出具体函数的写法供大家参考,在阅读代码时请参考前面相关部分的文字描述及时序图。182新概念51单片机C语言教程——入门、提高、开发、拓展全攻略1.总线初始化void initoSCL=1.SDA=Idelayo将总线都拉高以释放总线2.启动信号void startSDA=ldelayoSCL=ISDA=OdelayoSCL在高电平期间,SDA一个下降沿启动信号。3.应答信号void responsEuchar i=tSCL=Iwhile(SDA==1)&&(i<255))1+十SCL=Odelayo:SCL在高电平期间,SDA被从设备拉为低电平表示应答。上面代码中有一个(SDA==1)和(<255)相与的关系,表示若在一段时间内没有收到从器件的应答则主器件默认从器件已经收到数据而不在等待应答信号,这一点是作者后加的一步,大家可不必深究,因为如果不第8章fC总线AT24c02芯片应用183加这个延时退出,一旦从器件没有发送应答信号,程序将永远停止在这里,而真正的程序中是不允许这样的情况发生的。4.停止信号void stopSDA=Odelay O:SCL=ISDA=lSCL在高电平期间,SDA一个上升沿停止信号。5.写一个字节void writebyte(uchar date)uchar 1, temp?temp=datefor(i=0;i<8;i++)temp=temp<
下载地址
用户评论