打印
[AVR单片机]

Mega8学习笔记——eeprom的读写(转)

[复制链接]
14244|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
laslison|  楼主 | 2009-12-13 22:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 laslison 于 2010-1-4 21:42 编辑

下面我就以《 AVR 单片机入门与实践 》李弘 等编著  北京航空航天大学出版社这本书来讲述学习心得

前言:eeprom功能 在产品上应用广泛,但eeprom的写寿命官方说是1万次(其实一定比这个大的),一个好的写eeprom程序设计会(在满足功能的前提下)尽量避免写eeprom的,写eeprom操作容易,但要注意eeprom本身的写寿命。

第七章:eeprom的读写

P42P46,写的很详细,还用汇编和C的读写例程,

在写eeprom时要注意:
1、先置位EEMWE,在紧接着的4个时钟周期内置位EEWE
2、在写完毕后最好将使能位关掉,防止意外干扰误写eeprom
3、在写eeprom过程中最好关全局中断,写完后在恢复写之前的全局中断使能的状态

书上有例程,参照例程写个eeprom的程序,做个实验(比如每次开机 eeprom里的数(unsigned char)就自加一,并反映在PORTBIO口上)。

再看P251 P252CVAVR独有的数据类型 eeprom,用eeprom声明eeprom变量会使eeprom操作更便捷。

注意:eeprom变量声明后,就可直接写了,但每次写都是要消耗eeprom的写寿命的,所以它是个“有写寿命的变量(写超过1万次后mcueeprom区就有可能损坏)。”

以下是我编写的例程,来实现每次开机 eeprom里的数(unsigned char)就自加一,并反映在PORTBIO口上,由于eeprom的初始态是0xff,所以第一次开机后,PORTB=0X00(自加一后,溢出),每次开机都自加一,直到 加到0xff后,再开机 PORTB=0X00 如此循环。
-----------------用声明eeprom的方法来实现。

/*****************************************************
Chip type
: ATmega8L

Program type
: Application

Clock frequency
: 8.000000 MHz

Memory model
: Small

External SRAM size
: 0

Data Stack size
: 256

*****************************************************/

#i nclude <mega8.h>

// Declare your global variables here
eeprom unsigned char n;

void main(void)
{
PORTB=0xFF;
DDRB=0xFF;
n++;

while (1)

{


PORTB=~n;


}

}

注意:我采用的是双龙电子的SLISP软件对mega8烧程序的,在烧写程序的时候,若编程选项中的擦除前面的“对号”保留,则在烧写程序的时候会把eeprom都擦除(即都是0xff),若去掉擦除前面的“对号”,则在烧写程序的时候不会擦除eeprom(即都以前是什么值就是什么值)。

双龙电子的SLISP软件挺好,大家也要熟悉一下它的环境,特别是熔丝的配置等操作,网上也有使用说明,抽空看看。


编程设备我是自己做的ISP,很简单,大家也可以自制,资料网上都有,淘宝上也有卖的价格在(10元到30元之间不等-----足可满足初学者的需要了,(高级的ISP多少钱的都有,也有上千的))。建议自己做。

相关帖子

沙发
huamunv| | 2009-12-13 23:27 | 只看该作者
顶@

使用特权

评论回复
板凳
Karlshen| | 2009-12-14 21:13 | 只看该作者
见过

使用特权

评论回复
地板
lovelyegle| | 2009-12-16 22:30 | 只看该作者
好小啊

使用特权

评论回复
5
linhai2009| | 2009-12-17 00:29 | 只看该作者
不错,学习了

使用特权

评论回复
6
laslison|  楼主 | 2010-1-4 21:42 | 只看该作者
改大了:)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

95

主题

791

帖子

1

粉丝