学习51单片机IIC控制24C02的过程

在大学时代,遇到一个练手项目,项目需要掉电保存数据。掉电怎么保存数据,都没电了(请原谅我当时是这么小白)

我们90以后的人,都有个特点,没事有事爱找度娘。一查,24C02,一看百度百科,好家伙,还真的可以掉电保存数据,好吧,突然感觉项目有突破点了,起码我找到要去做什么了。

看了一下24C02的资料,发现是通过IIC控制进行读写的。对于通信方式,我只知道IO高低电平,串口,AD,IIC又是什么鬼?(请原谅我当时是这么小白)

没办法,我们90后的人,都有一个特点,没事有事爱找度娘。什么是IIC?一查,哦,原来就是2个IO,一个叫做SDAI的IO做数据传递,另一个叫做SCL的IO做时序控制。什么嘛,吓我一跳,原来这么简单。

那IIC到底这么通信呢?没办法,我们90后的人,都有一个特点,没事有事爱找度娘。一查,原来一个完整的IIC通信就5个控制时序,start,send,ack,receive,stop,加上一个注意点:空闲时,二个IO都为高电平。

(1) start :就是在 SCL 高电平的时候,SDA由高拉低

(2)send : 在SCL低电平的时候,SDA准备好数据,然后SCL拉高,此时从机读取SDA的电平,这样就成功传递一个bit 的数据,连续8次,完成一个byte的数据。

(3)ack:应答信号,不管是send动作,还是receive动作,在完成8个脉冲之后,第九个脉冲就是作为ack应答信号,应答时,在SCL低电平时,SDA准备好数据(低电平为应答,高电平为不应答),然后SCL拉高,读取SDA信号,如果为低电平,说明通信成功。

(4)receive :在SCL低电平的时候,从机SDA准备好数据,然后SCL拉高,此时主机读取SDA的电平,这样就成功传递一个bit 的数据,连续8次,完成一个byte的数据。

注意(2)(3)(4),都是在SCL低电平的时候,SDA准备好数据,SCL高电平的时候,读取SDA的数据。换句话来说,SCL拉低,我们在SDA上面更新一个bit的数据,SCL拉高,我们在SDA上面读取一个bit的数据

(5)stop :就是在SCL高电平的时候,SDA由低拉高 。 和start刚刚相反。

完了。

说这么多废话,最重要编程。我不废话了,提供完整的C51单片机IIC读写24C02的程序,还有仿真。

仿真图如下 :

学习51单片机IIC控制24C02的过程

仿真图

说明一下,24C02的地址硬设为0xA0。右上角,是一个示波器,用来看IIC的波形的。右下角是IIC分析仪,用来看一次完整的IIC通信的数据和时序。

程序如下,飞飞自己写的

学习51单片机IIC控制24C02的过程

仿真结果 :

学习51单片机IIC控制24C02的过程

仿真结果

最后是绿灯的,说明写入数据,和读取数据都没问题

看一下波形:

学习51单片机IIC控制24C02的过程

IIC波形

你们可能不知道,我有强迫症。以前用别人写的模拟IIC程序, 看到SCL的波形,高电平和低电平一大一小,非常不习惯。你看我这波形,高低电平的时间,几乎是1:1,波形看着好舒服。

看一下IIC分析仪的数据:

学习51单片机IIC控制24C02的过程

看中间二行,上面的是在FE的地址,写入数据FE, 下面的是在00地址,读取到数据00。