atmega644芯片的EEPROM单字节读写一直不行
啥都不说,直接上标准代码:(没有添加看门狗,为了调试,禁止了其他任何中断和其他程序模块)void E_WriteByte(uint addr, uchar data) // 从E2指定地址写入一个字节数据
{
cli(); // 禁止全局中断
while (EECR & (1 << EEPE)); // 等待上次E2操作完成
EEAR = addr;
EEDR = data;
EECR |= (1 << EEMPE);
EECR |= (1 << EEPE);
sei(); // 开启全局中断
}
uchar E_ReadByte(uint addr) // 从E2指定地址读取一个字节数据
{
cli(); // 禁止全局中断
while (EECR & (1 << EEPE)); // 等待上次E2操作完成
EEAR = addr;
EECR |= (1 << EERE);
sei(); // 开启全局中断
return EEDR;
}
我使用的是ATMEGA644,注意是644,不是64。
以上代码有嘛问题啊?害得我始终无法读写成功。测试中,写某地址数据,然后马上把这个地址的数据读出来。始终读出来的都是0xff。
有谁知道为什么啊?
如果我不用单字节的读写E2函数,直接用AVR(我用AVR STUDIO 5.1)内置的EEPROM块读写函数,就没有问题。为啥单字节读写却始终失败啊?写啥都不行,读出都是0xff 644用的很少吧?估计都是用64或者128的 顶起,大虾帮忙啊 现在可以读写EEPROM了,但是还是有问题,连续读写(哪怕中间有延时)N个数据,第1和第2个数据总是错误的,而且没有规律,而且肯定不是0xff这样的错误数据。但是之后的读写100%没错。为啥会这样啊?
页:
[1]