标题: 关于EEPROM的问题,若是擦除了程序的数据该如何避免擦除 [打印本页]

作者: 千年约定    时间: 2021-2-18 20:45
标题: 关于EEPROM的问题,若是擦除了程序的数据该如何避免擦除
对EEPROM写入数据时,先擦除了指定扇区然后数码管上就显示不全了
求助大佬

若是擦除了程序的数据该如何避免擦除

作者: suuy79    时间: 2021-2-19 00:15
估计你问的是STC的单片机EEROM的使用问题吧
这个主要取决于单片机的类型与型号,不同的单片机内部EEROM的起始地址是不同的
这个要看手册
只要EEROM的地址没有问题,就不会擦除程序,否则就有可能擦除程序
像你这种问题,如果确定程序没有问题,那就肯定是在操作EEROM的时候进入的代码区域,可以试着尽量将EEROM的地址往后移
作者: aking991    时间: 2021-2-19 08:32
没看到你的程序也没法知道你是怎么显示驱动的,如果你放在主函数里作显不,可能是因为你在擦除时的时间超过了数码管显示停留导致的,建议采用定时方式进行动态显示,这样就能保证了,不然显示改为了静态模块显示即不会影响
作者: 千年约定    时间: 2021-2-19 09:03
suuy79 发表于 2021-2-19 00:15
估计你问的是STC的单片机EEROM的使用问题吧
这个主要取决于单片机的类型与型号,不同的单片机内部EEROM的 ...

好的多谢大佬
作者: 千年约定    时间: 2021-2-19 10:22
aking991 发表于 2021-2-19 08:32
没看到你的程序也没法知道你是怎么显示驱动的,如果你放在主函数里作显不,可能是因为你在擦除时的时间超过 ...

emmm。。。
程序是按第一个例子写的读写内部EEPROM
我将写操作放在了这里
void keyscan()
{
        static unsigned int time=0;
        if(!k1||!k2||!k4||!k8)
        {
                time++;
                if(time>key_L)
                        time=key_I;

                if(time==key_S)
                {
                        if(!k1 && KeyValue==0)
                        {
                                if(shu>0)
                                {
                                        flag=1;               
                                        shu=shu;               
                                        sec=sec_s;  
                                        min=min_s;
                                      cc(0x2000);               
                                     xcx(0x2002,shu);

                                  ......
                                  .....
                                 .....
                                }
                        }
                        if(k2!=0xFF)
                           delay(30000);
                           if(k2!=0xFF)
                                KeyValue=++KeyValue%4;
                }
                if(time==key_S||time==key_L)
                {
                        if(!k4 && KeyValue>0)
                        {
                                switch(KeyValue)
                                {
                                        case 3: if(shu<99)shu++; break;
                                        case 1: if(min_s<99)min_s++; break;
                                        case 2: if(sec_s<59)sec_s++; break;
                                }
                        }
                        if(!k8 && KeyValue>0)
                        {
                                switch(KeyValue)
                                {
                                        case 3: if(shu>0)shu--; break;
                                        case 1: if(min_s>0)min_s--; break;
                                        case 2: if(sec_s>0)sec_s--; break;
                                }
                        }
                }
        }
        else time=0;
}


然后在主函数里面读数据,再进入while(1)循环
作者: as21cxz    时间: 2021-2-19 11:23
EEPROM的读写程序不建议自己写,建议直接调用官方提供的写好的程序,直接在程序里面调用,自己写问题多。
作者: 千年约定    时间: 2021-2-19 15:44
as21cxz 发表于 2021-2-19 11:23
EEPROM的读写程序不建议自己写,建议直接调用官方提供的写好的程序,直接在程序里面调用,自己写问题多。

大佬怎么调用呢??有例子吗?
作者: cn_zhx    时间: 2021-2-25 11:30
现实的数据是不是读取的EEPROM的数据?如果是,先暂存一下,擦除完在写回去。
作者: xunzhaod    时间: 2021-2-25 17:31
代码不要写什么拼音来代替,一定要用英文,或者缩写




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1