|
程序很简单,一个主程序和一个串口接收中断程序,做了以下功能测试:
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, 杜汶泽)
|