求助关于ATMegal16 的EEPROM的写入问题
我想用自己写的函数在ATMega16的EEPROM写入数据,发现怎么都写不进去,开始读与写都不能成功,后来在读的时候我把地址加上0x4000后发现读取正常,
但是无论地址加不加0x4000,都不能写进去。 但是用AVR自带的 eeprom_write_byte( ,)函数一切都正常。
以下是我写EEPROM的code,在程序中没有写Flash的动作,我自能为严格按照spec写的了,研究了两天不得其门。而且我也用遍了网上大侠们提的方法,如中断法,但都不行。
void EEPROM_write(unsigned int uiAddress, unsigned char ucData)
{
while(EECR & (1<<EEWE));/* 等待上一次写操作结束 */
cli(); // 关闭中断
EEAR = uiAddress; /* 设置地址和数据寄存器*/
EEDR = ucData;
EECR |= (1<<EEMWE); /* 置位EEMWE */
EECR |= (1<<EEWE); /* 置位EEWE 以启动写操作*/
while(EECR & (1<<EEWE));/等待
sei(); //开全局中断
}
请马老师或各位大侠指点一下,最好有现成的code可以给我直接参考,如果有AVR 库里面eeprom_write_byte( ,)的程序那更好了。
谢谢!
Andy Guo
My Email: Andy.Guo@benq.com Codevision 的example中有eeprom读写的例子:
// EEPROM access example
// CodeVisionAVR C Compiler
// (C) 2000-2002 HP InfoTech S.R.L.
// www.hpinfotech.ro
// Chip: AT90S2313
// Memory Model: TINY
// Data Stack Size: 64 bytes
flash char f[]="This is a test";
#pragma warn-
eeprom char e;
#pragma warn+
char r;
void main (void)
{
char flash *ptr_to_flash;
char eeprom *ptr_to_eeprom;
char *ptr_to_ram;
// copy the string f from FLASH to
// the string e in EEPROM
ptr_to_flash=f;
ptr_to_eeprom=e;
while (*ptr_to_flash)
*ptr_to_eeprom++=*ptr_to_flash++;
// copy the string e from EEPROM to
// the string r in RAM
ptr_to_eeprom=e;
ptr_to_ram=r;
while (*ptr_to_eeprom)
*ptr_to_ram++=*ptr_to_eeprom++;
// stop here
while (1);
}
希望对你有所帮助,:) 我也出现了相同的问题哦, 我是用的atmega128A 16M,用datasheet提供的函数不可以写但可以读,用eeprom.h里面的函数既可以写又可以读,楼主知道什么问题不?
页:
[1]