1、项目五 存储系统设计任务2 串行EEPROM的扩展设计任务内容 设计一个带1位数码管的显示系统,能存储待显示的数据,掉电不丢失。选择串行EEPROM完成设计。学习目标1.了解串行E2PROM芯片AT24C系列的性能和使用方法2.掌握串行EEPROM芯片扩展的接口电路设计3.了解I2C总线的协议规范和操作时序4.掌握单片机模拟I2C总线操作的软件设计方法5.巩固数码管显示的接口电路设计和程序设计方法。知 识 点知识点一 串线EEPROM、铁电存储器知识点二 I2C总线协议规范知识点三 I2C总线的应用知识点四 AT24C04与单片机的接口 串行接口芯片与并行接口芯片相比,以占用单片机口线少而占优
2、势,代表性的串行存储器有:ATMEL公司生产的AT24C系列EEPROM、富士通生产的MB85RC等系列铁电存储器(FRAM),其中铁电存储器的操作频率可达1 MHz,读写次数1012次/B,适合数据不断变化的存储场合。AT24C、MB85RC系列均采用二线制I2C总线结构,可以与具有I2C总线结构的单片机或者模拟I2C总线传输方式的单片机直接连接。这种结构不仅占用很少的资源和I/O口线,而且体积大大缩小,同时具有工作电源宽、抗干扰能力强、功耗低、掉电数据保持、支持在线编程等特点。因此这类存储器芯片已被广泛应用到各类控制电路中。知识点一 串线EEPROM、铁电存储器1 1引脚图及说明引脚图及说
3、明知识点一 串线EEPROM、铁电存储器(1)SCL:串行时钟端,用于对输入和输出数据的同步。(2)SDA:串行数据/地址输入或输出端。(3)WP:写保护,接高电平时具有写保护功能。(4)A0、A1、A2:片选输入。(5)Vcc:电源端,接+5V电源。(6)VSS:接地端。本任务将以AT24C04为例,介绍这类芯片的应用。MB85RC系列铁电存储器的应用,可以参考AT24C系列EEPROM,时序均符合I2C规范,主要区别在于铁电存储器的操作频率快,脉冲之间可以不加延时。2 2芯片特性芯片特性知识点一 串线EEPROM、铁电存储器(1)功能描述 AT24C04支持I2C双向二线制串行总线及其传输
4、协议。在串行E2PROM系统中,必须有一片可以产生串行时钟(SCL)的主器件控制,通常这个主器件就是单片机,控制其总线访问及产生“启动”和“停止”信号。对E2PROM写操作时,单片机是发送器,串行E2PROM是接收器,而在读操作时则相反。进行哪一种操作方式则由单片机确定。知识点一 串线EEPROM、铁电存储器(2)总线特性 I2C双向二线制串行总线协议定义只有在总线处于“非忙”状态时,数据传输才能被初始化。在数据传送期间,只要时钟线为高电平,数据线都必须保持稳定,数据才有效。否则数据线上的任何变化都被当作“启动”或“停止”信号。知识点一 串线EEPROM、铁电存储器(1 1)A A段段:总线非
5、忙状态。在此期间:总线非忙状态。在此期间SDASDA,SCLSCL都保持高电平。都保持高电平。(2 2)B B段段:启动数据传输。当:启动数据传输。当SCLSCL为高电平时,为高电平时,SDASDA由高电平变为低电平的下降沿被由高电平变为低电平的下降沿被认为是认为是“启动启动”信号,只有出现了信号,只有出现了“启动启动”信号后,其他命令才有效。信号后,其他命令才有效。(3 3)C C段段:停止数据传输。当:停止数据传输。当SCLSCL为高电平时,为高电平时,SDASDA低电平的上升沿被认为是低电平的上升沿被认为是“停止停止”信号。随着信号。随着“停止停止”信号的出现,所有外部操作都结束。信号的
6、出现,所有外部操作都结束。(4 4)D D段段:数据有效。在出现:数据有效。在出现“启动启动”信号以后,信号以后,SCLSCL为高电平且数据线稳定,这为高电平且数据线稳定,这时数据线的状态表示要传送数据。时数据线的状态表示要传送数据。知识点二 I2C总线协议规范 芯片的特征码为芯片的特征码为10101010。芯片地址编码。芯片地址编码A2A2、A1A1与引脚上的与引脚上的A2A2、A1A1的接法(接的接法(接VCCVCC为为1 1,接,接VSSVSS为为0 0)相比较,如果一致,该芯片)相比较,如果一致,该芯片被选通。所以一个被选通。所以一个I I2 2C C总线上最多可以挂四个总线上最多可以
7、挂四个AT24C04AT24C04芯片。芯片。P0P0用于选择片内地址:用于选择片内地址:AT24C04AT24C04共共4Kbit4Kbit容量(容量(512Byte512Byte),),P0=0P0=0选择选择02550255单元空间,单元空间,P0=1P0=1选择选择256511256511单元空间。单元空间。1.AT24C041.AT24C04的的I I2 2C C总线控制字总线控制字知识点二 I2C总线协议规范 被寻址的串行被寻址的串行E E2 2PROMPROM发出应答信号后,微处理器紧跟着发发出应答信号后,微处理器紧跟着发出一个字节的串行出一个字节的串行E E2 2PROMPRO
8、M存储单元的地址。当微处理器又接收存储单元的地址。当微处理器又接收到应答信号后,再送出要写入一个字节的数据。当微处理器再到应答信号后,再送出要写入一个字节的数据。当微处理器再接收到应答信号后,立刻发接收到应答信号后,立刻发“停止停止”信号,这个信号,这个“停止停止”信号信号就激活内部编程周期,把接收到的就激活内部编程周期,把接收到的8 8位数据写入指定的串行位数据写入指定的串行E E2 2PROMPROM存储单元。存储单元。2.2.写操作写操作知识点二 I2C总线协议规范 读指定地址存储单元方式下微处理器需先发送芯片地址和读指定地址存储单元方式下微处理器需先发送芯片地址和指定单元地址,在得到指
9、定单元地址,在得到“应答应答”信号后,再发送信号后,再发送“启动启动”信号,信号,之后再发送芯片地址和之后再发送芯片地址和R/W=1R/W=1的控制信号,当串行的控制信号,当串行EEPROMEEPROM发出发出应答后,就串行输出数据。当一帧数据读完后发送非应答信号应答后,就串行输出数据。当一帧数据读完后发送非应答信号(高电平)紧接着发送(高电平)紧接着发送“停止停止”信号。信号。3 3 读操作读操作知识点三 I2C总线的应用 读懂时序图,严格按照时序,进行各函数的编写。读懂时序图,严格按照时序,进行各函数的编写。I I2 2C C总线总线上的数据传输,每个字节为上的数据传输,每个字节为8 8位
10、,遵循高位先传,低位后传的位,遵循高位先传,低位后传的原则。原则。#define DELAY_TIME 60#define DELAY_TIME 60#define TRUE 1#define TRUE 1#define FALSE 0#define FALSE 0sbit SCL=P10;/sbit SCL=P10;/*串行时钟串行时钟*/sbit SDA=P11;/sbit SDA=P11;/*串行数据串行数据*/void DELAY(unsigned int t)/void DELAY(unsigned int t)/*延时函数延时函数*/while(t!=0)while(t!=0)t-
11、;t-;知识点三 I2C总线的应用/*启动启动I2CI2C总线的函数,当总线的函数,当SCLSCL为高电平时使为高电平时使SDASDA产生一个负跳变产生一个负跳变*/void I2C_Start(void)void I2C_Start(void)SDA=1;SDA=1;SCL=1;SCL=1;DELAY(DELAY_TIME);DELAY(DELAY_TIME);SDA=0;SDA=0;DELAY(DELAY_TIME);DELAY(DELAY_TIME);SCL=0;SCL=0;DELAY(DELAY_TIME);DELAY(DELAY_TIME);知识点三 I2C总线的应用/*终止终止I2
12、CI2C总线,当总线,当SCLSCL为高电平时使为高电平时使SDASDA产生一个正跳变产生一个正跳变*/void I2C_Stop(void)void I2C_Stop(void)SCL=0;SCL=0;SDA=0;SDA=0;SCL=1;SCL=1;DELAY(DELAY_TIME);DELAY(DELAY_TIME);SDA=1;SDA=1;DELAY(DELAY_TIME);DELAY(DELAY_TIME);SCL=0;SCL=0;DELAY(DELAY_TIME);DELAY(DELAY_TIME);知识点三 I2C总线的应用/*发送发送0 0,在,在SCLSCL为高电平时使为高电平
13、时使SDASDA信号为低信号为低*/void SEND_0(void)/void SEND_0(void)/*SEND ACK SEND ACK*/SDA=0;SDA=0;SCL=1;SCL=1;DELAY(DELAY_TIME);DELAY(DELAY_TIME);SCL=0;SCL=0;DELAY(DELAY_TIME);DELAY(DELAY_TIME);知识点三 I2C总线的应用/*发送发送1 1,在,在SCLSCL为高电平时使为高电平时使SDASDA信号为高信号为高*/void SEND_1(void)void SEND_1(void)SDA=1;SDA=1;SCL=1;SCL=1;
14、DELAY(DELAY_TIME);DELAY(DELAY_TIME);SCL=0;SCL=0;DELAY(DELAY_TIME);DELAY(DELAY_TIME);知识点三 I2C总线的应用/*发送完一个字节后检验设备的应答信号发送完一个字节后检验设备的应答信号*/bit Check_Acknowledge(void)bit Check_Acknowledge(void)SDA=1;SDA=1;SCL=1;SCL=1;DELAY(DELAY_TIME/2);DELAY(DELAY_TIME/2);F0=SDA;F0=SDA;DELAY(DELAY_TIME/2);DELAY(DELAY_T
15、IME/2);SCL=0;SCL=0;DELAY(DELAY_TIME);DELAY(DELAY_TIME);if(F0=1)if(F0=1)return FALSE;return FALSE;return TRUE;return TRUE;知识点三 I2C总线的应用/*向向I2CI2C总线写一个字节总线写一个字节 */void WriteI2CByte(char b)reentrantvoid WriteI2CByte(char b)reentrant char i;char i;for(i=8;i!=0;i-)for(i=8;i!=0;i-)if(b&0 x80)if(b&0 x80)SE
16、ND_1();SEND_1();elseelseSEND_0();SEND_0();b=1;b=1;/*for(i=0;i8;i+)/for(i=0;i8;i+)/原来写法原来写法 if(bi)&0 x80)if(bi)&0 x80)SEND_1();SEND_1();elseelseSEND_0();SEND_0();*/知识点三 I2C总线的应用/*从从I2CI2C总线读一个字节总线读一个字节*/char ReadI2CByte(void)reentrantchar ReadI2CByte(void)reentrant char b=0,i;char b=0,i;for(for(i i=0
17、;i8;i+)=0;i8;i+)SDA=1;/SDA=1;/*释放总线释放总线*/SCL=1;/SCL=1;/*接受数据接受数据*/DELAY(10);DELAY(10);F0=SDA;F0=SDA;DELAY(10);DELAY(10);SCL=0;SCL=0;if(F0=1)if(F0=1)b=b1;b=b1;b=b|0 x01;b=b|0 x01;elseelse b=b1;b=b1;return b;return b;知识点三 I2C总线的应用/*write one bytewrite one byte*功能:将功能:将chch写到地址写到地址addadd处处 *输入:地址输入:地址a
18、dd,add,待写字节数据待写字节数据chch *输出:无输出:无 */void void WriteByteWriteByte(ucharuchar add,ucharadd,uchar chch)I2C_Start();I2C_Start();/start /start WriteI2CByte(0 xa0);WriteI2CByte(0 xa0);while(!while(!Check_AcknowledgeCheck_Acknowledge();/control byte();/control byte WriteI2CByte(add);WriteI2CByte(add);while
19、(!while(!Check_AcknowledgeCheck_Acknowledge();/address();/address WriteI2CByte(WriteI2CByte(chch););while(!while(!Check_AcknowledgeCheck_Acknowledge();/data();/data I2C_Stop();I2C_Stop();/stop /stop 知识点三 I2C总线的应用/*Read one byteRead one byte*功能:从地址功能:从地址chch处读取一字节数据处读取一字节数据*输入:地址输入:地址addadd*输出:从地址输出:
20、从地址addadd处读得的一字节数据处读得的一字节数据*/char char ReadByteReadByte(ucharuchar add)add)char b;char b;I2C_Start();/start I2C_Start();/start WriteI2CByte(0 xa0);WriteI2CByte(0 xa0);while(!while(!Check_AcknowledgeCheck_Acknowledge();/control byte,();/control byte,WriteI2CByte(add);WriteI2CByte(add);while(!while(!C
21、heck_AcknowledgeCheck_Acknowledge();/address();/address I2C_Start();/start I2C_Start();/start WriteI2CByte(0 xa1);WriteI2CByte(0 xa1);while(!while(!Check_AcknowledgeCheck_Acknowledge();/data();/data b=ReadI2CByte();b=ReadI2CByte();/N0 Acknowledge/N0 Acknowledge I2C_Stop();/stop I2C_Stop();/stop retu
22、rn b;return b;知识点四 AT24C04与单片机的接口SCK6SDA5WP7A12A23U124C04AR14.7kR24.7kP1.0P1.1 将将AT24C04AT24C04的的SDASDA、SCLSCL直接连到单片机的任意两根直接连到单片机的任意两根I/OI/O口线口线上,通过模拟上,通过模拟I I2 2C C总线即可。如图,总线即可。如图,AT24C04AT24C04的的WPWP接地,既可以接地,既可以写又可以读。写又可以读。A1A1、A2A2接地,芯片地址就是接地,芯片地址就是0000。任务实施任务实施XTAL218XTAL119ALE30EA31PSEN29RST9P0
23、.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.0/T21P1.1/T2EX2P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C52PROGRAM=24c04.hexC130pFC230pFX16MHzBUTTON1R210kR310kC310uFSCK6SDA5WP7A12A23U224C04A23456781RP1RESPACK-7R14.7kR44.7k课后练习课后练习1.1.熟悉熟悉STCSTC单片机内部单片机内部EEPROMEEPROM的应用的应用2.2.熟悉铁电存储器的应用熟悉铁电存储器的应用