单片机教程系列单片机读写IIC总线

上传人:宝路 文档编号:47700499 上传时间:2018-07-04 格式:PPT 页数:20 大小:378.61KB
返回 下载 相关 举报
单片机教程系列单片机读写IIC总线_第1页
第1页 / 共20页
单片机教程系列单片机读写IIC总线_第2页
第2页 / 共20页
单片机教程系列单片机读写IIC总线_第3页
第3页 / 共20页
单片机教程系列单片机读写IIC总线_第4页
第4页 / 共20页
单片机教程系列单片机读写IIC总线_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《单片机教程系列单片机读写IIC总线》由会员分享,可在线阅读,更多相关《单片机教程系列单片机读写IIC总线(20页珍藏版)》请在金锄头文库上搜索。

1、第28章 51系列单片机读写I2C总线I2C总线是Philips公司推出的一种双向二线制总线,全称为 芯片间总线(Inter Integrate Circuit BUS)。其在芯片 间使用两根连线实现全双工同步数据传送,一条数据线( SDA)和一条串行时钟线(SCL),可以很方便地构成外围 器件扩展系统。 I2C总线是很简单方便的芯片间串行扩展总线。使用I2C总线 可以直接和具有I2C总线接口的单片机通信,也可以和各种 类型的外围器件进行通信,如存储器、A/D、D/A、键盘、 LCD等。目前Philips、Atmel、Maxim以及其他集成电路制 造商推出了很多基于I2C总线的单片机和外围器件

2、,如24系 列E2PROM、串行实时时钟芯片DS1302、USB2.0芯片 CY7C68013A等。 本章主要介绍了I2C总线的工作原理、结构以及寻址方式, 并重点介绍了数据传输协议以及程序实现。这些程序均以 子程序的形式提供,便于读者调用。最后通过具体的实例 ,介绍如何使用单片机读写具有I2C总线接口的E2PROM。28.1 I2C总线概述 I2C总线对数据通信进行了严格的定义,要进行 I2C总线的接口设计,就需要首先了解I2C总线的 工作原理图、寻址方式和数据传输协议等。28.1.1 I2C总线工作原理 典型的I2C总线系统结构,如图28.1所示。其采用 两线制,由数据线SDA和时钟线SC

3、L构成。总线上 挂接的单片机(主器件)或外围器件(从器件) ,其接口电路都应具有I2C总线通信能力。28.1.2 I2C总线的电气结构和负载能力I2C总线的SCL和SDA端口输出为漏极开路,因此使用时上必 须连接上拉电阻。不同型号的器件对上拉电阻的要求不同 ,可参考具体器件的数据手册。上拉电阻的大小与电源电 压、传输速率等有关系。 I2C总线的传输速率可以支持100kHz和400kHz两种,对于 100kHz的速率一般采用10K的上拉电阻,对于400kHz的速 率一般采用2K的上拉电阻。 I2C总线上的外围扩展器件都是属于电压型负载的CMOS器件 ,因此总线上的器件数量不是由电流负载能力决定,

4、而是 由电容负载能力确定。I2C总线上每一个节点器件的接口都 有一定的等效电容,这会造成信号传输的延迟。通常I2C总 线的负载能力为400pF(通过驱动扩展可达4000pF),据此 可计算出总线长度及连接器件的数量。28.1.3 I2C总线器件的寻址方式I2C总线上的所有器件连接在一个公共的总线上,因此,主 器件在进行数据传输前选择需要通信的从器件,即进行总 线寻址。 I2C总线上所有外围器件都需要有惟一的地址,由器件地址 和引脚地址两部分组成,共7位。器件地址是I2C器件固有的 地址编码,器件出厂时就已经给定,不可更改。引脚地址 是由I2C总线外围器件的地址引脚(A2,A1,A0)决定,根

5、据其在电路中接电源正极、接地或悬空的不同,形成不同 的地址代码。引脚地址数也决定了同一种器件可接入总线 的最大数目。 地址位与一个方向位共同构成I2C总线器件寻址字节。寻址 字节的格式如表所示。方向位(R/)规定了总线上的主器 件与外围器件(从器件)的数据传输送方向。当方向位 R/=1,表示主器件读取从器件中的数据;R/=0,表示主器 件向从器件发送数据。28.2 I2C总线数据传输协议及其程序详解 I2C总线规定了严格的数据通信格式,所有具有 I2C总线接口的器件都必须遵守。另外,对于应用 最广的51系列单片机,却没有提供I2C总线接口。 实际上,利用这些单片机的普通I/O口,采用软件 模拟

