第一次使用AVR,正好测试它的EEPROM功能,看了各位大虾的帖子,
总感觉太复杂,代码量也比较大,尝试着写了以下读写程序,经过
测试暂时没发现问题,现写出来给大家共享,希望能提供给大家一
些参考,也希望使用过后大家也在后面跟帖回上自己的心得,以提
供给后来人,谢谢大家。
对于如何避免读的时候写EEPROM,编程中考虑好就行了,我的经验
是都在主程序中进行读写胜过任何纠错机制。
对于中断的影响,因为关中断的时间只有几微秒,几乎可以不考虑,
我测试的程序就是带中断的。
void eeprom_write (uchar num, uint addr, uchar *val)
{
while (num)
{
while ( EECR&0x02 ); //判断EEWE是否为0
EEAR = addr;
EEDR = *val;
CLI();
EECR = EECR|0x04; //置EEMWE为1
EECR = EECR|0x02; //置EEWE为1
SEI();
addr++;
val++;
num--;
}
}
void eeprom_read (uchar num, uint addr, uchar *val)
{
while (num)
{
while ( EECR&0x01 ); //判断EEWE是否为0
EEAR = addr;
EECR = EECR|0x01; //置EERE为1
*val = EEDR;
addr++;
val++;
num--;
}
}
简单而实用的EEPROM读写程序
最新评论共有 0 位网友发表了评论
查看所有评论
发表评论
热点关注

