⑴ 请教各位大侠,关于单片机长时间运行死机的问题
长时间运行死机的原因相对也算多:
①有振荡器(特别是陶瓷振荡器)振荡不良,长时间运行后,振荡器停振导致单片机死机。
②有单片机(特别是国产某晶)性能不佳,平均每1~1月就有一次死机。
③有设计(硬件抗扰)不佳,使用环境出现恶劣条件(各种干扰:静电、电磁、脉冲……),导致单片机死机。
…………
对于①,重新上电,99%以上能恢复正常,1%振荡器就坏了。
对于②,重新上电,100%能恢复正常。
对于③,重新上电,50%~70%能恢复正常,剩下的,很可能被静电击穿MCU,导致永久性损坏。
解决方法:
对于①,采用晶体振荡器(就是晶振,金属外壳那种,记得匹配好旁路电容)。
对于②,更换工业性能稳定的单片机品牌。
对于③,硬件设计考虑多点环境干扰,这对硬件工程师要求比较高,不是毕业生或工作经验一年两年的人能做的。必须有相关行业经验的工程师,不然就是工作10年8年也没这能力。(更换工业性能良好的单片机,可以将“重新上电恢复正常”提高到80%~90%,但不能解决死机。)
⑵ 为什么单片机定时越短,中断次数增多啦,反而出现死机
你的感觉是中断次数多,就不容易死机吗,是这样的,如果是正常的运行程序,此时的单片机的资源用的是最少的,也就是cpu的负担是最轻的,可是一旦有的中断,你就开了中断,每一个机器周期都要去查这些中断标志,标志有效,那么就要对当前的地址进行存储,还要对看是否有同级中断,是否满足中断的条件,满足,转向中断服务,完了,还要自动清除这些标志,这些都是你看不见的,大量的工作都是硬件在自动完成,这也就是cpu负担更重,如果你中断太频,内部硬件的电路出现问题的机率就会增大,当然死的快了。
⑶ 为什么单片机有时候会在开启电机时死机
电机启动时一会产生较大的电磁干扰信号,第二启动是瞬时电流较大,可能会在电网上产生较大浪涌,这些都会影响到附近的单片机,如果单片机电路抗干扰设计不够好的话就会造成死机。
⑷ 单片机死机的原因求助高手
单片机死机的原因,通常是因为周围环境干扰比较严重,如工厂车间各种机器,电焊机等工作时,就是产生很强的干扰脉冲,加上单片机的防干扰措施不到位,就是会被干扰破坏了正常的动行,造成飞程序,进入死机状态。
如果是在这种环境下的单片机,就是做好防干扰措施。
⑸ 单片机出现死机现象
我个人觉得也可能是电源影响到的,难道你的电路没有设置自动复位功能么?如果具有自动复位功能,那么,如果是电压影响的话,也会重新工作的啊,那么,你的死机就是程序的问题了,可能这个工地的使用了某种特殊的功能或者设置导致的,建议你查查您的程序,如果没有自动复位功能,哪就加个电容与电阻上去吧.我估计还是你的软件有BUG。仔细查查吧。
⑹ 51单片机死机重启的原因有哪些
rest的原因很多:
1. 如果堆栈溢出的话,你初始化时是不是加指令MOV SP,#60H初始化堆栈了吗?因为上电复位以后8051类单片机的SP值是07H,这个值并不是很好,所以容易导致堆栈溢出。
2. 你看门狗是否启用,如果看门狗启用的话,你是不是适时喂狗了?也有可能看门狗定时器溢出,导致芯片复位。
3. 你的电源是否稳定,(可能导致芯片上电复位)如果用开关电源的话,建议在输入端并接100uf以上的大电容滤去低频谐波,并接一个0.1uf(104)的瓷片电容滤去高频谐波分量。如果是市电降压过来的话,要看是什么东西降压的。如果是变压器降压的,看看变压器是否隔离。(最好用隔离的变压器)。同时看看稳压管是否良好。如果是电容降压的话,建议输入端增加П型网络滤波,并改用好的稳压管,最好用光耦隔离市电干扰。
4. 你的复位电路是否正确,一般51电路用微分电路复位的。也有可能你的PCB布线不良,导致分布电容过大。你可以试试改小复位电路上的电容。把10uf的电容改成1uf的钽电容试试。
5. 你的晶振(高频干扰部分)PCB布线是应该尽量离单片机近点。布线应该越短越好。
⑺ 单片机低电压导致的死机
单片机一般是 COMS 结构,电源电压范围已经很宽,如果电压过低,内部程序以及外部的控制电路工作极不稳定,会造成控制错误,还不如停止单片机的工作,这就是低电压复位。 低电压复位就是检测电源电压的结果,就是“不让单片机工作”。 我估计你说的“不让单片机工作”,是指程序继续工作,只是把控制停下,是低电压下,程序工作是不可靠的。具体情况就要看你的设备而定了。现在写程序一般都有看门狗这样的检测程序,如果死机的话,会重启。当然,也不排除看门狗有问题,当然,更多的是程序本身有问题而导致的! 外部可能引起死机可能就是电压不稳、静电过大等原因。单片机程序死机,跑飞了可以从以下几个方面查找原因:
1. 意外中断。是否打开了某个中断,但是没有响应和清除中端标志,导致程序一直进入中断,造成死机假象;
2. 中断变量处理不妥。若定义某些会在中断中修改的全局变量,这时要注意两个问题:首先为了防止编译器优化中断变量,要在这些变量定义时前加volatile,其次在主循环中读取中断变量前应该首先关闭全局中断,防止读到一半被中断给修改了,读完之后再打开全局中断;否则出现造成数据乱套。
⑻ 单片机系统死机但是reset可以触发
这种情况是正常的,因为单片机都有这个按钮,这就是预防单片机出现问题的时候,重新启动
⑼ 单片机死机的原因有哪些
硬件方面,比如某一口一个状态出现软件才能往下执行,可惜该口坏掉了,出不了这个状态,软件到此就停止不动了;比如地址线乱了,软件当然没法执行了,肯定死翘翘;比如晶振不起振,软件当然没法执行;比如地址锁存器坏掉了,地址与数据混到一块分不清当然也要死机;比如复位电路不好,总是复位,或复位不了,当然也没法正常执行.......等等,软件正常运行的条件,就是硬件电路正常,没有这个基础,怎么谈软件故障。
软件方面:比如死循环,如没有中断的情况下,sjmp $,执行到此肯定死胡同了;比如转移到一个非程序区,肯定死机,常见的干扰就是多出现该情况;比如进入中断服务程序,没有关中断而再次处罚中断,也能死机的;在用MOVC实现分支转移时,处理不当也可以死机;数据溢出也能死机........等等很多了。
⑽ 单片机死机从新上电好了
死机的可能性较多:
软件BUG
电源纹波问题
外部串扰等
解决方法:
1 全面清查软件代码
另外应该做软件看门狗,在死锁时自动重启。Reset电路也要做好
2 需要测试电源是否额定值(不要用芯片最低电压值,若无节电要求,应选择相对较高值),且纹波在接受范围?去藕、滤波电路需要做好
3 接口保护电路做好。