第6章 I2C串行总线.ppt
文本预览下载声明
典型读代码——从I2C总线接收一个字节 uchar RcvByte( ){ uchar i, k=0; SCL=0; Delay( ); SDA=1; for(i=0;i8;i++){ SCL=1; //SCL为高时,SDA上才有有效的数据 Delay( ); k=(k1)|SDA; //把SDA当前值(0或1)添在字节k的末位 SCL=0; //将SCL拉低,准备下一个bit的传送 Delay( ); } return k; } 6.3.2 PCF8591的D/A、A/D转换应用 PCF8591由Philips公司设计推出,是一个单片集成、单独供电、低功耗、8-bit CMOS数据获取器件。具有4个模拟输入、1个模拟输出和1个串行I2C总线接口。PCF8591的3个地址引脚A0, A1和A2可用于硬件地址编程,允许在同个I2C总线上接入8个PCF8591器件。厂商固定地址位为“1001”。PCF8591的功能包括多路模拟输入、内置跟踪保持、8-bit模数转换和8-bit数模转换。PCF8591的最大转化速率由I2C总线的最大速率决定。 AIN3-AIN0:模拟信号输入端 A3-A0:引脚地址端 VDD、VSS:电源端(2.5~6V) OSC:外部时钟输入端,内部时钟输出端 EXT:内/外部时钟选择,使用内部时钟时EXT接地 AGND:模拟信号地 AOUT:D/A转换输出端 VREF:参考电源 A/D应用举例 对于模/数转换来说,作为主机的单片机是在读数据,因此遵循I2C读操作的规律: 主机机先发送器件的7位地址码和写方向位0,在获得从机应答后,发出控制字节,说明器件的一些工作参数。收到应答后,主机重复一次起始信号并发出器件地址和读方向位1,收到器件应答后就开始读出数据字节。当读完最后一个字节后,主机应返回“非应答”,并发出终止信号以结束读出操作。 A/D应用举例 D7 D6 D5 D4 D3 D2 D1 D0 控制字节用于实现器件的各种功能,如模拟信号由哪几个通道输入等。控制字节存放在控制寄存器中。总线操作时为主控制器发送的第二个字节。其格式如下: D1D0 — A/D通道编号:00-通道0、01-通道1、10-通道2、11-通道3 D2 — 自动增益标志位(有效位为1) D3 — 未使用,固定为0 D5D4 — 模拟量输入方式选择:00-四路单端输入、01-三路差分输入、10-单端与差分混合输入、11-两路差分输入 D6 — 模拟输出允许标志位(为1则允许AOUT引脚输出) D7 — 未使用,固定为0 D/A应用举例 对于数/模转换来说,作为主机的单片机是在写数据,因此遵循I2C总线写操作的规律: 主机进行写操作时,首先发送器件的7位地址码和写方向位0,在获得从机应答后,发出控制字节,说明器件的一些工作参数。收到应答后,主机可以开始发送数据,每发一个字节后都要等待应答。 #define uchar unsigned char #define uint unsigned int * 第6章 I2C串行总线 总线规范 传输时序 I2C总线的应用 6.1 I2C总线规范 6.1.1 I2C总线概述 I2C总线是由Philips公司于20世纪80年代提出的串行通讯接口规范,使用两条线——串行数据线(SDA)、串行时钟线(SCL)在连接到该总线上的器件之间传送信息。总线上的每个器件均可设置一唯一地址,并能根据所设的功能起到发送器或接收器的作用。除了作为发送器和接收器,在执行数据传输时,器件还可以设定为主控器和被控器。由主控器(简称主机)启动总线上的数据传输,并产生数据传输所需的时钟信号。此时,任何被其寻址的器件均为被控器(从机),这意味着多个有能力控制总线的器件都可以连接到总线上。 6.1.2 I2C总线特征 I2C总线有两根双向信号线:数据线SDA、时钟线SCL 两根线都通过上拉电阻接正电源。总线空闲时,两根线均为高电平。连接到总线的任何一个器件输出的低电平,都将使总线的信号变低,即各器件的SDA和SCL都是“线与”关系。每一个接到总线上的器件都有一个唯一的地址。 I2C总线接口的电气结构 6.2 I2C总线的时序 一、数据的有效性 I2C总线进行数据传送时,时钟信号SCL为高电平期间,数据线SDA上的信号必须保持稳定,只有在SCL上的信号为低电平时,SDA上的电平才允许发送变化。 二、起始和终止信号 当SCL保持“高”时,SDA的下降沿到来,为开始条件; 当SCL保持“高”时,SDA的上升沿到来,为停止条件。 二、起始和终止信号 当SCL保持“高”时,SDA的下降沿到来,为开始条件; 当SCL保持“高”时,SDA的上升沿到来,为停止条件。 起始和终止
显示全部