I2CSPI总线原理总结.pdfVIP

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

IIC总线原理

1起始和终止都按时序图写他们的程序。

开始电平(建立4.7us)下降沿或上升沿(保持4us)之后电平(scl=0:

为接受下一个数据做准备)

2对于不带回值得函数,应当定义为void类型,在此函数体中不得出现

Return语句。

voidI2cStart()起始信号的模拟

{

SDA=1;初始条件,强制

Delay10us();4.7us

SCL=1;初始条件,建立时间使SDA保持时间4.7us

Delay10us();//建立时间是SDA保持时间4.7us

SDA=0;

Delay10us();//保持时间是4us

SCL=0;

Delay10us();

起始信号:在SCL时钟信号在高电平期间SDA信号产生一个下降沿

起始之后SDA和SCL都为0

2voidI2cStop()由主控制器(有CPU的:单片机)主动建立的

{

SDA=0;

Delay10us();

SCL=1;

Delay10us();//建立时间大于4.7us

SDA=1;

Delay10us();

}

终止信号:在SCL时钟信号高电平期间SDA信号产生一个上升沿

结束之后保持SDA和SCL都为1;表示总线空闲

voidPcf8591SendByte(unsignedcharchannel)

{

I2cStart();

I2cSendByte(WRITEADDR);//发送写器件地址

I2cSendByte(0x40|channel);//发送控制寄存器

I2cStop();

}

在开始和停止条件之间从发送机传输到接收机的数据字节数是没有限制的

一个主控能控制信号的传输和时钟频率。如单片机置位和复位SDA和SCL来

产生发送或接收数据的脉冲。单片机令SDA=1时,释放数据SDA,让别的器件来控

制SDA

启动与停止

数据传输时:单片机令SCL=0,是为下一个数据的传送做准备。

SCL=1时,SDA要保持1或0不变,因为此时接收器正在读取数据

SCL=0时,允许SDA的电平发送改变,此时接收器不读取SDA上的数据

总线上每传送一位数据都有一个时钟脉冲与之对应(同步控制)

主控器给被控器发送应答信号

子函数中:哪里有Return语句,哪里就是此函数的结束。

unsignedcharI2cSendByte(unsignedchardat)(单片机向从接收器发送

信息)

{

unsignedchara=0,b=0;//最大255,一个机器周期为1us,最大延时

255us。

for(a=0;a8;a++)//要发送8位,从最高位开始

{//起始信号之后SCL=0,所以可以直接改变SDA信号

?SDA=dat7;或if((data)0x80)

SDA=1;

dat=dat1;elseSDA=0;

Delay10us();

SCL=1;高电平时间4us

Delay10us();//建立时间4.7us

SCL=0;

Delay10us();//时间大于4us

}

SDA=1;

Delay10us();

SCL=1;

while(SDA)//等待应答,也就是等待从接收设备把SDA拉低,由从接收器发

{

b++;

if(b200)//如果超过200us没有应答发送失败,或者为从机不进行应

答,非应答,表示接收结束

{

SCL=0;

Delay10us();

return0;

}

}

文档评论(0)

177****7939 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档