1、项目五 中断系统的应用任务一 认识 MCS-51 单片机的中断系统中断系统是单片机中非常重要的组成部分,它是为了使单片机能够对外部或内部随机发生的事件实时处理而设置的。中断功能的存在,在很大程度上提高了单片机实时处理能力,它也是单片机最重要的功能之一,是我们学习单片机必须掌握的重要内容。我们不但要了解单片机中断系统的资源配置情况,还要掌握通过相关的特殊功能寄存器打开和关闭中断源、设定中断优先级,掌握中断服务程序的编写方法。一、中断的概念为了弄懂中断的概念,下面我们先来了解一下单片机与外设之间数据的输入/输出方式。1单片机的输入/输出方式CPU 与外设之间的信息交换称为输入/输出。在一个单片机系
2、统中,输入/输出是必不可少的,CPU 与外设之间以何种方式进行信息交换,将直接影响到信息交换的可靠性和 CPU的效率。例如:在一个与打印机相连的微机系统中,CPU 将需要打印的数据输出给打印机,打印机接收到数据后便可进行打印。CPU 是如何将要打印的数据输出给打印机的呢?如果打印机总是处于准备好的状态或者 CPU 总是知道打印机的状态,那么 CPU 无需查询打印机状态可直接进行输出,这种方式称为无条件传送方式。但外设的执行速度一般是很慢的,像打印机这样的外设不可能总处于准备好的状态,因此 CPU 在输出数据前需要先查询打印机是否空闲,若空闲则进行输出操作,若打印机处于忙状态则继续查询,直到打印
3、机处于空闲状态再进行输出。这种方式称为查询传送方式。与无条件传送方式相比,虽然查询传送方式能有效地与慢速外设进行信息交换,提高了信息交换的可靠性,解决了外设与 CPU 速度不匹配的矛盾,但由于在外设未准备好的情况下,CPU 需要不断的查询外设状态,不能进行其他操作,这样就浪费了 CPU 的资源,使 CPU 的利用率大大降低。为了提高 CPU 的工作效率,可将外设的“忙/闲”状态信息作为请求触发信号,这样,CPU 就可以做自己的工作,当打印机处理完上一批数据后处于空闲状态时,向 CPU 提出中断请求信号,CPU 接到中断请求时,就暂停当前正在进行的工作转去为打印机输出数据,输出一批数据后又返回到
4、刚才中断的地方继续进行原来的工作,这种方式称为中断传送方式。综上所述,CPU 与外设之间信息交换有三种方式,其执行过程如图 5-1 所示。(a)无条件传送方式 (b)查询传送方式 (c)中断传送方式中断传送方式图 5-1 输入/输出方式示意图(1)无条件传送方式 这种方式的特点是:数据的传送取决于程序执行输入/输出指令,而与外设的状态无关。它适合于与 CPU 同步的快速设备或状态已知的外设,软、硬件系统简单。(2)查询传送方式 查询方式是一种条件传送。在传送数据前,首先读取外设状态信息,并加以测试判断,若外设“准备就绪”,则 CPU 与外设进行数据交换,若外设处于“忙”状态,则 CPU 不与外
5、设交换数据,并继续查询外设状态。其特点是:在硬件上不仅要考虑数据信息的传递,而且还要考虑状态信息的输入;在查询过程中 CPU 的利用率不高,适用于实时性能要求不高的场合。(3)中断传送方式 中断方式也是一种条件传送。CPU 可以与外设同时工作,并执行与外设无关的操作,一旦外设需要进行数据交换,就主动向 CPU 提出中断申请,CPU 接到中断请求后,就暂停当前的工作转去为外设服务(执行中断处理程序),处理完毕后又返回到原来暂停处继续进行原来的工作(执行原来的程序)。因此,CPU 不必浪费时间去查询外设状态,大大提高了效率。利用中断方式可以实现分时操作(使 CPU 可以同时处理多件事)、实时处理(
6、对随时发生的事件进行及时处理),应用范围较广。2中断的概念为了能让大家更容易理解中断的概念,我们先来看生活中的一个事例:你正在家中看书,突然门铃响了,你放下书去开门,处理完事情后回来继续看书;突然电话铃又响起来了,你又放下书去接电话,通话完毕后你又回来继续看书。这就是生活中的“中断”的现象,就是正常的工作过程被外部的事件打断了。对于单片机来讲,中断是指 CPU 在处理某一事件 A 时,发生了另一事件 B,请求 CPU迅速去处理(中断发生);CPU 接到中断请求后,暂停当前正在进行的工作(中断响应),转去处理事件 B(执行相应的中断服务程序),待 CPU 将事件 B 处理完毕后,再回到原来事件
7、A 被中断的地方继续处理事件 A(中断返回),这一过程称为中断。中断的有关关概念总结如下: 中断 CPU 正在执行主程序的过程中,由于 CPU 之外的某种原因,有必要暂停主程序的执行,转而去执行相应的处理(中断服务)程序。待处理程序结束之后,再返回原程序断点处继续运行的过程。 中断源 可以引起中断的事件称为中断源。单片机中也有一些可以引起中断的事件。MCS-51 单片机中共有 5 种中断源:两个外部中断( 、 )、两个定时/计数0INT1器中断(T0、T1)和一个串行口中断。 中断系统 实现中断过程的软、硬件系统。 主程序与中断服务程序 CPU 正在执行的当前程序称为主程序;中断发生后,转去对
8、突发事件的处理程序称为中断服务程序。 中断优先级 当多个中断源同时申请中断时,为了使 CPU 能够按照用户的规定先处理最紧急的事件,然后再处理其他事件,就需要中断系统设置优先级机制。通过设置优先级,排在前面的中断源称为高级中断,排在后面的称为低级中断。设置优先级以后,若有多个中断源同时发出中断请求时,CPU 会优先响应优先级较高的中断源。如果优先级相同,则将按照它们的自然优先级顺序响应默认优先级较高的中断源。五个中断源默认的自然优先级是由硬件的查询顺序决定的,由高到低的顺序依次是:外部中断 0、定时/计数器 0 中断、外部中断 1、定时/计数器 1 中断、串行口中断。中断源的优先级需由用户在中
9、断优先级寄存器 IP 中设定,后面将会讲到这一知识点。 中断嵌套 当 CPU 响应某一中断源请求而进入该中断服务程序中处理时,若更高级别的中断源发出中断申请,则 CPU 暂停执行当前的中断服务程序,转去响应优先级更高的中断,等到更高级别的中断处理完毕后,再返回低级中断服务程序,继续原先的处理,这个过程称为中断嵌套。在 51 单片机的中断系统中,高优先级中断能够打断低优先级中断以形成中断嵌套,反之,低级中断则不能打断高级中断,同级中断也不能相互打断。二、MCS-51 单片机的中断系统MCS-51 单片机的中断系统的内部结构框图如图 5-2 所示。图 5-2 MCS-51 单片机的中断系统内部结构
10、组成框图由图可知,51 单片机的中断系统有 5 个中断源,4 个用于中断控制的寄存器TCON、SCON、IE、IP 来控制中断类型、中断的开关和各种中断源的优先级确定。1中断源(5 个)(1)外部中断源(2 个)外部中断 0 和外部中断 1,是由单片机的 P3.2 和 P3.3 端口引入的,名称分别为和 ,低电平或下降沿触发。INT(2)定时/计数器中断源(2 个)MCS-51 单片机内部有 2 个 16 位的定时/计数器,分别是 T0 和 T1。当计数器计满溢出时就会向 CPU 发出中断请求。(3)串行口中断源(1 个)MCS-51 单片机内部有 1 个全双工的串行通信接口,可以和外部设备进
11、行串行通信,当串行口接收或发送完一帧数据后会向 CPU 发出中断请求。2中断标志TCON 即定时/计数器控制寄存器,这是一个可位寻址的 8 位特殊功能寄存器,即可以对其每一位单独进行操作,其字节地址为 88H。它不仅与两个定时/计数器的中断有关,也与两个外部中断源有关。它可以用来控制定时/计数器的启动与停止,标志定时/计数器是否计满溢出和中断情况,还可以设定两个外部中断的触发方式、标志外部中断请求是否触发。因此,它又称为中断请求标志寄存器。单片机复位时,TCON 的全部位均被清 0。其各位名称如表 5-1 所示。表 5-1 定时/计数器控制寄存器 TCON 的各位功能说明位 号 D7 D6 D
12、5 D4 D3 D2 D1 D0位名称 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0TCON 寄存器的各位功能介绍如下:IT0:外部中断 0( )的触发方式控制位。当 IT0=0 时, 为电平触发方式,INT0INT低电平触发有效;当 IT0=1 时, 为边沿触发方式,下降沿触发有效。0IE0:外部中断 0( )的中断请求标志位。当外部中断 0( )的触发请求I I有效时,硬件电路自动将该位置 1,否则清 0。换句话说,当 IE0=1 时,表明外部中断 0 正在向 CPU 申请中断;当 IE0=0 时,则表明外部中断 0 没有向 CPU 申请中断。当 CPU 响应该中断后,由
13、硬件自动将该位清 0,不需用专门的语句将该位清 0。IT1:外部中断 1( )的触发方式控制位。当 IT1=0 时, 为电平触发方式,INT1INT低电平触发有效;当 IT1=1 时, 为边沿触发方式,下降沿触发有效。1IE1:外部中断 1( )的中断请求标志位。当外部中断 1( )的触发请求有I I效时,硬件电路自动将该位置 1,否则清 0。换句话说,当 IE1=1 时,表明外部中断 1 正在向 CPU 申请中断;当 IE1=0 时,则表明外部中断 1 没有向 CPU 申请中断。当 CPU 响应该中断后,由硬件自动将该位清 0,不需用专门的语句将该位清 0。TR0:定时/计数器 0(T0)的
14、启动控制位。当 TR0=1 时,T0 启动计数;当 TR0=0 时,T0 停止计数;TF0:定时/计数器 0(T0)的溢出中断标志位。当定时/计数器 0 计满溢出时,由硬件自动将 TF0 置 1,并向 CPU 发出中断请求,当 CPU 响应该中断进入中断服务程序后,由硬件自动将该位清 0,不需用专门的语句将该位清 0。需要说明的是:如果使用定时/计数器的中断功能,则该位完全不用人为操作,硬件电路会自动将该位置 1、清 0,但是如果中断被屏蔽,使用软件查询方式去处理该位时,则需用专门语句将该位清 0。TR1:定时/计数器 1(T1)的启动控制位。其功能及使用方法同 TR0。TF1:定时/计数器
15、1(T1)的溢出中断标志位。其功能及使用方法同 TF0。3中断允计寄存器 IE在 MCS-51 单片机的中断系统中,中断的允许或禁止是在中断允许寄存器 IE 中设置的。IE 也是一个可位寻址的 8 位特殊功能寄存器,即可以对其每一位单独进行操作,当然也可以进行整体字节操作,其字节地址为 A8H。单片机复位时,IE 全部被清 0。其各位定义如表 5-2 所示。表 5-2 中断允许寄存器 IE 的各位功能定义位 号 D7 D6 D5 D4 D3 D2 D1 D0位名称 EA ES ET1 EX1 ET0 EX0中断允许寄存器 IE 的各位功能定义说明如下:EA:即 Enable All 的缩写,全
16、局中断允许控制位。当 EA=0 时,则所有中断均被禁止;当 EA=1 时,全局中断允许打开,在此条件下,由各个中断源的中断控制位确定相应的中断允许或禁止。换言之,EA 就是各种中断源的总开关。EX0:外部中断 0( )的中断允许位。如果 EX0 置 1,则允许外部中断 0 中断,INT否则禁止外部中断 0 中断。ET0:定时/计数器 0 的中断允许位。如果 ET0 置 1,则允许定时/计数器 0 中断,否则禁止定时/计数器 0 中断。EX1:外部中断 1( )的中断允许位。如果 EX1 置 1,则允许外部中断 1 中断,IT否则禁止外部中断 1 中断。ET1:定时/计数器 1 的中断允许位。如
17、果 ET1 置 1,则允许定时/计数器 1 中断,否则禁止定时/计数器 1 中断。例如:如果我们要设置允许外部中断 0、定时/计数器 1 中断允许,其他中断不允许,则 IE 寄存器各位取值如表 5-3 所示。表 5-3 IE 寄存器的各位取值位 号 D7 D6 D5 D4 D3 D2 D1 D0位名称 EA ES ET1 EX1 ET0 EX0取 值 1 0 0 0 1 0 0 1即 IE=0x89。当然,我们也可以用位操作指令来实现:EA=1,EX0=1,ET1=1。4中断优先级寄存器 IP前面已讲到中断源优先级的概念。在 MCS-51 单片机的中断系统中,中断源按优先级分为两级中断:1 级
18、中断即高级中断,0 级中断即低级中断。中断源的优先级需在中断优先级寄存器 IP 中设置。IP 也是一个可位寻址的 8 位特殊功能寄存器,即可以对其每一位单独进行操作,当然也可以进行整体字节操作,其字节地址为 B8H。单片机复位时,IP 全部被清 0,即所有中断源为同级中断。如果在程序中不对中断优先级寄存器 IP 进行任何人为操作,则当多个中断源发出中断请求时,CPU 会按照其默认的自然优先级顺序优先响应自然优先级较高的中断源。IP 的各位定义如表 5-4 所示。表 5-4 中断优先级寄存器 IP 的各位功能定义位 号 D7 D6 D5 D4 D3 D2 D1 D0位名称 PS PT1 PX1
19、PT0 PX0PX0、PT0、PX1、PT1、PS 分别为外部中断 0、定时/计数器 0 中断、外部中断 1、定时/计数器 1 中断、串行口中断的优先级控制位。当某位置 1 时,则相应的中断就是高级中断,否则就是低级中断。优先级相同的中断源同时提出中断请求时,CPU 优先响应自然优先级较高的中断。5中断初始化及中断服务程序结构中断初始化实质上就是对 4 个与中断有关的特殊功能寄存器 TCON、SCON、IE 和 IP 进行管理和控制,具体实施如下: CPU 的开、关中断(即全局中断允许控制位的打开与关闭,EA=1 或 EA=0); 具体中断源中断请求的允许和禁止(屏蔽); 各中断源优先级别的控
20、制; 外部中断请求触发方式的设定。中断管理和控制(中断初始化)程序一般都包含在主函数中,也可单独写成一个初始化函数,根据需要通常只需几条赋值语句即可完成。中断服务程序是一种具有特定功能的独立程序段,往往写成一个独立函数,函数内容可根据中断源的要求进行编写。C51 的中断服务程序(函数)的格式如下:void 中断处理程序函数名( ) interrupt 中断序号 using 工作寄存器组编号中断处理程序内容中断处理程序函数不会返回任何值,故其函数类型为 void,函数类型名 void 后紧跟中断处理程序的函数名,函数名可以任意起,只要合乎 C51 中对标识符的规定即可;中断处理函数不带任何参数,
21、所以中断函数名后面的括号内为空;interrupt 即“中断”的意思,是为区别于普通自定义函数而设,中断序号是编译器识别不同中断源的唯一符号,它对应着汇编语言程序中的中断服务程序入口地址,因此在写中断函数时一定要把中断序号写准确,否则中断程序将得不到运行。函数头最后的“using 工作寄存器组编号”是指这个中断函数使用单片机 RAM 中 4 组工作寄存器中的哪一组,如果不加设定,C51 编译器在对程序编译时会自动分配工作寄存器组,因此“using 工作寄存器组编号”通常可以省略不写。51 单片机的 5 个中断源的中断序号、默认优先级别、对应的中断服务程序的入口地址如表 5-5 所示:表 5-5 51 单片机的中断源的中断序号、默认优先级及对应的中断服务程序入口地址中断源名称 中断序号 默认优先级别 中断服务程序入口地址外部中断0( )INT0 最高 0003H定时/计数器 0 中断 1 第 2 000BH外部中断1( )I2 第 3 0013H定时/计数器 1 中断 3 第 4 001BH串行口中断 4 第 5 0023H任务二 防盗报警器的制作一、任务分析二、硬件电路设计三、程序设计任务三 8 路抢答器的制作一、任务分析二、硬件电路设计三、程序设计项目拓展知识巩固