6、I2C总线SCL和SDA上的数据传送时序,完全可 以实现对I2C总线器件的读、写操作。 下面就分别介绍数据传输过程中的格式以及如何 使用8051单片机来实现。这里假设51系列单片机 的外接晶振频率为6MHz,单片机的机器周期为2s ,采用P1.0作为时钟线SCL,P1.1作为数据线SDA 。28.2.1 起始信号起始信号用于开始I2C总线通信。在时钟线SCL为高电平期间,数 据线SDA上出现由高电平向低电平变化的下降沿时,被认为是起始 信号。起始信号出现以后,才可以进行寻址或数据传输等。 如果采用汇编语言进行程序设计,则其程序示例如下: START:SETBP1.1; P1.1=1,SDA=1

7、 SETBP1.0; P1.0=1,SCL=1 NOP ;延时 NOP CLRP1.1 ; P1.1=0,SDA=0 NOP NOP CLRP1.0; P1.0=0, SCL=0 RET 28.2.2 终止信号终止信号用于终止I2C总线通信。在时钟线SCL为高电平期间,数 据线SDA上出现由低电平到高电平变化的上升沿时,被认为是终止 信号。终止信号一出现,所有总线操作都结束,主从器件释放总 线控制权。 如果采用汇编语言进行程序设计,则其程序示例如下: STOP:CLRP1.1 ; P1.1=0,SDA=0 SETBP1.0 ; P1.0=1,SCL=1 NOP NOP SETBP1.1 ; P

8、1.1=1,SDA=1 NOP NOP CLRP1.0; P1.0=0,SCL=0 RET 28.2.3 应答信号应答信号用于表明数据传输的结束。I2C总线数据传送时,每传送 一个字节数据后都必须有应答信号。应答信号从主器件产生。主 器件在第9个时钟位上释放数据总线,使其处于高电平状态,此时 从器件输出低电平拉低数据总线为应答信号。 如果采用汇编语言进行程序设计,则发送应答位子程序示例如下 : ACK: CLRP1.1 ; P1.1=0,SDA=0 SETBP1.0 ; P1.0=1,SCL=1 NOP NOP CLRP1.0; P1.0=0, SCL=0 NOP NOP SETBP1.1;

9、P1.1=1, SDA=1 RET 28.2.4 非应答信号 非应答信号用于数据传输出现异常而无法完成时 。在传送完一个字节数据后,在第9个时钟位上从 器件输出高电平为非应答信号。非应答信号的产 生有两种情况。 当从器件正在进行其他处理而无法接收总线上的 数据时,从器件不产生应答,此时从器件释放总 线,将数据线置为高电平。这样,主器件可产生 一个停止信号来终止总线数据传输。 当主器件接收来自从器件的数据时,接收到最后 一个数据字节后,必须给从器件发送一个非应答 信号,使从器件释放数据总线。这样,主器件才 可以发送停止信号,从而终止数据传送。28.2.5 应答位检查应答位检查用于检测接收的是否为

10、正常的应答信号,以便于判断数据接收是否正常, 方便后期处理。如果采用汇编语言进行程序设计,则检查应答位子程序示例如下: CACK: SETBP1.1; P1.1=1,SDA=1 NOP SETBP1.0; P1.0=1,SCL=1 NOP CLRF0;预设F0=0,表示 正常应答信号 MOVA,P1;读端口P1,输入 P1.1/ SDA引脚状态 JNBACC.1,CND;检查SDA状态,正 常状态转向CND SETBF0;无正常应答, F0=1,表示非应答信号 CND:CLRP1.0 ;结束子程序,使P1.0=0 NOP RET28.2.6 总线数据位 在I2C总线启动后或应答信号后的第18个

