第6章 中断功能的使用与编程

6.1 中断的基本概念与处理过程

6.1.1 什么是中断

在生活中经常会遇到这样的情况:正在书房看书时,突然客厅的电话响了,人们往往会停止看书,转而去接电话,接完电话后又回书房接着看书。这种停止当前工作,转而去做其他工作,做完后又返回来做先前工作的现象称为中断。

单片机也有类似的中断现象,当单片机正在执行某程序时,如果突然出现意外情况,就需要停止当前正在执行的程序,转而去执行处理意外情况的程序(又称中断子程序),处理完后又接着执行原来的程序。

6.1.2 中断的基本概念

1.中断源

要让单片机的CPU中断当前正在执行的程序转而去执行中断子程序,需要向CPU发出中断请求信号。让CPU产生中断的信号源称为中断源(又称中断请求源)

8051单片机有5个中断源,分别是2个外部中断源、2个定时器/计数器中断源和1个串行通信接口中断源。如果这些中断源向CPU发出中断请求信号,CPU就会产生中断,停止执行当前的程序,转而去执行相应的中断子程序(又称中断服务程序),执行完后又返回来执行原来的程序。

2.中断的优先级别

单片机的CPU在工作时,如果一个中断源向它发出中断请求信号,它就会产生中断,如果同时有两个或两个以上的中断源同时发出中断请求信号,CPU会怎么办呢?CPU会先响应优先级别高的中断源的请求,然后再响应优先级别低的中断源的请求。8051单片机中5个中断源的优先级别顺序见表6-1。

6.1.3 中断的处理过程

在前面的例子中,当正在看书时,电话铃响了,这里的电话就是中断源,它发出的铃声就是中断请求信号。在处理这个中断时,可采取这样的做法:记住书中刚看完的页码(记住某行可能比较困难),然后再去客厅接电话,接完电话后,返回到书房阅读已看完页码的下一页内容。

表6-1 5个中断源的优先级别顺序及中断入口地址

单片机处理中断的过程与上述情况类似,具体过程如下:

1)响应中断请求。当CPU正在执行主程序时,如果接收到中断源发出的中断请求信号,就会响应中断请求,停止主程序,准备执行相应的中断子程序。

2)保护断点。为了在执行完中断子程序后能返回主程序,在准备执行中断子程序前,CPU会将主程序中已执行的最后一条指令的下一条指令地址(又称断点地址)保存到RAM的堆栈中。

3)寻找中断入口地址。保护好断点后,CPU开始寻找中断入口地址(又称矢量地址),中断入口地址存放着相应的中断子程序,不同的中断源对应着不同的中断入口地址。8051单片机5个中断源对应的中断入口地址见表6-1。

4)执行中断子程序。CPU寻找到中断入口地址后,就开始执行中断入口地址处的中断子程序。由于几个中断入口地址之间只有8个单元空间(见表6-1,如0003H~000BH相隔8个单元),较小的中断子程序(程序只有一两条指令)可以写在这里,较大的中断子程序无法写入,通常的做法是将中断子程序写在其他位置,而在中断入口地址单元只写一条跳转指令,执行该指令时马上跳转到写在其他位置的中断子程序。

5)中断返回。执行完中断子程序后,就会返回到主程序,返回的方法是从RAM的堆栈中取出之前保存的断点地址,然后执行该地址处的主程序,从而返回到主程序。