EEPROM多次断电之后数据丢失

施施洁 2017-08-23 05:09:17
我的项目是红外遥控RGB配色的,每次上电都会保留现在亮的颜色的数据,然后下次上电就读取,然后送到LED,就是断电记忆颜色,但是三四次之后颜色就不对了,最多是15次才会改变,有时1次都错了,
就是我第一次上电显示白色光,然后遥控器按下对应的颜色,假如是蓝色的话,此时显示蓝色,然后断电,再上电还是蓝色,但是,重复此操作3次以上就可能不再是蓝色了,在此期间没有按键改变颜色,是断电时写EEPROM出错,还是读时出错啊?
以下是部分代码:
uint ReadColour()
{
uchar ReadColour,i;

PWM_Ver_R=EEPROMRead(10);
PWM_Ver_G=EEPROMRead(11);
PWM_Ver_B=EEPROMRead(12);
PWM_Ver_W=EEPROMRead(13);
PWM_Ver_R_buff=EEPROMRead(20);
PWM_Ver_G_buff=EEPROMRead(21);
PWM_Ver_B_buff=EEPROMRead(22);
PWM_Ver_W_buff=EEPROMRead(23);
if(PWM_Ver_R == PWM_Ver_R_buff)
{}
else
PWM_Ver_R=PWM_Ver_R_buff;
if(PWM_Ver_G == PWM_Ver_G_buff)
{}
else
PWM_Ver_G=PWM_Ver_G_buff;
if(PWM_Ver_B == PWM_Ver_B_buff)
{}
else
PWM_Ver_B=PWM_Ver_B_buff;
if(PWM_Ver_W == PWM_Ver_W_buff)
{}
else
PWM_Ver_W=PWM_Ver_W_buff;
return PWM_Ver_R;
}
//**************LED缓存值函数************************************************//
void BufferLEDRGBValue()
{
uchar i;
buffer_PWM_Ver_R=PWM_Ver_R;
buffer_PWM_Ver_G=PWM_Ver_G;
buffer_PWM_Ver_B=PWM_Ver_B;
buffer_PWM_Ver_W=PWM_Ver_W;
//赋完值就保存颜色数据
for(i=0;i<5;i++)
{
EEPROMWrite(10,PWM_Ver_R);
EEPROMWrite(11,PWM_Ver_G);
EEPROMWrite(12,PWM_Ver_B);
EEPROMWrite(13,PWM_Ver_W);
if(i==1)
{
EEPROMWrite(20,PWM_Ver_R);
EEPROMWrite(21,PWM_Ver_G);
EEPROMWrite(22,PWM_Ver_B);
EEPROMWrite(23,PWM_Ver_W);
}
}
}
这是主函数
void main()
{
PowerInitial(); //MCU初始化始终设置IO口配置
Timer2Initial(); //设置定时器2,50us定时中断
EEPROMWrite(0,0xAA); //
EEPROMWrite(0,0xAA); //初始化EEPROM
WDTInitial();
FlagKeyONF=1;
Flag_PWM_out=1;
Flag_one_in=0;
Flag_first=1;
GIE=1;
while(1)
{
if(Flag_4ms)
{
Flag_4ms=0;
CLRWDT(); //清看门狗
First_16ms++;
if(First_16ms>200)
{
First_16ms=0;
Flag_First_16ms=1;
}
if(Flag_First_16ms)
{
if(Flag_first)
{
Flag_first=0;
FlagKeyONF=1;
Flag_PWM_out=1;
Flag_one_in=0;
ReadColour_buffer=ReadColour();

if(ReadColour_buffer==0xFF)
{
PWM_Ver_R=0;
PWM_Ver_G=0;
PWM_Ver_B=0;
PWM_Ver_W=255;
BufferLEDRGBValue();
}
}
else
{
//ScanKey();
InfraRedReceiverWork();
LEDMinus();
LEDPlus();
BufferLEDRGBValue();
PWM_time++;
if(PWM_time>3)
{
PWM_time=0;
//FadeLED();
}
}
}
}
}
}
...全文
1087 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
CrazyMelon 2020-04-10
  • 打赏
  • 举报
