手把手教你学单片机-012.pptVIP

  1. 1、本文档共25页,可阅读全部内容。
  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文档。上传文档
查看更多
手把手教你学单片机-012.ppt

--51基础(C语言) 金沙滩工作室 作者:小宋老师 第十一课: IIC通信 EEPROM 1、单片机控制功能 2、UART通信的字符显示 3、UART通信的波特率设置 常见的存储器件的介绍 常见存储器件:铁电,E2PROM,FLASH。 共同特点:掉电后数据不丢失 各自特点: 铁电:理论上可以无限次擦写,操作简单,但是容量小。 E2PROM:理论上擦写次数在30w到100w的不等,操作简单,容量中等。 FLASH:理论上擦写次数在10w到100w不等,容量很大,但操作较复杂,若要改变一个字节就要改变整个扇区。 I2C总线简介 1、I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备(特别是外部存储器件)。 2、I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。 3、I2C总线在传送数据过程中共有三种特殊类型信号, 它们分别是:开始信号、结束信号和应答信号。 I2C总线简介 1、I2C总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。I2C总线的另一个优点是,它支持多主机,其中任何能够进行发送和接收的设备都可以成为主机。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主机。 2、 I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。各种I2C均并联在这条总线上,但就像电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都有唯一的地址。 EEPROM的硬件连接 I2C的起始和停止 I2C的数据传输 I2C的起始程序 void I2CStart(void) { SDA = 1; Delay(); // 延时子程序 SCL = 1; Delay(); SDA = 0; Delay(); SCL = 0; } I2C的结束程序 void I2CStop(void) { SCL = 0; Delay(); SDA = 0; Delay(); SCL = 1; Delay(); SDA = 1; Delay(); } I2C的数据读写和应答 I2C与UART不同的地方首先在于先传高位,后传送低位。 主机写数据时,每发送一个字节,接收机需要回复一个应答位“0”,通过应答位来判断从机是否接收成功。 主机读数据时,接收一个字节结束后,主机也需要发送一应答位“0”,但是当接收最后一个字节结束后,则需发送一个非应答位“1”,发完了1后,再发一个停止信号,最终结束通信。 I2C写 数据流程 首先I2C起始信号,然后发送首字节,即器件(EEPROM)地址。并且在读写方向位上选择“写操作”方向。(0xa0) 第二个字节,发送数据的存储地址,就是要读取的数据所存储在EEPROM中的位置。 第三个字节,发送要存储的数据第一个字节,第二个字节…… 在写数据的过程中,都要等待EEPROM返回一个“应答位”。 Void write_eeprom(unsigned char addr, unsigned char databyte) { I2CStart(); I2CSend(0xa0); I2CSend(addr); I2CSend(databyte); I2CStop(); } Void I2CSend(unsigned char byte) { unsigned char mask, i; mask = 0x80; for(i = 0; i < 8; i++) { SCL = 0; Delay(); if((mask & byte) == 0) { SDA = 0; } else { SDA = 1; } mask >>= 1; Delay(); SCL = 1; Delay(); } SCL = 0; SDA = 1; Delay(); SCL = 1; Delay(); SCL = 0; } I2C

您可能关注的文档

文档评论(0)

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

1亿VIP精品文档

相关文档