STC89C52RC单片机额外篇 | 01 - 认识中断中断源以及中断优先级
Posted Neutionwei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STC89C52RC单片机额外篇 | 01 - 认识中断中断源以及中断优先级相关的知识,希望对你有一定的参考价值。
1 中断的概念
中断是为使单片机具有对外部或者内部随机发生的事件实时处理而设置的。
把自己想象成单片机的CPU,你正在打王者荣耀,但是突然快递小哥给你打电话让你去拿快递(被打断心情很不爽。。。),于是你停下游戏去拿快递了。快递小哥的电话就是中断信号,告诉你有其他的事情需要先去做,然后你去拿快递就相当于中断之后要去处理的事情。
2 中断源
顾名思义,中断源就是产生中断的来源,在前面讲述中断的概念中,中断源就是“电话”!这就是外部世界在“干扰”你,让你不得不去处理,在单片机中抽象为“外部中断”。
除了外部中断,当然也有“内部中断”,例如,你家正在煲汤,你给自己设置一个每相隔半个小时就去看一下煲汤的情况,其余时间你都在学习,这个“中断”就相当于有了一个“定时器”,每次半小时一到达,你就得去一下厨房,没错,这个就是“定时器中断”。
当然,除此之外,8051单片机还有一个串行口中断。这个在之后实战中,我们会认识到它的原理!
8051单片机有五个中断源:
- INT0——外部中断0
- INT1——外部中断1
- T0——定时器/计数器0中断
- T1——定时器/计数器1中断
- TI/RI——串行口中断
这里需要注意:定时器和中断不是一回事,定时器是单片机模块的一个资源,确确实实存在的一个模块,而中断,是单片机的一种运行机制。 很多人会误以为定时器和中断是一个东西,只有定时器才会触发中断,其实根据前面的介绍,中断有很多来源。
3 中断优先级
在这里我们继续举例子,比如我正在看电视,这个时候来电话了,我要进入接电话的“中断”程序当中去,就在接电话的同时,听到了水烧开的声音,水烧开的“中断”也发生了,我们就必须要放下手上的电话,先把煤气关掉,然后再回来听电话,最后听完了电话再看电视,这里就产生了一个优先级的问题。
还有一种情况,我们在看电视的时候,这个时候听到水开的声音,水开的“中断”发生了,我们要进入关煤气的“中断”程序当中,而在关煤气的同时,电话声音响了,而这个时候,我们的处理方式是先把煤气关闭,再去接听电话,最后再看电视。
从这两个过程中,我们可以得到一个结论,就是最紧急的事情,一旦发生后,我们不管当时处在哪个“程序”当中,我们必须先去处理最最紧急的事情,处理完毕后再去解决其它事情。在我们的单片机程序当中有时候也是这样的,有一般紧急的中断,有特别紧急的中断,这取决于具体的系统设计,这就涉及到中断优先级和中断嵌套的概念。
以下表格中最右边是8051几个优先级的情况:
中断优先级有两种,一种是抢占优先级,一种是固有优先级,关于这块这里理解一下它们的概念即可,实战中用到之时再去分析!
抢占优先级:
当进入低优先级中断中执行时,如又发生了高优先级的中断,则立刻进入高优先级中断执行,处理完高优先级级中断后,再返回处理低优先级中断,这个过程就叫做中断嵌套,也称为抢占。
所以抢占优先级的概念就是,优先级高的中断可以打断优先级低的中断的执行,从而形成嵌套。当然反过来,优先级低的中断是不能打断优先级高的中断的。
固有优先级:
那么既然有抢占优先级,自然就也有非抢占优先级了,也称为固有优先级。在上面的表格中的最后一列给出的就是固有优先级,请注意,在中断优先级的编号中,一般都是数字越小优先级越高。从表中可以看到一共有 1~5 共 5 级的优先级,这里的优先级与抢占优先级的一个不同点就是,它不具有抢占的特性,也就是说即使在低优先级中断执行过程中又发生了高优先级的中断,那么这个高优先级的中断也只能等到低优先级中断执行完后才能得到响应。
以上是关于STC89C52RC单片机额外篇 | 01 - 认识中断中断源以及中断优先级的主要内容,如果未能解决你的问题,请参考以下文章
STC89C52RC单片机额外篇 | 04 - 认识头文件<intrins.h>与_nop_函数
STC89C52RC单片机额外篇 | 02 - 认识串行通信波特率以及数据包
STC89C52RC单片机额外篇 | 05 - 把NOP指令封装成微秒级延时函数
STC89C52RC单片机额外篇 | 03 - 认识C51编译器支持的数据类型