本帖最后由 laslison 于 2010-1-4 21:42 编辑
下面我就以《 AVR 单片机入门与实践 》李弘 等编著 北京航空航天大学出版社这本书来讲述学习心得
前言:eeprom功能 在产品上应用广泛,但eeprom的写寿命官方说是1万次(其实一定比这个大的),一个好的写eeprom程序设计会(在满足功能的前提下)尽量避免写eeprom的,写eeprom操作容易,但要注意eeprom本身的写寿命。
第七章:eeprom的读写
看P42到P46,写的很详细,还用汇编和C的读写例程,
在写eeprom时要注意:
1、先置位EEMWE,在紧接着的4个时钟周期内置位EEWE
2、在写完毕后最好将使能位关掉,防止意外干扰误写eeprom
3、在写eeprom过程中最好关全局中断,写完后在恢复写之前的全局中断使能的状态
书上有例程,参照例程写个eeprom的程序,做个实验(比如每次开机 eeprom里的数(unsigned char)就自加一,并反映在PORTB的IO口上)。
再看P251 、P252,CVAVR独有的数据类型 eeprom,用eeprom声明eeprom变量会使eeprom操作更便捷。
注意:eeprom变量声明后,就可直接写了,但每次写都是要消耗eeprom的写寿命的,所以它是个“有写寿命的变量(写超过1万次后mcu的eeprom区就有可能损坏)。”
以下是我编写的例程,来实现每次开机 eeprom里的数(unsigned char)就自加一,并反映在PORTB的IO口上,由于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多少钱的都有,也有上千的))。建议自己做。 |