您的位置 首页 方案

AVR EEPROM 读写试验

iccavr教程之ATMEGA8中有1024字节的SRAM、8096字节的FLASH和512字节的EEPROM,他们之间的区别是,FLASH是用来保存你的程序代码的,…

iccavr教程之

ATMEGA8 中有1024字节的SRAM 、8096字节的FLASH 和 512字节的EEPROM,他们之间的区别是,FLASH是用来保存你的程序代码的,在程序运转过程中,程序自身不能够修正其内容,掉电内容不会丢掉,只在烧写单片机时修正。SRAM 是保存程序运转过程中发生的暂时数据,例如你界说的变量都保存在这里。1K 巨细的空间,能够让你随意的界说变量,一般情况下不必忧虑不够用,只需你能记得住。与51单片机比较,这一点要好得多。在51里只要128 或256 字节的空间,而PIC系列更是少的不幸,往往要省着运用。SRAM具有掉电数据丢掉的特色,假如想要在开机时得到上一次掉电时的一些数据,这些数据就不能保存在SRAM中了,而需求保存在EEPROM里。在AVR系列单片机中都有EEPROM,仅仅巨细不同,使用AVR单片机规划电路能够省掉像24XX、93XX等外部EEPROM,能够简化电路,还提高了存储速度。

这个试验中咱们做一个时钟程序,显现分钟和秒。并将时刻保存在EEPROM中,在加电时读取时刻,这样就能够接着上一次运转了。对EEPROM的操作很简单,只需在头文件中包括 eeprom.h 文件即可。读取数据调用 EEPROMread(addr) 函数,用addr指明读取的地址,该地址的数据在返回值中;写入数据调用 EEPROMwrite(addr,x),行将x写入地址addr中。

首要界说全局变量
unsigned char display[4]; // 显现缓冲区
unsigned char dis; // 当时显现
unsigned char s,m; // 时刻

显现改写的程序同上一节,用timer0中止来完结。用timer1做一个1秒钟的守时,在守时中止中记数时刻并保存到EEPROM,程序如下:

if(++s == 60){ // 秒
s = 0;
if(++m == 60) m = 0; // 分钟
}
EEPROMwrite(1,s); // 保存时刻
EEPROMwrite(2,m);
display[0] = s % 10; // 改写显现缓冲
display[1] = s / 10;
display[2] = m % 10;
display[3] = m / 10;

在程序初始化中读取时刻,并填入显现缓冲内

s = EEPROMread(1); // 读取时刻
m = EEPROMread(2);
display[0] = s % 10; // 改写显现缓冲
display[1] = s / 10;
display[2] = m % 10;
display[3] = m / 10;

这样就达到了意图,在写入程序第一次运转时显现的或许有点乱,由于第一次EEPROM中的值是不确定的,不过,断电后再加电就能够看到,显现是继上一次的。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/272943.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部