IIC串口通信Word文件下载.docx
- 文档编号:21672502
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:14
- 大小:534.90KB
IIC串口通信Word文件下载.docx
《IIC串口通信Word文件下载.docx》由会员分享,可在线阅读,更多相关《IIC串口通信Word文件下载.docx(14页珍藏版)》请在冰豆网上搜索。
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通信协议分调试。
图4.26IIC通信硬件原理电路图
2、程序设计
IIC通信模块的程序设计主要包括系统启动后向立即向24C02中写入从0到100的数据,然后每个约1S从24C02中依次读取写入的数据,读完后系统等待。
/*
实验名称:
IIC通信实验
功能:
单片机用IIC通信方式向24C02写入
晶振:
11.0592MHz
MCU类型:
AT89C51
作者:
胡云冰
创建日期:
14-02-08
*/
#include<
reg52.h>
#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>
j--);
}
voidDely24(void)
用于通信中的软件延时
这个时间与器件、上拉电阻有很大关系,一般宜大不宜小
voidDely24(void)
unsignedchari;
for(i=0;
i<
20;
i++);
unsignedcharReadByte(void)
时钟下降沿读取一位数据
j
unsignedcharReadByte(void)
unsignedchari,j;
for(i=0;
8;
i++)//循环读8位
{
SDA=1;
//置高,不影响后续读取,而且是必须的
SCL=1;
j<
<
=1;
j|=(bit)SDA;
//读1位
SCL=0;
}
SDA=0;
//必须的拉低
return(j);
voidSendByte(unsignedcharSendDat)
将一个字节送上总线
unsignedcharSendDat
voidSendByte(unsignedcharSendDat)
i++)//循环8次
j=SendDat;
SDA=j&
0x80;
//送出1位
Dely24();
//必要的延时
SendDat<
//为下一位做准备
//必须拉高
while(SDA==1);
//等待应答
//为确保每写入一个字节前,SDA,SCL必须拉低
voidWriIIC(unsignedcharWcmd,add,dat)
发送一个8位数
unsignedcharWcmd,add,dat
SendByte()
Wcmd是写命令,add是地址,dat是数据
voidWriIIC(unsignedcharWcmd,add,dat)
{
//开始时,SDA必须先于SCL拉低,必须的
SendByte(Wcmd);
//命令,每写入一个字节前是SDA,SCL必须拉低
SendByte(add);
//地址
SendByte(dat);
//数据
//在写结束时,SCL必须先于SDA拉高,而且是必须的
unsignedcharReadIIC(unsignedcharWcmd,add,Rcmd)
读取一个8位数
unsignedcharWcmd,add,Rcmd
i
SendByte();
ReadByte();
Wcmd是写命令,add是地址Rcmd是读命令
//开始
//命令
//选取存储区地址
//注意这里与写结束时的不同,从写到读的转换时,SDA须先于SCL拉高
SendByte(Rcmd);
//读取
i=ReadByte();
return(i);
voidmain(void)
主函数
WriIIC();
ReadIIC();
Wcmd是写命令,RRcmd是读命令
voidmain(void)
unsignedchari,get;
WP=0;
//允许写。
100;
i++)//向0到100的地址相应写入0到100
WriIIC(W_cmd,i,i);
i++)//从地址0到100读取数据
{//向0x00地址写入0xa5
get=ReadIIC(W_cmd,i,R_cmd);
//读0x00地址数据送P0
P1=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通信试验仿真整体效果图
图4.30IIC通信试验仿真
图4.31IIC通信仿真协议分析
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- IIC 串口 通信