51单片机(十四)—— 中断功能介绍

      中断是单片机的一个重要功能,本文我们就对51单片机的中断进行介绍。

      所谓“中断”,通俗一点讲,就是单片机停止正在执行的任务,转去执行其它的急需解决的任务,当这个任务完成之后,在回到原来的任务继续执行。中断就是为了使单片机能够对外部或内部随机发生的事件进行实时处理而设计的。中断功能的存在,很多程度上提高了单片机处理外部或内部事件的能力。中断功能是我们在学习单片机过程中必须掌握的。

        STC89C516单片机内部有6个中断源,也就是说,有6种情况发生时,会使单片机去处理中断程序。

        为了能让大家更容易理解中断的概念,我们举一个通俗的例子:你打开火,烧一壶水,然后去扫地。在扫地过程中,突然听到水壶发出的水开的报警声,这时,你停止扫地,立即去关掉火,然后将开水灌进暖水瓶中,灌完开水之后你又回去扫地,这个过程就发生了一次中断,这个过程如下图所示,扫地是个主任务,水开报警将扫地中断,导致去灌水,灌完水之后有回来继续扫地。

        对于单片机来讲,中断是指CPU在处理某一事件A时,发生了另一事件B,请求CPU迅速去处理事件B(中断发生),CPU暂时停止当前的工作(中断响应),转去处理事件B(中断服务),待CPU处理完事件B后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断,其流程如下图所示。

       再回来分析一下刚才举的生活实例,你的主任务是扫地,水开报警是一个中断请求,这一时刻相当于断点处,你响应中断去关火,然后将开水灌入暖水瓶中,这一动作实际上就是处理中断程序,灌完开水后又在回去继续扫地,相当于处理完中断处理程序后返回主程序继续执行主程序。这里需要注意的是,水开是随时可能发生的,但是无论什么时候发生,只要水一开,就要立即去处理它。处理之后再接着继续扫地。单片机在执行程序时,中断也随时可能发生。但无论何时发生,一旦发生,单片机将立即暂停当前程序,赶去处理中断程序,处理完中断程序后再返回刚才暂停处接着执行原来的程序。

       引起CPU中断的根源,称为中断源,中断源性CPU提出中断清求,CPU暂时中断原来的事件A,转去处理事件B,对事件B处理完毕之后,在回到原来中断的地方,称为中断返回。实现上述中断的功能部件称为中断系统。

中断开启与关闭,设置启用哪一个中断等都是由单片机内部的一些特殊功能寄存器来决定的。

        与中断有关的知识点还有一个叫中断嵌套,意思是说:如果单片机正在处理一个中断程序,此时,又有另一个中断优先级别更高的中断现象发生,单片机会停止当前的中断程序,而转去执行新的中断程序,新的中断程序处理完毕后再回到刚才停止的中断程序出继续执行,执行完这个中断后再返回主程序继续执行主程序。中断嵌套的流程图如下图所示。

        当设计中断时,还有一个重要的问题:中断优先级。单片机在执行程序时,可能会遇到同一时刻发生两个中断的情况,那么单片机该先执行哪个中断呢?这取决于单片机内部一个特殊功能寄存器——中断优先级寄存器的设置情况。通过设置中断优先级寄存器,我们可以告诉单片机,当两个中断同时出现时,先执行哪个中断程序。若没有设置操作优先级寄存器,单片机会按照默认的一套优先级自动处理。

        STC89C516单片机内部有6个中断源,它们分别为:

INT0—外部中断0,由P32端口线引入,低电平或下降沿触发中断。

INT1—外部中断1,由P33端口线引入,低电平或下降沿触发中断。

T0—定时器/计数器0中断,由T0计数器计满回零引起。

T1—定时器/计数器1中断,由T1计数器计满回零引起。

T2—定时器/计数器2中断,由T2计数器计满回零引起。

TI/RI—串行口中断,串行端口完成一帧字符发送/接收后引起。

单片机的6个中断源的默认中断优先级别如下表所示。

中断源

默认中断级别

序号(C语言用)

入口地址(汇编语言用)

