|
原贴地址: http://www.cntp.org.cn/book/story.php?id=768
袁易君
(宜春学院 理工学院,江西 宜春 336000)
摘 要:本文采用软件仿真平台Proteus介绍了AT24C1024 EEPROM的使用及其特点,以及在具有DS1302时钟芯片、DS18b20温度传感器的具体应用系统中的使用,本系统对每隔一段时间的温度进行了存储。
关键词:Proteus;EEPROM;DS18b20;温度传感器
电可擦除可编程EEPROM 在应用系统中既可由软件对其内容进行随机读写,又可在芯片断电的情况下长时间保存信息, 因此兼备了RAM 和ROM 的特点。EEPROM 有串行和并行两大类,并行EEPROM 存储容量较大,读写方法简单,但价格较高,适用于信息量较多的场合。串行EEPROM结构简单紧凑,价格低廉,但其读写方法复杂,存储单元较小,一般用于掉电情况下需要保存或一些数据需要在线修改的场合,这类数据不多却很重要,若使用常规的RAM芯片,就必须附带一套性能可靠的掉电保护系统,这不仅增加了线路设计的复杂性,同时也给设备的运行和维护带来了诸多不便。同时Proteus软件是一款单片机软硬件设计仿真平台,能实时仿真多种单片机芯片,如51单片机系列、AVR单片机系列、PIC单片机系列及Arm单片机系列等,可减少学习单片机的成本,又可达到良好的学习效果。
1 24C系列串行EEPROM介绍
24C系列串行EEPROM除具有一般串行EEPROM 的体积小、功耗低、工作电压允许范围宽等特点外,还具有型号多、容量大、二总线协议、占用I/ O 口线少、容量扩展配置极其灵活方便、读写操作相对简单等特点。本系统中使用的是24C1024(1024kb) ,生产工艺是CMOS 工艺,工作电压在1.8~5.5V 之间,24C系列有两种封装形式:8 脚封装和14 脚封装。我国目前开发用量最多的封装形式是8脚PDIP 封装,8 脚PDIP封装中A0 、A1 、A2 为器件地址选择位,这3 个引脚配置成不同的编码值,在同一串行总线上最多可扩展8 片同一容量或不同容量的24C 系列串行EEPROM 芯片。WP(TEST) 为硬件写保护控制端(测试端) ,这个引脚,各个公司生产的有所不同,有的公司将其定义为脉冲的上升沿将数据写入EEPROM,下降沿将数据从EEPROM 中读出。SDA 为串行数据输入输出端,漏极开路驱动,容量扩展时,可以将多片24C系列SDA 引脚直接相连,实际使用时要加一个上拉电阻,VCC和GND 分别是电源和地。
2 AT24C1024硬件电路的应用设计
系统应用电路如图1所示,时钟芯片接P1端口的P1.0、P1.1和P1.2引脚,提供实时时间;温度传感器接P1端口的P1.7,测量外界的温度;由于51单片机没有IIC接口,可以利用单片机的P3端口的P3.0和P3.1模拟IIC接口,与AT24C1024连接,每隔一定的时间存储测量的温度;液晶显示部分与P0、P2连接。
3 AT24C1024的驱动程序设计
AT24C1024的程序有读和写两类操作,写操作又分为单字节写入模式和页写入模式,单字节写入是一次写入一个字节的数据,页写入允许CPU 在无需考虑周期时间的情况下快速、连续地向EEP2ROM写入多个字节;在编写程序时由于单片机是模拟IIC接口,因此需要编写IIC的开始、停止函数:
void start() //开始函数
{
sda=1;
scl=1;
_nop_();_nop_();_nop_();_nop_();
sda=0;
_nop_();_nop_();_nop_();_nop_();
scl=0;
}
void stop() //停止函数
{
sda=0;
scl=1;
_nop_();_nop_();_nop_();_nop_();
sda=1;
_nop_();_nop_();_nop_();_nop_();
sda=0;
}
以及读写一个字节的函数:
void writex(uchar j) //写一个字节
{
uchar i,temp;
temp=j;
for (i=0;i<8;i++){
temp=temp<<1;
scl=0;
_nop_();_nop_();_nop_();_nop_();
sda=CY;
_nop_();_nop_();
scl=1;
_nop_();_nop_();
}
scl=0;
_nop_();_nop_();
sda=1;
_nop_();_nop_();
}
uchar readx() //读一个字节
{
uchar i,j,k=0;
scl=0;
_nop_();_nop_();_nop_();_nop_();
sda=1;
for (i=0;i<8;i++)
{
_nop_();_nop_();
scl=1;
_nop_();_nop_();_nop_();_nop_();
if (sda==1) j=1;
else j=0;
k=(k<<1)|j;
scl=0;
}
_nop_(); _nop_();
return(k);
}
还有写数据函数、读数据函数、应答函数和非应答函数等,如写数据函数:
void x24c02_write(uint address,uchar info)
{
uchar addressH,addressL;
start();
writex(0xa0);
clock();
addressH=(uchar)(address/256);
addressL=(uchar)(address%256);
writex(addressH); //地址高8位
clock(); //应答信号
writex(addressL); //地址高8位
clock();
writex(info);
clock();
stop();
delay1(400);
}
4 AT24C1024的调试与仿真
Proteus 仿真时,单片机需要加载程序,加载程序为.HEX 文件。本设计利用Keil μVision2, 在新建Keil 项目时选择AT89C51 单片机作为CPU, 将C 语言源程序导入, 在“OptionsFor Target”对话窗口中, 选中“Output”选项中的“Create HEX File”,编译链接后就可以生成.HEX 文件。在Proteus ISIS 中,选中AT89C51 并单击鼠标左键,对AT89C52 进行设置,设置单片机时钟频率为12MHz,按照正确的文件路径加载.HEX 文件。对单片机设置完毕后就可以开始仿真,本系统仿真以后可得到如图2所示结果,可以看到AT24C1024中已经把所测量的温度存了进去(图中黄色的部分),图中是每隔10秒中存取一次温度,掉电温度数据不丢失;本系统也可以存储DS1302芯片得到的实时时间,得到时间和温度的存储值,掉电不丢失数据。
5 结束语
用Proteus软件如何进行辅助可辅助单片机课程的教学,从中可以看出能改变过去单片机课程教学实际应用的实例不好讲解的困难,可有效的提高教学的效率和学生学习的积极性,更有利的培养学生的创新能力和动手能力以及学生更快的单片机这一门技术。
参考文献
[1] 吴金戌 沈庆阳 郭庭吉.8051单片机实践与应用.北京:清华大学出版社,2002:1-161.
[2] 周润景, 张丽娜. 基于PROTEUS 的电路及单片机系统设计与仿真[ M ]. 北京: 北京航空航天大学出版社, 2006.
[3] 黄夙绚. Proteus 与Ultra Edit、Keil 的联合使用[J]. 无线电, 2005(7):36- 37.
作者简介:袁易君(1976-),男,湖南衡阳人,讲师,硕士,主要从事单片机技术和嵌入式系统的研究。 |
|