IIC总线协议程序.pdf

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
IIC总线协议程序

51单片机IO口模拟IIC总线协议 2008-01-13 15:01 2 I C 总线是 Philips 公司提出的一种集成电路 IC 器件之间相连接的总线协 议,其目的是使电子系统(不只限于单片机系统)各个IC 器件之间的连线变得 容易。因为使用传统的并行总线在IC器件之间连接,往往会使得IC 之间连线较 2 多,显得非常复杂。而I C 总线则使IC 器件之间只需SDA、SCL 两条连线就可 2 以传送数据,因而十分方便。由于I C在印刷体中不容易书写(需要上标),所 以实际书写时,还常见到 IIC、I2C 等书写方法,本文采用 IIC 的写法,敬请注 意。关于IIC 总线的知识,请参阅相关书籍,此处不再做进一步介绍。 下面我们用一个使用IIC 总线连接器件的例子来简单说明IIC 总线的仿真。 例.EEPROM24C02是采用IIC 接口的一种常用2Kbit(256×8bit)的存储器。 编写程序使用AT89C51的IO 口模拟实现IIC 总线协议进行通信,并向24C02存 储器内从字节0到字节FF 写入数字0到FF。 51系列单片机本身没有IIC 接口,但一些本身具有IIC 接口的单片机往往是 高端产品,一方面价格不菲,另一方面我们的系统也没有必要使用之。通常我们 就使用软件通过51系列单片机的IO 口来模拟实现IIC 总线通信。 本例事实上比较简单,但需要对IIC 总线时序有较好的理解。源文件如下图 所示(采用C51语言编写): 在Keil 中编辑好源文件以后,接下来就可以建立工程文件并生成相应的源 代码了,然后我们来绘制电路图。 此例的电路图极其简单。只需两个IC,即AT89C51和24C02C,和两个上 拉电阻,而且上拉电阻还可以省略。至于连接,就更为简单了。最后得到绘制好 的电路图如下图所示: 绘制好电路图,我们就可以将前面刚刚生成的程序源代码装入单片机了, 装入以后,下面我们就可以来进行仿真了。 首先点击仿真按钮,系统没有什么反映,只有高低电平变化的颜色。我们 要想查看结果,还要用前文中仿真扩展RAM 存储器的方法,先点击暂停,然后 点击“Debug”菜单下的“I2C Memory Internal Memory – U2”子菜单来打开U2即 EEPROM 存储器24C02C 的内容窗口“I2C Memory Internal Memory – U2”,然 后我们就看到了其中的内容,也就是 我们仿真程序的结果。如下图所示: 从图中我们能清楚地看到我们的仿真结果,程序完全正确地执行了我们的 命令。 当然,如果你过早地点击了暂停按钮,那么你得到的结果可能和上图略有 不同,那可能是因为程序尚未执行完毕。此时你可以继续点击运行按钮,或者点 击单步按钮来仔细查看程序执行过程中24C02C 存储器内容的改变情况。 /* Acessthe eeprom--24c04 */ #include intrins.h #ifndef INT8U #define INT8U unsigned char #endif #ifndef INT8S #define INT8S signed char #endif #ifndef INT16U #define INT16U unsigned int #endif #define I2C_DELAY;_nop_();_nop_();_nop_();_nop_();_nop_(); // =4.7uS // // delay 100us // void mDelay(INT8U k) { INT16U i ; for(; k0; k--) { for(i=0; i93; i++) ; } } // //OK // void I2C_Start(void) { SDA = 1; I2C_DELAY; SCL = 1; I2C_DELAY; SDA = 0; I2C_DELAY; I2C_DELAY; } // //OK // void I2C_Stop(void) { SDA = 0 ; I2C_DELAY; SCL = 1 ; I2C_DELAY; SDA = 1 ; I2C_DELAY; I2C_DELAY; } // // // void sendA

文档评论(0)

almm118 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档