首页 理论教育51单片机实战:串行EEPROM读写程序设计

51单片机实战:串行EEPROM读写程序设计

【摘要】:由于AT89S52单片机内部没有集成I2C总线模块,采用C语言编写I2C总线技术的通信协议,实现单片机与AT24C02存储器的密码读出与写入功能。图20-13 数据传送时序图I2C总线发送器送到SDA线上的每个字节必须为8位长,传送时高位在前,低位在后。图20-14 完整的数据传送过程2.AT24C02读写操作本系统设计中利用P1.2,P1.3作为SDA、SCL串行通信线,实现对AT24C02芯片内某一地址数据的读写操作。

由于AT89S52单片机内部没有集成I2C总线模块,采用C语言编写I2C总线技术的通信协议,实现单片机与AT24C02存储器的密码读出与写入功能。

1.I2C总线的传输协议和数据传输

(1)起始和停止条件

在数据传送过程中,必须确认数据传送的开始和结束。在I2C总线技术规范中,开始和结束信号(也称启动和停止信号)的定义如图20-12所示。

978-7-111-47690-0-Part03-113.jpg

图20-12 超始和停止信号图

开始信号:当时钟总线SCL为电平时,数据线SDA由高电平向低电平跳变,开始传送数据。

结束信号:当SCL线为高电平时,SDA线从低电平向高电平跳变,结束传送数据。

开始和结束信号都是由主器件产生。在开始信号以后,总线即被认为处于忙状态,其他器件不能再产生开始信号。主器件在结束信号以后退出主器件角色,经过一段时间后,总线被认为是空闲的。

(2)数据格式

I2C总线数据传送采用时钟脉冲逐位串行传送方式,在SCL的低电平期间,SDA线上高、低电平能变化,在高电平期间,SDA上数据必须保护稳定,以便接收器采样接收,数据传送时序如图20-13所示。

978-7-111-47690-0-Part03-114.jpg

图20-13 数据传送时序图

I2C总线发送器送到SDA线上的每个字节必须为8位长,传送时高位在前,低位在后。与之对应,主器件在SCL线上产生8个脉冲;第9个脉冲低电平期间,发送器释放SDA线,接收器把SDA线拉低,以给出一个接收确认位;第9个脉冲高电平期间,发送器收到这个确认位然后开始下一字节的传送,下一个字节的第一个脉冲低电平期间接收器释放SDA。每个字节需要9个脉冲,每次传送的字节数是不受限制的。

I2C总线的数据传送格式是在I2C总线开始信号后,送出的第一字节数据是用来选择从器件地址的,其中前7位为地址码,第8位为方向位(R/W)。方向位为“0”表示发送,即主器件把信息写到所选择的从器件中;方向位为“1”表示主器件将从从器件读信息。格式如下:(www.chuimin.cn)

978-7-111-47690-0-Part03-115.jpg

注:前四位固定为1010。

开始信号后,系统中的各个器件将自己的地址和主器件送到总线上的地址进行比较,如果与主器件发送到总线上的地址一致,则该器件即被主器件寻址的器件,其接收信息还是发送信息则由第8位(R/W)决定。发送完第一个字节后再开始发数据信号。

(3)响应

数据传输必须带响应。相关的响应时钟脉冲由主机产生,当主器件发送完一字节的数据后,接着发出对应于SCL线上的一个时钟(ACK)认可位,此时钟内主器件释放SDA线,一字节传送结束,而从器件的响应信号将SDA线拉成低电平,使SDA在该时钟的高电平期间为稳定的低电平。从器件的响应信号结束后,SDA线返回高电平,进入下一个传送周期。通常被寻址的接收器在接收到的每个字节后必须产生一个响应。当从机不能响应从机地址时,从机必须使数据线保持高电平,然后主机产生一个停止条件终止传输或者产生重复起始条件开始新的传输。如果从机接收器响应了从机地址但是在传输了一段时间后不能接收更多数据字节,主机必须再一次终止传输。这个情况用从机在第一个字节后没有产生响应来表示。从机使数据线保持高电平主机产生一个停止或重复起始条件。完整的数据传送过程如图20-14所示。

I2C总线还具有广播呼叫地址,用于寻址总线上所有器件的功能。若一个器件不需要广播呼叫寻址中所提供的任何数据,则可以忽咯该地址不作响应。如果该器件需要广播呼叫寻址中按需提供的数据,则应对地址作出响应,其表现为一个接收器。

978-7-111-47690-0-Part03-116.jpg

图20-14 完整的数据传送过程

2.AT24C02读写操作

本系统设计中利用P1.2,P1.3作为SDA、SCL串行通信线,实现对AT24C02芯片内某一地址数据的读写操作。2402读写关键代码如下:

从24c02的地址address中读取一个字节数据

978-7-111-47690-0-Part03-117.jpg

对于存储器存储密码,为了方便调试,如果忘记存储器里的密码,此时P1.4引脚断开,连接P1.5引脚使其设置成高电平,软件程序中设置初始密码123456,按下确认键,数码管显示“HELLO”;如果修改密码,可以把P1.4引脚接地,P1.5引脚设置成低电平,输入新的密码存入存储器中,如果存储成功,L4灯亮;下次只要把P1.5引脚设置高电平,P1.4引脚接地,将输入的键值与存储器里的密码进行对比分析。