PIC单片机之I2C总线
一、I2C总线特点
I2C 总线是主从结构,单片机是主器件,存储器是从器件。一条总线可以带多个从器件( 也可以有多主结构),I2C 总线的SDA 和SCL 是双向的,开路门结构,通过上拉电阻接正电源。进行数据传输时,SDA 线上的数据必须在时钟的高电平周期保持稳定。数据线的高或低电平状态只有在SCL 线的时钟信号是低电平时才能改变,如图1 所示。
图1 数据位的有效性规定
在SCL 线是高电平时,SDA 线从高电平向低电平切换表示起始条件;当SCL 是高电平时SDA 线由低电平向高电平切换表示停止条件如图2 所示。
图2 起始和停止信号
发送到SDA 线上的每个字节必须为8 位。
可以由高位到低位传输多个字节。每个字节后必须跟一个响应位(ACK)。响应时钟脉冲由主机产生。主机释放SDA 线从机将SDA 线拉低,并在时钟脉冲的高电平期间保持稳定。如图3 示。当主机接受数据时,它收到最后一个数据字节后,必须向从机发出一个结束传送的信号。这个信号是由主机对从机的“非应答”来实现的。然后,从机释放SDA 线,以允许主机产生终止或重复起始信号。
图3 字节格式与应答
二、数据帧格式
(1)主机向从机发送数据,数据的传送方向在传输过程中不改变,如图4 所示。
图4 主机向从机发送数据
注:阴影部分:表示主机向从机发送数据;无阴影部分:表示主机向从机读取数据。
A:表示应答;:表示非应答。S:起始信号;P :终止信号。
(2)主机在第一个字节后,立即向从机读取数据,如图5 所示。
图5 主机在第一个字节后立即读从机
(3)复合格式,如图6 所示。传输改变方向的时候,起始条件和从机地址都会被重复,但R/ W-位取反。如果主机接收器发送一个停止或重复
起始信号,它之前应该发送了一个不响应信号()。
图6 复合格式
由以上格式可见,无论哪种传输方式,起始信号、终止信号和地址均由主机发出(图中阴影部分),数据字节的传送方向则由寻址字节中的方向位
规定,每个字节的传送都必须有应答位(A 或)。
下面通过24C02 实例在增强型PIC 实验板上编程,其硬件原理图如图7 所示,U7 为实验板上24C02 芯片,SDA 与单片机的RB5 口相连,SCL 与单片机RB4 相连,七段数码管D5、D7、D8 组成了显示单元,字形码的数据通过RC 口送入,各数码管的显示片选信号分别不同的RA 口进行控制。
图7 读/ 写AT24C 系列存储器原理图
在MPLab IDE 软件中新建工程,加入源程序代码,同时进行芯片型号的选择和配置位的设置,我们实验所用的芯片型号为PIC16F877A。
编写的程序代码如下,其中程序流程图如图8 所示。 三、软件流程图
PIC单片机之I2C总线



