打印

PIC的EEPROM的读写问题

[复制链接]
2937|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tianwen_4524|  楼主 | 2014-6-25 23:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我是想问个问题的:关于EEPROM的读写。
main()
{        uchar EEP1,OUT;
        EEP1=EEPRM_READ(0x00);
        if(EEP1>2)
                EEP1=0;
        OUT=EEP1;
        while(1)
        {        ...
                ...
                EEPRM_WRITE(0x01,OUT);
                ...

        }
       

}

void EEPRM_WRITE(uchar adr,uchar data)
{        do
        {
        ;
        }while(WRERR!=0);
        EEADR=adr;
        EEDATA=data;
        WREN=1;
        EECON2=0x55;
        EECON2=0xAA;
        WR=1;
        WREN=0;
}

uchar EEPRM_READ(uchar adr)
{        EEADR=adr;
        RD=1;
        return(EEDATA);
}
我这程序在我烧了进IC,未断电时很正常!
但在我进行断电,在接上电,也能显示在断电时的保存的数据,但当再执行到void write_in_eeprom(uchar write_add,uchar write_data)函数时,却一直在此循环,
       do
        {
        ;
        }while(WRERR!=0);
死在了这里,出不来!
我想问,是什么原因造成的????烦请兄弟帮帮忙???万分感谢!!


沙发
yewuyi| | 2014-6-26 08:39 | 只看该作者

//----------------------------------------------------------------------------------------------------------------------------------------------------------
void                 EEpromWrite(void)
{
if(WriteEeprom){
               if(WR){}
               else{
                   if(Fcase<WriteMenuByte){
                                          EEADRH=0x00;
                                          EEADRL=Fcase;                   //赋EEPROM写入地址
                                          EEDATL=Menu.MenuCaseByte[Fcase];//赋EEPROM写入数值
                                          CFGS=DataSpace;                 //指定访问闪存区或EEPROM区
                                          EEPGD=EepromSpace;              //指定访问EEPROM区
                                          WREN=AllowWrite;                //容许内部EEPROM写操作
                                          GIE=false;                      //发送写序列码前必须写禁止中断
                                          EECON2=0x55;                    //发送写序列码   
                                          EECON2=0xaa;
                                          WR=StartWrite;                  //启动写操作
                                          GIE=true;
                                          Fcase++;
                                          }
                  else{
                       WREN=DisAllowWrite;//禁止EEPROM/FLASH写操作
                       WriteEeprom=false;
                       }
                   }
               }
}
//----------------------------------------------------------------------------------------------------------------------------------------------------------
void                 EEpromRead(void)
{
uchar DataCount=0x00;
while(DataCount<ReadMenuByte){
                             Menu.MenuCaseByte[DataCount]=EEPROM_READ(DataCount);
                             DataCount++;
                             }
}
//----------------------------------------------------------------------------------------------------------------------------------------------------------

使用特权

评论回复
板凳
tianwen_4524|  楼主 | 2014-6-26 19:41 | 只看该作者
非常感谢版主,不过我的没那么复杂!我的单片机为PIC12F683!我是怀疑,在我第一次烧写进去后,在没断电,一切正常!断电了,再上电,也能显示上次断电前的值,只是在断电后再上电时,程序跑到void EEPRM_WRITE(uchar adr,uchar data)这个函数里后就出不来!但我将do
        {
        ;
        }while(WRERR!=0);
这个循环去掉,不执行这个循环就一切OK!也能正常对EEPROM进行读写!
但就是郁闷,正常来说,在开头都要
do
        {
        ;
        }while(WRERR!=0);

使用特权

评论回复
地板
tianwen_4524|  楼主 | 2014-6-26 19:43 | 只看该作者
  非常感谢版主,不过我的没那么复杂!我的单片机为PIC12F683!我是怀疑,在我第一次烧写进去后,在没断电,一切正常!断电了,再上电,也能显示上次断电前的值,只是在断电后再上电时,程序跑到void EEPRM_WRITE(uchar adr,uchar data)这个函数里后就出不来!但我将do
        {
        ;
        }while(WRERR!=0);
这个循环去掉,不执行这个循环就一切OK!也能正常对EEPROM进行读写!
但就是郁闷,正常来说,在开头都要
     do
        {
        ;
        }while(WRERR!=0);
这个循环检测上次的写操作是否已经完成!
但我的为什么在断电后怎么就一直检测在忙,也就是WRERR一直不为0,为什么????

使用特权

评论回复
5
tianwen_4524|  楼主 | 2014-6-27 21:08 | 只看该作者

使用特权

评论回复
6
NE5532| | 2014-6-29 11:38 | 只看该作者
tianwen_4524 发表于 2014-6-26 19:43
非常感谢版主,不过我的没那么复杂!我的单片机为PIC12F683!我是怀疑,在我第一次烧写进去后,在没断电 ...

上电以后,延时50-100mS以后再操作E2,读写都是,要电源稳定后才能操作。

使用特权

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

本版积分规则

41

主题

236

帖子

0

粉丝