打印

程序写完EEPROM就死了

[复制链接]
2830|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cjh39|  楼主 | 2010-11-11 11:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序写完EEPROM就死了,一直等到狗狗复位。复位后能正常读出写进去的数。
不写EEPROM时候程序运行正常。
我用的是PICC自带的写函数EEPROM_WRITE()。
有没有人遇到过这种情况??请教高手是怎么回事??谢过先!!
沙发
yewuyi| | 2010-11-12 10:07 | 只看该作者
PICC自带的EEPROM_WRITE()函数是独占MCU的方式写完EEPROM,LZ自己看看这个库函数代码后,你就知道为什么会造成RST了!?

使用特权

评论回复
板凳
Light_David| | 2010-11-13 03:02 | 只看该作者
EEPROM_WRITE()一次写入并不会独占CPU,连续写入才会(等待写完成),估计LZ使用连续写入了,而且WDT溢出时间太短

使用特权

评论回复
地板
yewuyi| | 2010-11-13 12:23 | 只看该作者
#define        EEPROM_WRITE(addr, value) \
do{ \
        while(WR)continue;EEADR=(addr);EEDATA=(value); \
        EECON1&=0x7F;CARRY=0;if(GIE)CARRY=1;GIE=0; \
        WREN=1;EECON2=0x55;EECON2=0xAA;WR=1;WREN=0; \
        if(CARRY)GIE=1; \
}while(0)

使用特权

评论回复
5
Light_David| | 2010-11-13 13:07 | 只看该作者
嘿嘿,“while(WR)continue;“如果间断20mS以上再写入,可以忽略

使用特权

评论回复
6
yewuyi| | 2010-11-13 13:11 | 只看该作者
PIC MCU中写内部EEPROM的示例
yewuyi 发表于 2008-3-29 10:04:00

推荐AVR等的操作其实和这类似。

void                 WriteEE(void)
{
uchar    *p=&softwareVersion;
if(writeEE==false){WREN=0;}               //禁止内部EEPROM写操作
else{
    if(WR==ture){}
    else{
        if(fcase<=14){
                     EEADRL=fcase;        //赋EEPROM写入地址
                     EEDATL=*(p+fcase);   //赋EEPROM写入数值
                     EEPGD=0;             //指定访问内部EEPROM数据区
                     WREN=1;              //容许内部EEPROM写操作
                     GIE=false;           //发送写序列码前必须写禁止中断
                     EECON2=0x55;         
                     EECON2=0xaa;
                     WR=1;
                     GIE=ture;
                     fcase++;
                     }
        else{
            writeEE=false;
            }
        }
    }
}

使用特权

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

本版积分规则

0

主题

12

帖子

1

粉丝