打印
[AVR单片机]

atmega16的EEPROM能读不能写

[复制链接]
2562|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xxs|  楼主 | 2008-11-12 15:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我采用的是GCC软件,用自己写的子程序能读不能写,而用内部自带的读写函数就可以读写,下面为读写子程序,请高人指点。

/*EEPROM读取函数*//*addr:地址;number:长度;p_buff:读出数据存放指针*/
void eprom_read(unsigned int addr, unsigned char number, unsigned char *EEP_BUF)
  { 
      while(EECR&(1<<EEWE)); 
      EEARH =0x00; 
   while(number --)
    { 
      EEARL=addr++; 
      EECR=(1<<EERE); 
      *EEP_BUF++ = EEDR; 
    }
  }

/*EEPROM写入函数*//*addr:地址;number:长度;p_buff:写入数据存放指针*/
void eprom_write(unsigned int addr, unsigned char number, unsigned char *EEP_BUF) 
  { 
     while(number--)
   { 
       while(EECR&(1<<EEWE)); 
          EEAR=addr++; 
          EEDR=*EEP_BUF ++;  
          EECR=0x04;                        //EECR|=(1<<EEMWE); EECR|=(1<<EEWE); 此方式也不可以写
          EECR=0x06;   
   }
}

下面为部分程序:
      EEP_BUFF.burner1_segment1=9;
      EEP_BUFF.burner1_segment2=8;
      EEP_BUFF.burner1_segment3=7;
      eprom_write(0x0104,3,&EEP_BUFF);
      asm("nop"); 
     asm("nop");
     eprom_read(0x0104,3,&EEP_BUFF);


相关帖子

沙发
xxs|  楼主 | 2008-11-13 14:54 | 只看该作者

atmega16的EEPROM能读不能写

怎么没有人回答这个问题啊?强烈需要支持。

使用特权

评论回复
板凳
kanprin| | 2008-11-14 11:07 | 只看该作者

用你注释掉的方式

在写之前把中断关闭,写完后再开中断试试。

使用特权

评论回复
地板
taoest| | 2008-11-15 23:31 | 只看该作者

GCC

gcc有自带eeprom的读写函数。直接用。不要自己写。

使用特权

评论回复
5
xxs|  楼主 | 2008-11-19 11:51 | 只看该作者

GCC

在写的时候我把中断都关闭拉,还是写不进去啊。
我知道GCC自带的读写函数可以用,但是我只是想知道上面这种方式可不可行,?哪位用过可行的啊,请赐教,谢谢。

使用特权

评论回复
6
subsidy| | 2008-11-22 17:21 | 只看该作者

可以写

使用特权

评论回复
7
宇宙飞船| | 2008-11-26 11:00 | 只看该作者

帮改一下作业

//EEAR=addr++; 
EEARH =0x00;
EEARL=addr++; 

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

xxs

5

主题

13

帖子

0

粉丝