11、时钟脉 冲,对应于要传送字节的8位数据,数据位由低到 高传送。 I2C总线上的数据是伴随着时钟脉冲,一位一位地 传送的,每位数据占一个时钟脉冲。在时钟线SCL 高电平期间,数据线SDA的状态就表示要传送的数 据,高电平为数据1,低电平为数据0。在数据传 送时,数据线上数据的改变在时钟线为低电平时 完成,而时钟线为高电平时,数据线必须保持稳 定,否则数据线上的任何变化都会被当作起始或 终止信号,而致使数据传输停止。28.2.7 写数据 I2C总线协议规定了完整的数据传送格式。按照协 议规定,数据传输的开始以主器件发出起始信号 为准,然后发送寻址字节。寻址字节共8位,高7 位是被寻址的从器件地址,

12、最低一位是方向位, 方向位表示主器件与从器件之间的数据传送方向 ,方向位为“0”时表示主器件向从器件发送数据 (写)。在寻址字节后是将要传送的数据字节与 应答位,数据可以多字节连续发送。在数据传送 完毕后,主器件必须发送终止信号已释放总线控 制权。如果主器件希望继续占用总线,则可以不 产生终止信号,马上再次发送起始信号,并对另 一从器件进行寻址,便可进行新的数据传送。28.2.8 读数据 I2C总线进行读数据时,数据传输的开始以主器件 发出起始信号为准,然后发送寻址字节。寻址字 节共8位,高7位是被寻址的从器件地址,最低一 位是方向位,方向位表示主器件与从器件之间的 数据传送方向,方向位为“1

13、”时表示主器件从从 器件中接收数据(读)。在寻址字节后是将要传 送的数据字节与应答位,数据可以多字节连续发 送。在数据传送完毕后,主器件必须发送终止信 号已释放总线控制权。如果主器件希望继续占用 总线,则可以不产生终止信号,马上再次发送起 始信号,并对另一从器件进行寻址,便可进行新 的数据传送。28.3 51单片机读写EEPROM I2C总线接口器件以体积小、接口简单、读写操作 方便等优点,使其在单片机系统中有着广泛的应 用。目前常用于存储系统必要的参数,如密码、 启动代码、设备标识等。例如,计算机主板中的 BIOS就使用的是一个带有I2C总线的EEPROM,其中 保存了系统得重要信息和系统参

14、数的设置程序。 目前USB接口及其设备越来越被广泛使用,大有取 代其他老式接口的趋势。然而,如何区分计算机 上连接的众多USB外围设备呢?其实绝大部分的 USB接口芯片都通过上电读一个带有I2C总线的串 行EEPROM,来载入该设备的ID(包括Vendor ID、 Product ID和Device ID),根据这些ID来区分各 个USB设备,并加载相应的驱动程序。28.3.1 串行EEPROM存储器简介串行EEPROM存储器是一种采用串行总线的存储器,这类存储器具有体积小 、功耗低、允许工作电压范围宽等特点。目前,单片机系统中使用较多的 EEPROM芯片是24系列串行EEPROM。其具有型号

15、多、容量大、支持I2C总线协 议、占用单片机I/O端口少,芯片扩展方便、读写简单等优点。 目前,Atmel、MicroChip、National等公司均提供各种型号的I2C总线接口 的串行EEPROM存储器。下面以Atmel公司的产品为例进行介绍。 AT24C01/02/04/08系列是Atmel公司典型的I2C串行总线的EEPROM。这里以 AT24C08为例介绍。AT24C08具有10248位的存储容量,工作于从器件模 式,可重复擦写100万次,数据可以掉电保存100年。8引脚DIP封装的 AT24C08的封装结构,如图所示。28.3.2 电路设计 这里给出单片机AT89S52读写AT24

16、C08的电路图, 如图所示。28.3.3 程序设计这里采用Keil C51语言编写程序。具体操作步骤如下:28.3.4 仿真分析 Keil Vison3集成开发环境提供了很好的信号仿 真功能,下面就利用其进行I2C串行总线的时序仿 真分析。具体操作步骤如下:28.4 小结 本章详细介绍了I2C串行总线的工作原理、结构以 及寻址方式等,并对I2C串行总线的数据传输进行 了详细的介绍。本章还给出了采用普通的51系列 单片机模拟读写I2C串行总线的汇编语言和C语言 的代码。最后通过一个具体的实例,讲解了单片 机读写I2C总线外围器件的电路设计以及程序设计 。I2C串行总线具有接口简单,体积小等优点,在 实际电路设计中经常使用。熟练掌握本章,可以 控制大部分的I2C总线外围器件,大大扩展了51系 列单片机的使用范围。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号