[AVR单片机] 请求高手帮助看看,程序错在哪里?

[复制链接]
 楼主| hbxfluo 发表于 2016-6-30 15:28 | 显示全部楼层 |阅读模式

发表于 1 秒前 | 只看该作者 |倒序浏览 |阅读模式



void Write_EEP_Byte(unsigned int uiEEP_Add ,unsigned char ucEEP_Byte)
{
   while(EECR & (1<<EEWE))     //等待写完成
  EEAR=uiEEP_Add;             //地址送入
  EEDR=ucEEP_Byte;            //数据送入
  EECR |= (1<<EEMWE);         //主写使能
  EECR |= (1<<EEWE);          //写使能
}
/*********片内EEProm_Word写函数**************/
void Write_EEP_Word(unsigned int uiEEP_Add ,unsigned int uiEEP_Word)
{
unsigned char temp_byte;  
temp_byte=(uiEEP_Word>>8);                  //数据右移8位产生高字节
Write_EEP_Byte(uiEEP_Add ,temp_byte);       //先写入高字节  
delay_ms(10);
temp_byte=uiEEP_Word;                       // 产生低字节
Write_EEP_Byte((uiEEP_Add+1) ,temp_byte);   //再写入低字节
}

大家帮忙看看,程序错在什么地方了?程序是写MEGA16单片机内部处事的eeprom,字节能写入,但word数据写入不成功。错在在在何处?本人搞几天也不明白。特求助高手?
huangxz 发表于 2016-6-30 22:03 | 显示全部楼层
看样子是你写入低字节的时候,delay的不够
anycrying 发表于 2016-7-1 17:24 | 显示全部楼层
数据,地址送入后要延时一下再写使能。具体至少延时多长时间,请看它的读写时序图。
lnulibin 发表于 2016-7-2 08:16 | 显示全部楼层
本帖最后由 lnulibin 于 2016-7-2 08:19 编辑

void Write_EEP_Byte(unsigned int uiEEP_Add ,unsigned char ucEEP_Byte)
{
   while(EECR & (1<<EEWE))     //等待写完成,此条语句后面应该加一个分号。
  EEAR=uiEEP_Add;             //地址送入
  EEDR=ucEEP_Byte;            //数据送入
  EECR |= (1<<EEMWE);         //主写使能
  EECR |= (1<<EEWE);          //写使能
}为严谨起见,不要在等待时,频繁向地址寄存器中写入地址。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

20

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部