geniusly111 发表于 2012-10-7 20:14:45

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

geniusly111 发表于 2012-10-7 21:07:17

644用的很少吧?估计都是用64或者128的

geniusly111 发表于 2012-10-8 09:47:23

顶起,大虾帮忙啊

geniusly111 发表于 2012-10-9 09:37:38

现在可以读写EEPROM了,但是还是有问题,连续读写(哪怕中间有延时)N个数据,第1和第2个数据总是错误的,而且没有规律,而且肯定不是0xff这样的错误数据。但是之后的读写100%没错。为啥会这样啊?
页: [1]
查看完整版本: atmega644芯片的EEPROM单字节读写一直不行