INT0—外部中断0

最高

0

0003H

T0—定时器/计数器0中断

第2

1

000BH

INT1—外部中断1

第3

2

0013H

T1—定时器/计数器1中断

第4

3

001BH

TI/RI—串行口中断

第5

4

0023H

T2—定时器/计数器2中断

最低

5

002BH

        接下来我们来介绍一下,在单片机中断使用过程中经常用到的两个寄存器:中断允许寄存器IE和中断优先级寄存器IP。

1)中断允许寄存器IE

        中断允许寄存器用来设定各个中断源的打开和关闭,IE在特殊功能寄存器中字节地址为A8H,位地址(由低位到高位)分别为A8H~AFH,该寄存器可进行位寻址,即可以对这个寄存器的每一位进行操作。单片机复位时IE寄存器全部被清0,这个寄存器的各位如下表所示。

位序号

D7

D6

D5

D4

D3

D2

D1

D0

位符号

EA

--

ET2

ES

ET1

EX1

ET0

EX0

位地址

AFH

--

ADH

ACH

ABH

AAH

A9H

A8H

EA—全局中断允许位。

EA=1,打开全局中断控制,在此条件下,由各个中断控制位确定相应中断的打开和关闭。

EA=0,关闭全部中断。

--—无效位。

ET2—定时器/计数器2中断允许位。

ET2=1,打开T2中断。

ET2=0,关闭T2中断。

ES—串行口中断允许位。

ES=1,打开串行口中断。

ES=0,关闭串行口中断。

ET1—定时器/计数器1中断允许位。

ET1=1,打开T1中断。

ET1=0,关闭T1中断。

EX1—外部中断1中断允许位。

EX1=1,打开外部中断1中断。

EX1=0,关闭外部中断1中断。

ET0—定时器/计数器0中断允许位。

ET0=1,打开T0中断。

ET0=0,关闭T0中断。

EX0—外部中断0中断允许位。

EX0=1,打开外部中断0中断。

EX0=0,关闭外部中断0中断。

2)中断优先级寄存器IP

        中断优先级寄存器在特殊功能寄存器中,字节地址为B8H,位地址(由低位到高位)分别为B8H~BFH,IP寄存器用来设定各个中断源属于两级中断中的哪一级,该寄存器可以进行位寻址,即可对该寄存器的每一位进行单独操作。单片机复位时IP全部被清为0,这个寄存器的定义如下表所示。

位序号

D7

D6

D5

D4

D3

D2

D1

D0

位符号

--

--

--

PS

PT1

PX1

PT0

PX0

位地址

--

--

--

BCH

BBH

BAH

B9H

B8H

PS—串行口中断优先级控制位。

PS=1,串行口中断定义为高优先级中断。

PS=0,串行口中断定义为低优先级中断。

PT1—定时器/计数器1中断优先级控制位。

    PT1=1,定时器/计数器1中断定义为高优先级中断。

    PT1=0,定时器/计数器1中断定义为低优先级中断。

PX1—外部中断1中断优先级控制位。

    PX1=1,外部中断1定义为高优先级中断。

    PX1=1,外部中断1定义为高优先级中断。

PT0—定时器/计数器0中断优先级控制位。

    PT0=1,定时器/计数器0中断定义为高优先级中断。

    PT0=0,定时器/计数器0中断定义为低优先级中断。

PX0—外部中断0中断优先级控制位。

    PX0=1,外部中断0定义为高优先级中断。

    PX0=1,外部中断0定义为高优先级中断。

        在51单片机中,高优先级中断能够打断低优先级中断以形成中断嵌套,同优先级中断之间,或低级对高级中断之间则不能形成中断嵌套。若几个同级中断同时向CPU请求中断响应,在没有设置任何中断优先级的情况下,按照默认中断级别响应中断。在设置了中断优先级后,则按设置顺序确定响应的先后顺序。

        本文我们对中断的基本原理和相关寄存器进行了介绍,有关中断的具体用法我们将在后面的文章中进行介绍。

发布了97 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/bhniunan/article/details/104399620