找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2297|回复: 8
打印 上一主题 下一主题
收起左侧

关于EEPROM的问题,若是擦除了程序的数据该如何避免擦除

[复制链接]
跳转到指定楼层
楼主
ID:884325 发表于 2021-2-18 20:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
对EEPROM写入数据时,先擦除了指定扇区然后数码管上就显示不全了
求助大佬

若是擦除了程序的数据该如何避免擦除
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:236982 发表于 2021-2-19 00:15 | 只看该作者
估计你问的是STC的单片机EEROM的使用问题吧
这个主要取决于单片机的类型与型号,不同的单片机内部EEROM的起始地址是不同的
这个要看手册
只要EEROM的地址没有问题,就不会擦除程序,否则就有可能擦除程序
像你这种问题,如果确定程序没有问题,那就肯定是在操作EEROM的时候进入的代码区域,可以试着尽量将EEROM的地址往后移

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:65956 发表于 2021-2-19 08:32 | 只看该作者
没看到你的程序也没法知道你是怎么显示驱动的,如果你放在主函数里作显不,可能是因为你在擦除时的时间超过了数码管显示停留导致的,建议采用定时方式进行动态显示,这样就能保证了,不然显示改为了静态模块显示即不会影响

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:884325 发表于 2021-2-19 09:03 | 只看该作者
suuy79 发表于 2021-2-19 00:15
估计你问的是STC的单片机EEROM的使用问题吧
这个主要取决于单片机的类型与型号,不同的单片机内部EEROM的 ...

好的多谢大佬
回复

使用道具 举报

5#
ID:884325 发表于 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)循环

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

6#
ID:708541 发表于 2021-2-19 11:23 | 只看该作者
EEPROM的读写程序不建议自己写,建议直接调用官方提供的写好的程序,直接在程序里面调用,自己写问题多。
回复

使用道具 举报

7#
ID:884325 发表于 2021-2-19 15:44 | 只看该作者
as21cxz 发表于 2021-2-19 11:23
EEPROM的读写程序不建议自己写,建议直接调用官方提供的写好的程序,直接在程序里面调用,自己写问题多。

大佬怎么调用呢??有例子吗?
回复

使用道具 举报

8#
ID:883031 发表于 2021-2-25 11:30 | 只看该作者
现实的数据是不是读取的EEPROM的数据?如果是,先暂存一下,擦除完在写回去。
回复

使用道具 举报

9#
ID:839835 发表于 2021-2-25 17:31 | 只看该作者
代码不要写什么拼音来代替,一定要用英文,或者缩写
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表