难题,单片机高手请帮帮忙

2025-02-23 22:09:50
推荐回答(6个)
回答1:

相信你经过检查读写程序都没有问题的话。

那么从你所说的现象判断,是程序跑飞所致。

当单片机复位不良、或者抗干扰性能不好时,程序很容易跑飞(程序跳转到未知位置开始执行),尤其RISC的单片机这种现象特别明显,因为其指令长度固定,基本上程序存储器中任何一个单元就是一条指令,所以当程序计数器乱跳时,跳到任何一个位置都会找到一条可以执行的指令并开始从这里执行。

如果跑飞时刚好跳到写EEPROM指令程序前面一段,就会出现在未给待写入数据正确赋值的情况下写入EEPROM的情况,导致EEPROM被误写。

因为刚好跳到写EEPROM指令前面一段是小概率事件,所以一般被改写的只有开始几个字节。

解决办法:

1、完善上电复位电路,确保单片机在电源电压稳定的情况下才开始运行。在上电期间,如果电压不稳定,是导致单片机程序跑飞的最主要原因。

2、增强电路抗干扰性能。

3、在写EEPROM指令前加一条条件跳转指令,当某软件标志位1未设置时就跳转,并且在写EEPROM指令后立即清除软件标志位1。

当需要写EEPROM时,在正确赋值写入数据之后紧接着设置软件标志位1,然后立即调用写EEPROM子程序。

按以上优化的程序,将使误写现象降到最低概率,因为只有恰好跳转到设置软件标志位1指令时才会发生误写现象。

如果以上优化还让你不放心,你可以做成2级甚至更多级的防误写,在设置软件标志位1之前加一条条件跳转指令,只有当软件标志位2设置时才不跳转……

回答2:

可以查一下数据是怎么丢的,错成了什么数,分几种情况:

1、数据变成FF,软件可能有误擦除操作

2、数据错一两位,其他位正常,可能存在芯片质量问题

3、变成了完全不相关的另外一个数,应该是软件误操作,擦除和写全干了

另外,你也该说一下型号啊,EEPROM有好多种呢,并行、两线串行、三线串行、还有MCU内置的等

软件处理不良的可能性较大

回答3:

1:外界干扰,你工作的环境是不是处于公路旁边?有汽车马达干扰!或者附近有高频辐射源?比如电台电信基站?
做好电源滤波,而且要等电源开机稳定后几秒在去读写EEPROM

2:电源异常使EEPROM的数据彻底丢失;看看你的电源是否稳定?

3:复位电路是否正常?

4:scl,sda有没有上拉电阻?

回答4:

BOD开启,BODLEVEL=4V,或者写EEPROM是被打断.

回答5:

烧录器接触不好??.或者芯片坏了?或者烧录器坏了?再要么是你写的软件有问题?再么是你的电脑上的软件的问题?

回答6:

单片机上电时,初始化结束后,延时一段时间再对EEPROM进行操作.