请问51单片机有5个中断源,但只有两级中断优先级。怎么控制5个中断源优先顺序的?

请问51单片机有5个中断源,但只有两级中断优先级。
问题1:两级中断优先级,怎么控制5个中断源优先顺序的?
问题2:如果不设置优先级控制寄存器IP(默认为0),都按中断查询号0,1,2,3,4的顺序执行中断,会出现什么问题?
问题3:当程序使用多个中断的情况下,会不会因为中断优先级设置问题导致中断相互影响和某些中断丢失的情况?
问题4:怎么知道需要将低优先级设置为高优先级?
以上,请勿复制粘贴,期待原创解答,感谢!

你的问题虽多,但总结起来就是一句话:你对51单片机的中断工作过程没有概念。其实,大部分的教材都是有的……我就带你捋一捋吧。
我们都知道,中断的主要目的就是让重要且紧急的事件插队,优先得到处理。怎么知道有没有发生这样的事情?
51内核会在每个机器周期的S5P2将所有中断标志锁存采样,在下个机器周期进行依次判断,判断的顺序是:先在高优先级中断中,按照中断号由低到高(从0到n)的顺序巡查,再从低优先级中断中,按照中断号由低到高的顺序巡查。
巡查过程中只要发现哪一个中断标志置位了,就会在当前指令执行完毕后插入一个LCALL指令、根据中断向量设置跳转到对应的中断向量执行。但有下面三种情况例外:
1. 当前正有优先级相同或更高的中断在执行,位高权重惹不起;
2. 当前指令是个多周期指令(例如除法),还的往后等待若干机器周期;
3. 当前指令是RETI,或者与IE、IP相关的访问指令。
所以我们看到这个系统考虑得还算是全面的。以上可以回答你的问题1、2了。
至于问题3,中断会不会相互影响甚至丢失,通过刚才三个例外你就会发现,这是很有可能的。例如用户的中断函数磨磨唧唧占用时间太长(有些人喜欢在中断里面跑业务我也是服了),或者高优先级/高顺位的中断产生得太频繁,都会影响到其他中断的响应乃至导致事件丢失。
至于问题4,就要依赖于我们的设计思维和设计经验。当你明白巡检中断的顺序后,希望改变这样的顺序,就可以通过优先级来调整。例如在你的应用里把总线通讯响应速度放在最重要的地位,那么4号中断就要丢到高优先级里,避免定时器和外部中断的影响……
温馨提示:答案为网友推荐,仅供参考
相似回答