打印

保存和重新写回怎么操作

[复制链接]
1717|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
llljh|  楼主 | 2011-6-14 21:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如何掉电时保存RAM数据到类EEPROM,上电后根据情况重新写入RAM
沙发
zwll| | 2011-6-14 21:03 | 只看该作者
楼主可以详细说说

使用特权

评论回复
板凳
llljh|  楼主 | 2011-6-14 21:22 | 只看该作者
设计一款外贸产品,本来是用166芯片掉电模式,但是由于该芯片功耗较大,只能支持15秒左右,外贸产品,对掉电时间有要求,需要7分钟以上,于是外置了电容电路,根据重新上电电容残留电量检测AD值判断掉电时间,当在掉电时间内,重新恢复到原先状态

当检测不到几个过零点后,判断出掉电,迅速把RAM数据保存在类EEPROM里

使用特权

评论回复
地板
llljh|  楼主 | 2011-6-14 21:35 | 只看该作者
以下是部分程序,就是不知道这个保存和重新写回怎么操作,望高手解答

/*---------------------------------------------------------------------------
;EraseFlash
;erase the whole sector of Flash ROM
;--------------------------------------------------------------------------*/
        EA = 0;                //step 1 ,关闭中断
        FLASHCON |=0x01;         //选择类EEPROM

        XPAGE          = 0x03;        //step 2 ,设置擦除的扇区3
        
        IB_CON1         = 0xE6;        //step 3,设置擦除操作
        IB_CON2         = 0x05;        //时序的要求,固定不变
        IB_CON3         = 0x0A;        //时序的要求,固定不变
        IB_CON4         = 0x09;        //时序的要求,固定不变
        IB_CON5         = 0x06;        //时序的要求,固定不变

        _nop_();                //step 4,进入擦除状态
        _nop_();
        _nop_();
        _nop_();
        //---------------------------------------

        XPAGE          = 0x00;        //step 7,清零页寄存器
        FLASHCON &=0xFE;        //退出类EEPROM
        EA = 1;                        //恢复中断
/*---------------------------------------------------------------------
;write EEPROM
;----------------------------------------------------------------------*/
        EA = 0;                        //step 1 ,关闭中断
        FLASHCON |=0x01;         //选择类EEPROM

        XPAGE          = 0x03;        //step 2 ,设置写的扇区3
        IB_OFFSET= 0x00;        //设置写的地址,范围00-255

        // IB_DATA         = 0x88;        //step 3,设置写的数据
        
          这里要写RAM到EEPROM 请问怎么写
         
                IB_CON1         = 0x6E;        //step 4,设置写操作
        IB_CON2         = 0x05;        //时序的要求,固定不变
        IB_CON3         = 0x0A;        //时序的要求,固定不变
        IB_CON4         = 0x09;        //时序的要求,固定不变
        IB_CON5         = 0x06;        //时序的要求,固定不变

        _nop_();                //step 5,进入写状态
        _nop_();
        _nop_();
        _nop_();        
        //---------------------------------------

        XPAGE          = 0x00;        //step 8,清零页寄存器
        FLASHCON &=0xFE;        //退出类EEPROM
        EA = 1;                        //恢复中断


/*---------------------------------------------------------------
;read EEPROM mode1 读类EEPROM方法
;-----------------------------------------------------------------*/
这里要恢复RAM,怎么写

使用特权

评论回复
5
juventus9554| | 2011-6-14 21:54 | 只看该作者
unsigned char i;
        XPAGE          = 0x03;        //step 2 ,设置写的扇区3
        IB_OFFSET= 0x00;        //设置写的地址,范围00-255
         //假设你的ram是一个数组,temp[6]
        for(i=0;i<6;i++)
    {
          IB_DATA = temp[ i ];//
        // IB_DATA         = 0x88;        //step 3,设置写的数据
      
         // 这里要写RAM到EEPROM 请问怎么写

                IB_CON1         = 0x6E;        //step 4,设置写操作
        IB_CON2         = 0x05;        //时序的要求,固定不变
        IB_CON3         = 0x0A;        //时序的要求,固定不变
        IB_CON4         = 0x09;        //时序的要求,固定不变
        IB_CON5         = 0x06;        //时序的要求,固定不变

        _nop_();                //step 5,进入写状态
        _nop_();
        _nop_();
        _nop_();      
        //---------------------------------------
       IB_OFFSET++;
       }
        XPAGE          = 0x00;        //step 8,清零页寄存器
        FLASHCON &=0xFE;        //退出类EEPROM
        EA = 1;                        //恢复中断

使用特权

评论回复
6
juventus9554| | 2011-6-14 22:10 | 只看该作者
//恢复ram 到temp[6]
FLASHCON = 1;
for(i=0;i<6;i++)
{
     temp[ i ] = XBYTE[768+i]; //  在eeprom的 page3;
}
FLASHCON = 0;

使用特权

评论回复
7
司徒老鹰| | 2011-6-14 22:21 | 只看该作者
你的程序里面有 擦除,写入指令,在极端情况下(强干扰或者手摸晶振)搞不好会程序跑飞掉,将code擦除,可以在程序内部增加一个判断寄存器,判断程序是否正常进入了烧写或者擦除子程序。

使用特权

评论回复
评分
参与人数 1威望 +6 收起 理由
bananarer + 6 我很赞同
8
chuxh| | 2011-6-14 22:41 | 只看该作者
是的,并且最好将LVR打开。

使用特权

评论回复
9
llljh|  楼主 | 2011-6-14 22:56 | 只看该作者
多谢,但是如果不是数组,是很多变量,把128byte的ram空间几乎用完了,怎么简单设置全部读取,保存呢

使用特权

评论回复
10
juventus9554| | 2011-6-14 23:08 | 只看该作者
只能一个一个写入了,没有什么办法了。可以使用XDATA

使用特权

评论回复
11
int3| | 2011-6-15 08:56 | 只看该作者
用AD判断估计没几个MCU可以达到你的要求。

使用特权

评论回复
12
bananarer| | 2011-6-15 09:23 | 只看该作者
我赞同7楼的讲法。

使用特权

评论回复
13
llljh|  楼主 | 2011-6-15 10:44 | 只看该作者
嗯,我也赞同

使用特权

评论回复
14
jioa| | 2011-6-15 11:13 | 只看该作者
司徒老鹰是高手呀

使用特权

评论回复
15
jioa| | 2011-6-15 11:13 | 只看该作者
讲的很细,

使用特权

评论回复
16
司徒老鹰| | 2011-6-15 17:02 | 只看该作者
司徒老鹰是高手呀
jioa 发表于 2011-6-15 11:13
:L

使用特权

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

本版积分规则

855

主题

11301

帖子

6

粉丝