搜索
bottom↓
回复: 13

mega8死机或跑飞,是什么原因引起的

[复制链接]

出0入10汤圆

发表于 2014-2-27 20:37:13 | 显示全部楼层 |阅读模式
程序很简单,一个主程序和一个串口接收中断程序,做了以下功能测试:

1.在主程序里,对指示灯A不断取反:
  while (1)
  {
          if(x++ > 30000)
        {
            x = 0;
            tt_led = ~tt_led;        //取反
        }
    };

2.在串口接收中断里,对指示灯B不断取反:
interrupt [USART_RXC] void usart_rx_isr(void)
{
    unsigned char status,data;

    status = UCSRA;  
    data = UDR;      
    Uart_led = ~Uart_led;        //取反
}

上电后能一直正常工作,两个指示灯都不断闪。然后我接了个中间继电器,手动不断通断,导致mega8死机(或跑飞)。现象是:
1.偶尔现象是两只灯都不变化了,相当于主程序和串口中断都不执行了;
2.出现最多的时候是串口的指示灯B正常闪,而指示灯A却不变化了,相当于串口中断是一直会执行,而主程序不执行了。

这里先不讨论我的电路抗干扰性能,我想知道的是单片机这时是怎么工作的。第一种现象可以理解为死机。而第二种现象就奇怪了,能执行中断程序而不执行主程序,这是什么情况????中断程序执行完之后不是会自动返回断电么?除了硬件上改进,程序上有没有什么方法可以减少类似情况?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2014-2-27 21:24:21 | 显示全部楼层
楼主用的是内部时钟还是外部晶振呢 熔丝位设置了吗  

出0入10汤圆

 楼主| 发表于 2014-2-27 21:43:50 | 显示全部楼层
北回归线 发表于 2014-2-27 21:24
楼主用的是内部时钟还是外部晶振呢 熔丝位设置了吗

外部晶振,7.3728M,熔丝位也设置了,没什么干扰的话工作正常,主程序都跑飞了中断还会工作正常,奇了怪了。主程序跑飞一般是什么情况会引起的

出0入0汤圆

发表于 2014-2-28 07:25:57 来自手机 | 显示全部楼层
中断正常好理解吧。这也是为什么不能定时器中断喂狗的原因。

出0入0汤圆

发表于 2014-3-1 15:32:11 | 显示全部楼层
有没有熔丝位使能掉电检测

出0入10汤圆

 楼主| 发表于 2014-3-1 19:10:44 | 显示全部楼层
waothom 发表于 2014-3-1 15:32
有没有熔丝位使能掉电检测

有,电压应该正常,我量过是5V

出70入0汤圆

发表于 2014-3-1 20:01:12 | 显示全部楼层
主程序的地址因干扰被簒改了,不知跑到哪个地方去,中断函数是硬件触发执行的,只要没完全死就应该能触发。

出0入0汤圆

发表于 2014-3-1 22:35:44 来自手机 | 显示全部楼层
串口io口配置问题

出0入10汤圆

 楼主| 发表于 2014-3-1 22:59:14 | 显示全部楼层
gshuang1 发表于 2014-3-1 20:01
主程序的地址因干扰被簒改了,不知跑到哪个地方去,中断函数是硬件触发执行的,只要没完全死就应该能触发。 ...

对,我想就是这个原因,干扰居然能影响到芯片内部阿,程序上有没有办法改进呢

出0入10汤圆

 楼主| 发表于 2014-3-1 23:02:34 | 显示全部楼层
efen 发表于 2014-3-1 22:35
串口io口配置问题

应该和这个没关系,配置应该对的,不进行干扰测试工作都正常

出70入0汤圆

发表于 2014-3-2 08:13:24 | 显示全部楼层
ylei12 发表于 2014-3-1 22:59
对,我想就是这个原因,干扰居然能影响到芯片内部阿,程序上有没有办法改进呢 ...

没有,只能在硬件上改进,如果允许系统中途重启的,可以加上软件看门狗,但只能针对偶尔出现死机现象的,频繁死机的就要改进硬件了。

出0入10汤圆

 楼主| 发表于 2014-3-2 12:07:52 | 显示全部楼层
gshuang1 发表于 2014-3-2 08:13
没有,只能在硬件上改进,如果允许系统中途重启的,可以加上软件看门狗,但只能针对偶尔出现死机现象的, ...

嗯 ,谢谢

出0入0汤圆

发表于 2014-3-4 14:51:12 | 显示全部楼层
中间继电器,手动不断通断,是不是给MCU通断电,如果是那就是你的熔丝位没配好,我之前也遇到过,如果不是可能是晶振部分电路受干扰

出0入10汤圆

 楼主| 发表于 2014-3-4 19:44:32 | 显示全部楼层
waothom 发表于 2014-3-4 14:51
中间继电器,手动不断通断,是不是给MCU通断电,如果是那就是你的熔丝位没配好,我之前也遇到过,如果不是 ...

muc没有通断电,只是给继电器不断通断电
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 00:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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