单片机进入串口中断后,不能返回主程序while(1),指示灯仿真不闪烁,在线等

单片机进入串口中断后,不能返回主程序while(1),指示灯仿真不闪烁,在线等,第1张

仅仅看程序看不出问题所在,有可能是硬件上的问题,看这个程序有串口传送,在循环中出问题的地方很可能是串口发送那里,可能是程序卡死在那里了,也就是说有可能在发送的时候没有完成串口的发送。在主程序中只有发送,难道是自己发送自己接收,这样可能引起在发送中产生接收的中断,这样有可能在中断中处理了TI,这样在发送子程序中可能就得不到TI=1的信号,因此一直在这里循环。

以上是个人猜测,希望有帮助,本人比较喜欢单片机的程序,如果有机会可以一起讨论,我QQ372865655

程序不可能一直在中断内循环,如果硬件允许你可以设置一个小灯点亮程序,放在总循环中进行检验,这样程序是否死掉在中断内就一目了然了。

此外你的程序编写有错误,这个错误至少会导致你定时器函数是不可能执行的。错误点“tmr1_flg==1;”,双等号应该为单等号。

中断处理函数要求尽可能的短,你这在中断里面有定时器延时闪灯,而且中断程序里定时器还会触发定时器中断很容易出问题

现在是有两个外部中断和一个定时器中断,你定时器用的是1,你将外部中断0的优先级设置为比1低,按优先级排:

外部中断1>外部中断0>定时器1,你在外部中断的中断程序里执行定时器延时,定时器的中断优先级根本不够,出问题也正常啊

正确的处理办法应该是将处理程序放到主函数里处理,例:定义两个标志数

bit

sw1,sw2;

如果按键1按下,就在中断里将sw1赋值1即sw=1;

在主函数里判断sw1=1就执行闪灯程序,然后将sw1标志清除,处理完一次按键程序

按键二处理方法也一样!

实在还想用自己的方法,你就将定时器1的优先级设最高,不过这样很可能按键又无响应,因主函数里流水灯程序定时器一直在不停的中断

以上就是关于单片机进入串口中断后,不能返回主程序while(1),指示灯仿真不闪烁,在线等全部的内容,包括:单片机进入串口中断后,不能返回主程序while(1),指示灯仿真不闪烁,在线等、pic单片机 C语言中断程序不能返回主程序、51单片机采用外部中断tiao执行完中断程序几十秒才返回主程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9718573.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存