回复
重新上电时,读取eeprom实际数据,判断是否掉电时,存储时间不够
of123 2017-08-29
  • 打赏
  • 举报
回复
加入防掉电保护机制。 最简单的就是采用保护缓冲区和脏标志,但效率较低。 另外一种就是使用 FTL 层映射。逻辑地址和物理地址不一一对应,而是用使用映射表。每次写,都寻找“空闲”页;写完成后,更新映射表。这样的话,中途掉电时,旧数据仍然有效。
schlafenhamster 2017-08-26
  • 打赏
  • 举报
回复
断电时 要用 足够的 能量 写 E2 ,加大 卢波电容
tianxj001 2017-08-25
  • 打赏
  • 举报
回复
因为硬件看门狗激活后,是无法关闭的,但是我们可以把看门狗复位时间进行调整,也就是写EEPROM前,先喂狗,然后调整看门狗复位时间,尽可能调整到最大周期,然后才进入写EEPROM函数,这样狗就不会咬了。
施施洁 2017-08-25
  • 打赏
  • 举报
回复
引用 2 楼 tianxj001 的回复:
还有,看门狗激活后,写EEPROM,因为比较耗时,如果没有对应防止看门狗复位手段,可能会因为看门狗的问题,写函数被看门狗复位打断,造成数据写入错误。
这样啊,还不知道看门狗可能会影响呢,那要怎么做啊?我这个电路没法增加检测电压电路了
施施洁 2017-08-25
  • 打赏
  • 举报
回复
引用 4 楼 tianxj001 的回复:
因为硬件看门狗激活后,是无法关闭的,但是我们可以把看门狗复位时间进行调整,也就是写EEPROM前,先喂狗,然后调整看门狗复位时间,尽可能调整到最大周期,然后才进入写EEPROM函数,这样狗就不会咬了。
受教受教,以前真不知道有这种操作,
tianxj001 2017-08-23
  • 打赏
  • 举报
回复
还有,看门狗激活后,写EEPROM,因为比较耗时,如果没有对应防止看门狗复位手段,可能会因为看门狗的问题,写函数被看门狗复位打断,造成数据写入错误。
tianxj001 2017-08-23
  • 打赏
  • 举报
