|
啥都不说,直接上标准代码:(没有添加看门狗,为了调试,禁止了其他任何中断和其他程序模块)
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 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|