单片机应用_2C总线.ppt

  1. 1、本文档共50页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机应用设计 项目实训—— I2C总线 学习内容: 一。总线(I2C总线)。 二。 AD、DA转换(PCF8591) 。 三。键盘。 四。数码管显示。 五。通信。(232、485)。 六。步进电机驱动控制。第一篇i2C总线(理论2学时,实践4学时) 学习目的:(1).认识i2C总线的实现原理,简单了解其协议思想。(2).通过i2C总线,认识器件之间,以及电路与软件的融合思想。 (3).通过i2C总线,使学生能触类旁通的扩展到其它协议类的原理。(4)通过i2C总线,学习单片机控制原理。 i2C(Inter-Integrated Circuit)总线:它是PHILIPS公司开发的双向两线制串行总线,用于连接微控制器及其外围设备,属于器件总线。 i2C总线产生于80年代,最初为音频和视频设备开发,在彩色电视机中大规模应用,如今主要应用于电讯和影音产品,微控制器与各种功能模块的连接,器件之间的互连通信,在计算机服务器的管理中也大量应用。 应用实例图一 应用实例图二 一。 i2C总线特点 简单性( 2线,电路简单,编程方便) 有效性i2C总线在IC之间进行双向数据传送,典型速度100Kbit/S,快速模式达400Kbit/S,后来增加了高速模式达3.4Mbit/S。总线的长度可达1000米。i2C总线上的每个电路和模块都有唯一的地址,像手机拨号一样。每一个IC都可以是主控器(或被控器),都可以是发送器(或接收器)。 二。 I2C总线的工作原理:数据传输的实质是:通过实现数字逻辑的“与”逻辑 来传递二进制1和0的数据。“1”高电平; “0”低电平。 I2C总线接口的实现电路简图 2.1 I2C总线的构成及信号类型: 一。构成: 数据线 SDA时钟线 SCL 二。数据传输的有效规则: 1. SCL高电平期间,SDA保持不变,数据有效。2. SCL低电平期间,SDA改变,数据变化有效。 三。应用方式: 1. 标准硬件 i2C 端口(硬核)。2. 软件模拟 i2C 端口(可编程器件用软件实现)。 I2C总线的三种信号类型: [开始信号] SCL高电平时,SDA产生高到低的下降沿跳变 [结束信号] SCL高电平时,SDA产生低到高的上升沿跳变 [应答信号] 接收数据的器件在接收到8bit数据后,向发送数据的器件发出低电平信号,表示已收到数据。这个信号由接收数据的器件发出。发送端收到应答信号后,作出分析判断。若未收到应答信号,则判断为受控单元出现故障。 串行总线上的数据传送时序图: 总线数据传送的模拟 (1)总线数据传送的时序要求 为了保证数据传送的可靠性,标准的总线数据传送有着严格的时序要求,如总线上时钟信号的最小低电平周期为4.7us,最小的高电平周期为4us等。 用单片机的普通I/O口模拟总线的数据传送时,单片机的时钟信号都能满足SDA、SCL上升沿、下降沿的时间要求,因此,在时序模拟时,最重要的是保证典型信号。 (2) I2C总线的控制程序实现: /*I2C的启动程序*/ (时钟线高时,数据线上升沿) Void I2CStart (void) { SDA = 1;//释放数据线 SomeNOP(); //延时 SCL = 1;//时钟线拉高 SomeNOP(); //延时 SDA = 0;//数据线拉低 SomeNOP(); //延时 SCL = 0;//时钟线拉低 SomeNOP(); //延时 } /*I2C的停止程序*/ (时钟线高时,数据线上升沿) void I2CStop(void) { SDA = 0; SomeNOP(); SCL = 1; SomeNOP(); SDA = 1; SomeNOP(); } /*I2C的应答程序*/ void ACK(void)//Acknowledge信号 { SDA = 0;//发送0,应答 SomeNOP(); SCL = 1; SomeNOP();//产生时钟高电平 SCL = 0; SomeNOP(); } void NACK(void)//没有Acknowledge信号 { SDA = 1;//发送1,非应答 SomeNOP(); SCL = 1; SomeNOP();//产生时钟高电平 SCL = 0; SomeNOP(); } 检测应答位 bit TestAck() { bit ErrorBit; SDA=1; SCL=1; ErrorBit=SDA; SCL=0; return(ErrorBit); } 写8位数据 bit Write8Bit(unsigned char input) { unsig

文档评论(0)

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

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

1亿VIP精品文档

相关文档