虚拟i2c接口通信协议.docxVIP

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

虚拟I2C接口通信协议 I2C协议规定在数据传送过程中必须确认数据传送的开始和结束。I2C协议技术规范中规定SCL为高电平,SDA由高电平向低电平跳变定为数据传送的开始;当时钟线SCL为高电平,数据线SDA由低电平向高电平跳变为结束信号。开始信号和结束信号都由主器件产生。在开始信号产生以后,总线即被认为忙状态。在信号结束一段时间内,总线被认为是空闲的。 I2C总线的数据传输格式是在I2C总线开始后,送出来的第一个字节数据用来选择从器件地址的。其中前7位为地址码,第8位为方向位(R/W),方向位为0表示发送,即主器件把数据写到所选择的从器件中去;方向位为1表示读取,即主器件读取从器件中指定的地址的信息。开始后系统中各器件把自己的地址和主器件送到总线上的地址进行比较,如果和主器件发送到总线上的地址一致,则该器件即为被主器件寻址的器件,其接收信息还是发送信息由第8位(R/W)。I2C总线每次传送的字节数据不限,但每一字节必须是8位,而且每个传送的字节后面必须跟一个认可位(第9位),也叫应答位。每次传送都是先传最高位,通常器件在接收每字节后都会做响应,即释放SCL线,返回高电平,准备接收下一个字节数据,主器件可以继续发送。如果从器件正在处理一个实时事件而不能接收数据,可以使SCL线保持低电平。此时主器件产生一个结束信号,使发送异常结束,迫使主器件处于等待状态。当从器件处理完毕时,释放SCL总线,主器件继续传送。 当主器件发送完一字节数据后,接着发送对应于SCL线上的一个时钟(ACK)认可位,此时钟内主器件释放SDA线,一字节传送结束,而从器件的响应信号将SDA线,一个字节传送结束,而从器件响应信号使SDA线拉成低电平,使SDA在该时钟的高电平期间为稳定的低电平。从器件响应信号结束后,SDA线返回高电平进入下一个传送周期。模拟I2C总线的C51程序#includereg51.h#includeintrins.h#define uchar unsigned char;#define uint? unsigned int?;#define _Nop() _nop_();/* 端口定义*/sbit SDA=P1^3;?????? /*模拟I2C数据位8*/sbit SCL=P1^2;?????? /*模拟I2C时钟位8*//*状态标志位*/bit ACK;/********************void Start_I2C()****************     该函数为总线启动函数****************************************************/viod Start_I2C(void){?? SDA=1;??????????????? /*发送起始条件数据信号*/?? _Nop();? SCL=1;? _Nop();??????????????? /*起始条件建立时间大于4.7us*/? _Nop();? _Nop();? _Nop();? _Nop();?SDA=0;?????????????? /*发送起始信号*/? _Nop();    /*起始条件信号锁定时间大于4us*/? _Nop();? _Nop();? _Nop();? _Nop();? _Nop();? SCL=0;??????????? /*钳住I2C总线准备发送数据*/? _Nop();?_Nop();}/********************void Stop_I2C()****************     该函数为总线结束函数****************************************************/viod Stop_I2C(){? SDA=0;??????????????? /*发送结束条件数据信号*/?? _Nop();    /*发送结束条件数据信号*/? SCL=1;? _Nop();    /*起始条件建立时间大于4.7us*/? _Nop();? _Nop();? _Nop();? _Nop();?SDA=1;??   /*发送结束信号*/? _Nop(); ? _Nop();? _Nop();? _Nop();? _Nop();}/********************void SendB(uchar c?)**************** 该函数为字节数据传送函数,功能是将数据C发送出去, C可以是地址,也可以是数据,发完后等待应答,并对此状态 位进行操作。****************************************************/void SendB(uchar c?){uncharBitCnt;for(BitCnt=0;BitCn

文档评论(0)

2017ll + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档