51单片机采用外部中断tiao执行完中断程序几十秒才返回主程序

2024-12-16 08:28:54
推荐回答(2个)
回答1:

从现象看,程序应该跑“飞”了,能回到主程序,可能是“复位”的结果,因为是中断造成的,所以,可能堆栈出了问题,看看寄存器的使用或堆栈操作是否有误。

回答2:

中断处理函数要求尽可能的短,你这在中断里面有定时器延时闪灯,而且中断程序里定时器还会触发定时器中断很容易出问题
现在是有两个外部中断和一个定时器中断,你定时器用的是1,你将外部中断0的优先级设置为比1低,按优先级排:
外部中断1>外部中断0>定时器1,你在外部中断的中断程序里执行定时器延时,定时器的中断优先级根本不够,出问题也正常啊
正确的处理办法应该是将处理程序放到主函数里处理,例:定义两个标志数
bit sw1,sw2;
如果按键1按下,就在中断里将sw1赋值1.即sw=1;
在主函数里判断sw1=1就执行闪灯程序,然后将sw1标志清除,处理完一次按键程序
按键二处理方法也一样!
实在还想用自己的方法,你就将定时器1的优先级设最高,不过这样很可能按键又无响应,因主函数里流水灯程序定时器一直在不停的中断