回复
for(i=0;i<5;i++) { EEPROMWrite(10,PWM_Ver_R); EEPROMWrite(11,PWM_Ver_G); EEPROMWrite(12,PWM_Ver_B); EEPROMWrite(13,PWM_Ver_W); if(i==1) { EEPROMWrite,看名字应该是EEPROM写函数吧 很奇怪你这里为什么需要反复写5次,而后面的20 21 22 23 又只需要写一遍? 还有,听你问题,似乎你断电前还有写EEPROM动作?这个就需要特别小心,失电速度和EEPROM写时间没匹配好有可能造成失电写EEPROM函数执行错误的,因为写EEPROM一般都比较费时。
21春学期(1709、1803、1809、1903、1909、2003、2009、2103)《计算机原理》在线作 业 CPU不断检测外设状态,当外设准备就绪后,才进行数据传送。这种数据传送方式称为( ) A:无条件传送方式 B:查询传送方式 C:中断传送方式 D:DMA传送方式 答案:B 30、下列不同进制的数中,最大的是() A:(0.101)2 B:(0.62)10 C:(0.52)8 D:(0.75)16 答案:C 6、在计算机系统中表征程序和机器运行状态的部件是() A:程序计数器 B:累加寄存器 C:中断寄存器 D:程序状态字寄存器 答案:D 30、同步控制方式是() A:只适用于CPU 控制的方式 B:只适用于外围设备控制的方式 C:由统一时序信号控制的方式 D:所有指令执行时间都相同的方式 答案:C 2、挂接在总线上的多个部件() A:只能分时向总线发送数据,并只能分时从总线上接收数据 B:只能分时向总线发送数据,但可同时从总线接收数据 C:可同时向总线发送数据,并同时从总线接收数据 D:可同时向总线发送数据,但只能分时从总线接收数据 答案:B 在系统总线的数据线上,不可能传输的是() A:指令 B:操作数 C:握手(应答)信号 D:中断类型号 答案:C 14、显示汉字采用点阵字库,若每个汉字用16×16 的点阵表示,7500 个汉字的字库容量是() A:7200×160KB/s B:7200KB/s C:9600KB/s D:19200KB/s 答案:B 使用DOS功能调用时,子程序编号应放在()寄存器中。 A:AL B:AH C:AX D:任意指定 答案:B 23、在三种集中式总线裁决中,()方式对电路故障最敏感 A:链式查询 B:计数器定时查询 C:独立请求 D:都一样 答案:A 若用存贮芯片(32K×1)构成8086的存贮器系统至少要用()。 A:8片 B:16片 C:32片 D:64片 答案:B 2、既具有SRAM 读写的灵活性和较快的访问速度,又在断电后可不丢失信息的ROM是() A:EEPROM B:FLASH C:EPROM D:PROM 答案:B 二进制数1001101B的十进制数表示为() A:4DH B:95D C:77D D:9AD 答案:C 7、采用可变操作码的重要原则是() A:操作码长度可变 B:使用频率高的指令采用短操作码 C:使用频率低的指令采用短操作码 D:满足整数边界原则 答案:B 8、下面对计算机总线的描述中,确切的概念是() A:地址信息、数据信息不能同时出现 B:地址信息和控制信息不能同时出现 C:数据信息和控制信息不能同时出现 D:两种信息源的代码不能在总线中同时出现 答案:D 1、以下四种类型的半导体存储器中,以传输同样多的字为比较条件,则读出数据传输率最 高的是() A:DRAM B:SRAM C:FLASH D:EEPROM 答案:B 12、使用74LS181 这种器件来构成一个16 位的ALU,需要使用()片。 A:2 B:4 C:8 D:16 答案:B 13、在单级中断系统中,CPU 一旦响应中断,则立即关闭()标志,以防止本次中断任务结束前同级的其他中断源产生另 一次中断进行干扰 A:中断允许 B:中断请求 C:中断屏蔽 D:都不对 答案:A 19、I/O 数据不经过CPU 内部寄存器的I/O 方式是() A:程序查询方式 B:中断方式 C:DMA 方式 D:上述都可以 答案:C 39、CPU 通过()启动通道 A:执行通道命令 B:执行I/O 指令 C:发出中断请求 D:都不对 答案:B 计算机在提高速度、增加功能、缩小体积、降低成本和扩大应用等方面不断发展。下面 是有关计算机近期发展趋势的看法:I、计算机的体积更小,甚至可以像纽扣一样大小 II、计算机的速度更快,每秒可以完成几十亿次基本运算 III、计算机的智能越来越高,它将不仅能听、能说,而且能取代人脑进行思考 IV、计算机的价格会越来越便宜 其中可能性不大的是() A:I 和II B:III C:I 和III D:IV 答案:B 下面是关于可编程中断控制器8259A的叙述,其中错误的是()。 A:8259A具有优先级管理的功能 B:8259A具有辨认中断源的功能 C:8259A具有向CPU提供中断向量的功能 D:一片8259A可管理8级中断 答案:B 堆栈指针SP的内容是() A:栈顶单元内容 B:栈顶单元地址 C:栈底单元内容 D:栈底单元地址 答案:B 在指令"MOV AX,0"执行后,CPU状态标志位IF的值() A:为0 B:为l C:不确定 D:不变 答案:D 21、假设某计算机的存储系统由Cache 和主存组成,某程序执行过程中访存1000 次,其中访问Cache 缺失50 次,则Ca
奥鹏南开作业21春学期(1709、1803、1809、1903、1909、2021、2021、2103)《计算机原理》在线作业 CPU不断检测外设状态,当外设准备就绪后,才进行数据传送。这种数据传送方式称为( ) 选项A:无条件传送方式 选项B:查询传送方式 选项C:中断传送方式 选项D:DMA传送方式 正确选项:B 30、下列不同进制的数中,最大的是( ) 选项A:(0.101)2 选项B:(0.62)10 选项C:(0.52)8 选项D:(0.75)16 正确选项:C 6、在计算机系统中表征程序和机器运行状态的部件是( ) 选项A:程序计数器 选项B:累加寄存器 选项C:中断寄存器 选项D:程序状态字寄存器 正确选项:D 南开21春学期《计算机原理》在线作业3全文共13页,当前为第1页。 南开21春学期《计算机原理》在线作业3全文共13页,当前为第1页。 30、同步控制方式是( ) 选项A:只适用于CPU 控制的方式 选项B:只适用于外围设备控制的方式 选项C:由统一时序信号控制的方式 选项D:所有指令执行时间都相同的方式 正确选项:C 2、挂接在总线上的多个部件( ) 选项A:只能分时向总线发送数据,并只能分时从总线上接收数据 选项B:只能分时向总线发送数据,但可同时从总线接收数据 选项C:可同时向总线发送数据,并同时从总线接收数据 选项D:可同时向总线发送数据,但只能分时从总线接收数据 正确选项:B 在系统总线的数据线上,不可能传输的是( ) 选项A:指令 选项B:操作数 选项C:握手(应答)信号 选项D:中断类型号 正确选项:C 14、显示汉字采用点阵字库,若每个汉字用16×16 的点阵表示,7500 个汉字的字库容量是( ) 选项A:72021160KB/s 南开21春学期《计算机原理》在线作业3全文共13页,当前为第2页。选项B:72021B/s 南开21春学期《计算机原理》在线作业3全文共13页,当前为第2页。 选项C:9600KB/s 选项D:192021B/s 正确选项:B 使用DOS功能调用时,子程序编号应放在( )寄存器中。 选项A:AL 选项B:AH 选项C:AX 选项D:任意指定 正确选项:B 23、在三种集中式总线裁决中,( )方式对电路故障最敏感 选项A:链式查询 选项B:计数器定时查询 选项C:独立请求 选项D:都一样 正确选项:A 若用存贮芯片(32K×1)构成8086的存贮器系统至少要用( )。 选项A:8片 选项B:16片 选项C:32片 选项D:64片 正确选项:B 南开21春学期《计算机原理》在线作业3全文共13页,当前为第3页。 南开21春学期《计算机原理》在线作业3全文共13页,当前为第3页。 2、既具有SRAM 读写的灵活性和较快的访问速度,又在断电后可不丢失信息的ROM是( ) 选项A:EEPROM 选项B:FLASH 选项C:EPROM 选项D:PROM 正确选项:B 二进制数1001101B的十进制数表示为( ) 选项A:4DH 选项B:95D 选项C:77D 选项D:9AD 正确选项:C 7、采用可变操作码的重要原则是( ) 选项A:操作码长度可变 选项B:使用频率高的指令采用短操作码 选项C:使用频率低的指令采用短操作码 选项D:满足整数边界原则 正确选项:B 8、下面对计算机总线的描述中,确切的概念是( ) 选项A:地址信息、数据信息不能同时出现 南开21春学期《计算机原理》在线作业3全文共13页,当前为第4页。选项B:地址信息和控制信息不能同时出现 南开21春学期《计算机原理》在线作业3全文共13页,当前为第4页。 选项C:数据信息和控制信息不能同时出现 选项D:两种信息源的代码不能在总线中同时出现 正确选项:D 1、以下四种类型的半导体存储器中,以传输同样多的字为比较条件,则读出数据传输率最高的是( ) 选项A:DRAM 选项B:SRAM 选项C:FLASH 选项D:EEPROM 正确选项:B 12、使用74LS181 这种器件来构成一个16 位的ALU,需要使用( )片。 选项A:2 选项B:4 选项C:8 选项D:16 正确选项:B 13、在单级中断系统中,CPU 一旦响应中断,则立即关闭( )标志,以防止本次中断任务结束前同级的其他中断源产生另一次中断进行干扰 选项A:中断允许 选项B:中断请求 选项C:中断屏蔽 选项D:都不对 南开21春学期《计算机原理》在线作业3全文共13页,当前为第5页。正确选项:A 南开21春学期《计算机原理》在线作业3全文共13页,当前为第5页。 19、I/O 数据不经过CPU 内部寄存器的I/O 方式是( ) 选项A:程序查询方式 选项B:中断方式 选项C:DMA 方式 选项D:上述都可以 正确选项:C 39、CPU 通过(

27,382

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