Login
升级VIP 登录 注册 安全退出
当前位置: 首页 > word文档 > 其他文档 > IIC串口通信,iic串口通信协议

IIC串口通信,iic串口通信协议

收藏

本作品内容为IIC串口通信,格式为 doc ,大小 655400 KB ,页数为 13页

IIC串口通信


('项目4.3IIC串口通信一、任务目标。\uf076理解单片机的IIC通信原理。\uf076实现两个单片机之间利用IIC进行通信。二、任务要求。任务主要实现一个单片机通过IIC通信方式访问24C02。三、相关知识点。1、IIC总线概述:IIC总线是PHLIPS公司推出的一种串行总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线。IIC总线只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。如下图:图4.20IIC总线IIC总线通过上拉电阻接正电源。当总线空闲时,两根线均为高电平。连到总线上的任一器件输出的低电平,都将使总线的信号变低,即各器件的SDA及SCL都是线“与”关系。如下图:图4.21IIC总线线与图每个接到IIC总线上的器件都有唯一的地址。主机与其它器件间的数据传送可以是由主机发送数据到其它器件,这时主机即为发送器。由总线上接收数据的器件则为接收器。在多主机系统中,可能同时有几个主机企图启动总线传送数据。为了避免混乱,IIC总线要通过总线仲裁,以决定由哪一台主机控制总线。2、IIC总线数据传送:1)数据位的有效性规定IIC总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。如下图:图4.22IIC总线通信数据发送2)起始信号和终止信号SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。如下图:图4.23起始信号和终止信号起始和终止信号都是由主机发出的,在起始信号产生后,总线就处于被占用的状态;在终止信号产生后,总线就处于空闲状态。连接到IIC总线上的器件,若具有IIC总线的硬件接口,则很容易检测到起始和终止信号。接收器件收到一个完整的数据字节后,有可能需要完成一些其它工作,如处理内部中断服务等,可能无法立刻接收下一个字节,这时接收器件可以将SCL线拉成低电平,从而使主机处于等待状态。直到接收器件准备好接收下一个字节时,再释放SCL线使之为高电平,从而使数据传送可以继续进行。3、数据传送格式1)字节传送与应答每一个字节必须保证是8位长度。数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。如下图:图4.24字节传送与应答由于某种原因从机不对主机寻址信号应答时(如从机正在进行实时性的处理工作而无法接收总线上的数据),它必须将数据线置于高电平,而由主机产生一个终止信号以结束总线的数据传送;如果从机对主机进行了应答,但在数据传送一段时间后无法继续接收更多的数据时,从机可以通过对无法接收的第一个数据字节的“非应答”通知主机,主机则应发出终止信号以结束数据的继续传送;当主机接收数据时,它收到最后一个数据字节后,必须向从机发出一个结束传送的信号。这个信号是由对从机的“非应答”来实现的。然后,从机释放SDA线,以允许主机产生终止信号。2)数据帧率格式IIC总线上传送的数据信号是广义的,既包括地址信号,又包括真正的数据信号。在起始信号后必须传送一个从机的地址(7位),第8位是数据的传送方向位(R/T),用“0”表示主机发送数据(T),“1”表示主机接收数据(R)。每次数据传送总是由主机产生的终止信号结束。但是,若主机希望继续占用总线进行新的数据传送,则可以不产生终止信号,马上再次发出起始信号对另一从机进行寻址。在总线的一次数据传送过程中,可以有以下几种组合方式:(1)主机向从机发送数据,数据的传送方向在整个传送过程中不变:【注】有阴影部分表示数据由主机向从机传送,无阴影部分则表示数据由从机向主机传送。A表示应答,A非表示非应答(高电平)。S表示起始信号,P表示终止信号。(2)主机在第一个字节后,立即从从机读数据:(3)在传送过程中,当需要改变传送方向时,起始信号和从机地址都被重复产生一次,但两次读/写方向位正好反相。4、总线的寻址IIC总线有明确规定:采用7bit寻址字节(寻址字节是起始信号后的第一个字节)。【注】D7~D1位组成从机的地址。D0位是数据传送方向位,为“0”时表示主机向从机写数据,为“1”时表示主机由从机读数据。主机发送地址时,总线上的每个从机都将这7位地址码和自己的地址比较,如果相同,则认为自己被主机寻址,根据R/T位将自己确认为发送器或者接收器。从机的地址由固定部分和可编程部分组成。在一个系统中,可能希望接入多个相同的从机,从机地址中可以编程的部分决定了可接入总线该类器件的最大数目。如一个从机的7位寻址位有4位是固定位,3位是可编程位,这时仅能寻址8个同样的器件,即可以有8个同样的器件接入到该IIC总线系统中。附:单片机IIC串行总线数据传送模拟图4.25总线数据传送信号四、项目分析本项目主要实现单片机通过IIC通信方式访问24C02。项目实现采用Proteus8Professional进行仿真实验,单片机采用51单片机。1、硬件电路设计在Proteus8Professional仿真软件按下图设计出仿真原理图,硬件电路包括一个51单片机和一个LED灯带,一个24C02C和一个IIC通信协议分调试。SDASCKXTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.0/T21P1.1/T2EX2P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C52SCK6SDA5WP7A01A12A23U224C02CI2CSDASCLTRIG234567891RP1RESPACK-81234567820191817161514139101211U3LED-BARGRAPH-GRN图4.26IIC通信硬件原理电路图2、程序设计IIC通信模块的程序设计主要包括系统启动后向立即向24C02中写入从0到100的数据,然后每个约1S从24C02中依次读取写入的数据,读完后系统等待。/实验名称:IIC通信实验功能:单片机用IIC通信方式向24C02写入晶振:11.0592MHzMCU类型:AT89C51作者:胡云冰创建日期:14-02-08#include#defineW_cmd0xa0//写指令,以A开头,后有地址,参见手册#defineR_cmd0xa1//读指令,以A开头,后有地址sbitSCL=P2^5;sbitSDA=P2^4;sbitWP=P2^3;/函数名称:voiddelay(intx)功能描述:软件延时输入:intx输出:无全局变量:无调用模块:无说明:无注意:无/voiddelay(intx){inti,j;for(i=x;i>0;i--)for(j=110;j>0;j--);}/函数名称:voidDely24(void)功能描述:用于通信中的软件延时输入:无输出:无全局变量:无调用模块:无说明:这个时间与器件、上拉电阻有很大关系,一般宜大不宜小注意:无/voidDely24(void){unsignedchari;for(i=0;i<20;i++);}/函数名称:unsignedcharReadByte(void)功能描述:时钟下降沿读取一位数据输入:无输出:j全局变量:无调用模块:无说明:无注意:无/unsignedcharReadByte(void){unsignedchari,j;for(i=0;i<8;i++)//循环读8位{SDA=1;//置高,不影响后续读取,而且是必须的SCL=1;j<<=1;j=(bit)SDA;//读1位SCL=0;}SDA=0;//必须的拉低return(j);}/函数名称:voidSendByte(unsignedcharSendDat)功能描述:将一个字节送上总线输入:unsignedcharSendDat输出:j全局变量:无调用模块:无说明:无注意:无/voidSendByte(unsignedcharSendDat){unsignedchari,j;for(i=0;i<8;i++)//循环8次{j=SendDat;SDA=j&0x80;//送出1位Dely24();//必要的延时SCL=1;Dely24();//必要的延时SCL=0;SendDat<<=1;//为下一位做准备}SCL=1;//必须拉高while(SDA==1);//等待应答SCL=0;//为确保每写入一个字节前,SDA,SCL必须拉低SDA=0;}/函数名称:voidWriIIC(unsignedcharWcmd,add,dat)功能描述:发送一个8位数输入:unsignedcharWcmd,add,dat输出:全局变量:无调用模块:SendByte()说明:Wcmd是写命令,add是地址,dat是数据注意:无/voidWriIIC(unsignedcharWcmd,add,dat){SCL=1;SDA=1;SDA=0;//开始时,SDA必须先于SCL拉低,必须的SCL=0;SendByte(Wcmd);//命令,每写入一个字节前是SDA,SCL必须拉低SendByte(add);//地址SendByte(dat);//数据SCL=1;//在写结束时,SCL必须先于SDA拉高,而且是必须的SDA=1;}/函数名称:unsignedcharReadIIC(unsignedcharWcmd,add,Rcmd)功能描述:读取一个8位数输入:unsignedcharWcmd,add,Rcmd输出:i全局变量:无调用模块:SendByte();ReadByte();说明:Wcmd是写命令,add是地址\ue598Rcmd是读命令注意:无/unsignedcharReadIIC(unsignedcharWcmd,add,Rcmd){unsignedchari;SDA=1;SCL=1;SDA=0;//开始SCL=0;SendByte(Wcmd);//命令SendByte(add);//选取存储区地址SDA=1;//注意这里与写结束时的不同,从写到读的转换时,SDA须先于SCL拉高SCL=1;SDA=0;SCL=0;SendByte(Rcmd);//读取i=ReadByte();SCL=1;SDA=1;return(i);}/函数名称:voidmain(void)功能描述:主函数输入:无输出:无全局变量:无调用模块:WriIIC();ReadIIC();说明:Wcmd是写命令,RRcmd是读命令注意:无/voidmain(void){unsignedchari,get;WP=0;//允许写。for(i=0;i<100;i++)//向0到100的地址相应写入0到100WriIIC(W_cmd,i,i);for(i=0;i<100;i++)//从地址0到100读取数据{//向0x00地址写入0xa5get=ReadIIC(W_cmd,i,R_cmd);//读0x00地址数据送P0P1=get;delay(1000);}while(1);}五、项目实施1、项目实施需要的准备工作计算机一台,KeilC2.0或WAVE6000软件编程环境,Proteus8Professional仿真软件。2、软件安装请在计算机上安装keilC2.0版本或WAVE6000版本单片机软件开发环境。3、在keilC2.0或WAVE6000中编写和调试程序,并生成HEX文件。4、设备使用方法根据图4.26IIC通信硬件原理电路图设计好电路,鼠标在单片机上方双击,弹出窗口如图。在窗口内在ProgramFile内导入在keil2.0或WAVE6000软件编程环境编译好的后缀为hex文件,在ClockFrequency内设置好晶振频率为11.0592MHZ其他不变。图4.27仿真环境配置5、用鼠标点击仿真软件的左下角方向向右的箭头,即开始运行仿真。图4.28仿真开始6、在Proteus8Professional仿真软件中运行,观察结果如图4.29IIC通信试验仿真整体效果图。图中包含单片机访问24C02和控制LED灯带,以及右上角的IIC模拟协议分析。在图4.30中LED灯带显示当前读取到的数据为0x0A,在图4.31IIC通信仿真协议分析中也可以看到在最后一行读到的数据是0x0A。图4.29IIC通信试验仿真整体效果图SDASCKXTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.0/T21P1.1/T2EX2P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C52SCK6SDA5WP7A01A12A23U224C02CI2CSDASCLTRIG234567891RP1RESPACK-81234567820191817161514139101211U3LED-BARGRAPH-GRN图4.30IIC通信试验仿真图4.31IIC通信仿真协议分析',)


  • 编号:1700773970
  • 分类:其他文档
  • 软件: wps,office word
  • 大小:13页
  • 格式:docx
  • 风格:商务
  • PPT页数:655400 KB
  • 标签:

广告位推荐

相关其他文档更多>