1.IIC-EEPROM介绍
I2C 协议层
(1)数据有效性规定
SCL 线为高电平期间,SDA 线由高电平向低电平的变化表示起始信号;SCL
线为高电平期间,SDA 线由低电平向高电平的变化表示终止信号。
起始和终止信号都是由主机发出的,在起始信号产生后,总线就处于被占用
的状态;在终止信号产生后,总线就处于空闲状态。
主机发送信号给从机,需要产生起始信号,之后开始发送信号访问从机,从机接收信号后如果想要主机继续发送数据,就回复应答信号(低电平0),主机继续发送信号。从机不想接收则回复非应答信号(高电平1)。
主机接收从机信号亦可。
总线的寻址方式
I2C 总线寻址按照从机地址位数可分为两种,一种是 7 位,另一种是 10
位。采用 7 位的寻址字节(寻址字节是起始信号后的第一个字节)的位定义如
下:
D7~D1 位组成从机的地址。D0 位是数据传送方向位,为“ 0”时表示主机
向从机写数据,为“1”时表示主机由从机读数据。
例主机发送数据给从机,需要有从机地址。从机相同地址才可以对应接收。从机地址分为固定地址和可编程地址,可编程地址决定从机的数目的多少。若为4(固定)+3(编程位)
,则从机数目为2的3次方,即8个可编程位。
(5)数据传输
I2C 总线上传送的数据信号是广义的,既包括地址信号,又包括真正的数据
信号。在起始信号后必须传送一个从机的地址(
7 位),第 8 位是数据的传送264
方向位(R/W),用“ 0”表示主机发送(写)数据(
W),“ 1”表示主机接收
数据(R)。每次数据传送总是由主机产生的终止信号结束。但是,若主机希望
继续占用总线进行新的数据传送,则可以不产生终止信号,马上再次发出起始信
号对另一从机进行寻址。
在总线的一次数据传送过程中,可以有以下几种组合方式:
a、主机向从机发送数据,数据传送方向在整个传送过程中不变
注意:有阴影部分表示数据由主机向从机传送,无阴影部分则表示数据由从
机向主机传送。A 表示应答,A 非表示非应答(高电平)。S 表示起始信号,P 表
示终止信号。
解释:主机发送信号给从机,0表示从机接收,A表示从机做出应答型号,主机继续传输数据...直到非应答或不在发送时停止.
b、主机在第一个字节后,立即从从机读数据
c、在传送过程中,当需要改变传送方向时,起始信号和从机地址都被重复
产生一次,但两次读/写方向位正好相反
由于 51 单片机没有硬件 IIC 接口,即使有
硬件接口我们通常还是采用软件模拟 I2C。主要原因是硬件 IIC 设计的比较复
杂,而且稳定性不怎么好,程序移植比较麻烦,而用软件模拟 IIC,最大的好处
就是移植方便,同一个代码兼容所有单片机,任何一个单片机只要有 IO 口(不
需要特定 IO),都可以很快的移植过去。
2. AT24C02 介绍
AT24C02是系列,02表示02系列。我们开发板上使用的是 AT24C02(EEPROM)265
芯片,此芯片具有 I2C 通信接口,芯片内保存的数据在掉电情况下都不丢失,
所以通常用于存放一些比较重要的数据等。
AT24C02 芯片管脚及外观图如下图所示:
AT24C02 器件地址为 7 位,高 4 位固定为 1010,低 3 位由 A0/A1/A2 信
号线的电平决定。 因为传输地址或数据是以字节为单位传送的,当传送地址时,
器件地址占 7 位,还有最后一位(最低位 R/W)用来选择读写方向,它与地址
无关。其格式如下:
我们开发板已经将芯片的 A0/A1/A2 连接到 GND,所以器件地址为
1010000,即 0x50(未计算最低位)。如果要对芯片进行写操作时,R/W 即为 0,
写器件地址即为 0XA0;如果要对芯片进行读操作时,R/W 即为 1,此时读器件
地址为 0XA1。开发板上也将 WP 引脚直接接在 GND 上,此时芯片允许数据正常
读写。
3. 硬件设计
本实验使用到硬件资源如下:
(1)独立按键(K1-K4)
(2)动态数码管
(3)EEPROM 模块电路(AT24C02)
4 软件设计
注:需要创建多文件工程,因为要用到独立按键、数码管、EEPROM,所以需要将前面实验编写的独立按键、数码管、延时等程序全部放到 main.c 中来,此时在不增加 EEPROM 驱动程序时,main.c 文件中的代码量已经非常冗长,极其不便于程序的阅读、移植和维护,因此可用多文件管理的办法来使工程易于阅读、移植和维护。操作方法如下:
全部源文件和头文件:
主函数部分:
24c02部分:
iic部分:
独立按键部分代码:
数码管部分:
延时函数部分:
5 实验现象
使用 USB 线将开发板和电脑连接成功后(电脑能识别开发板上 CH340 串口),
把编译后产生的.hex 文件烧入到芯片内,实现现象如下:码管右 3 位显示 0,
按 K1 键将数据写入到 EEPROM 内保存,按 K2 键读取 EEPROM 内保存的数据,按
K3 键显示数据加 1,按 K4 键显示数据清零,最大能写入的数据是 255。