本帖最后由 WangChong 于 2023-9-16 17:13 编辑
中断
在单片机中,通常程序都是一直在主进程中循环执行,不会停止,无法感知外部的状态来进行实时性非常强的操作。在我们引入中断之前,让我们来看一个没有中断的例子:拿来扶手电梯来讲,在程序运行的时候。 电梯一直在运动的,但是如果现在出现了紧急情况。比如有个小孩卡在电梯里,那么我们肯定是想第一时间把电梯停下来。 但是由于这个电梯并没有中断系统。唯一能把电梯停下来的办法只有切断电源。但是切断电源这个操作有可能会花费很长的时候。此时小朋友就非常危险。
那么如果有了中断的话,当这个小朋友遇见危险的时候,我们可以第一时间按下电梯的急停按钮。此时在电梯还是通电的情况下,电梯停止了,那么当小朋友获救之后,我们可以将电梯复原到急停之前的状态。这就是中断。
而换一句话来讲, 中断就是你停下目前所作的事情,去做其他的事情,然后在其他事情做完之后重新回到你之前做的事情上来。
到此为止,中断的概念已经讲的非常清楚了。
中断优先级
通常而言,在单片机里都会提供很多种的中断资源。包括系统中断,定时器中断,串口中断和外部中断等等。 我们可以根据自己的业务场景来使用不同的中断函数配置。
可能又有人会说,那么如果现在很多个中断同时出现的话该怎么办呢?
比如说我现在正在写代码,突然有好多个美女要来给我捏捏肩,我应该选择哪一个呢? 那么此时就会出现一个中断优先级的概念。如果这么多中断都是同时的发生,那么中断优先级高的中断将会优先被触发。 其次则是优先级较低的中断。以此类推。
中断嵌套
还有一种情况是什么呢,此时有一个中断优先级较低的中断A已经被触发了,单片机正在处理中断A的中断方法。 那么此时有一个相对中断优先级较高的中断B也被触发了。但是由于中断B的优先级比中断A要高,此时单片机将不会再执行中断A的中断方法,将会优先执行中断B的中断方法。 当中断B的中断方法被执行完毕之后才会转头执行中断A的中断方法。 换一句话来说, 你现在正在写代码,突然有一个美女A来给你送水果, 于是你开开心心的在吃水果。 在你吃水果A的时候,美女B 来了,给你送了一个你更喜欢吃的水果。 于是你停下了吃水果A 开始吃水果B。 当水果B吃完了之后你才去吃水果A。
有一点需要注意的是,中断函数一般不要执行太过复杂的逻辑,也不要在中断函数内进行延时, 因为如果你的逻辑复杂或者延时较长的话,有可能当前的中断还没处理完,下一个中断又进来了!
希望能够以通俗的话,将深奥的知识进行简化。
|