1、第5章 80C51单片机的中断系统 学习目标(1)熟悉单片机中断的基本原理与基本概念。(2)掌握单片机中断的执行过程。(3)掌握单片机中断相关的特殊功能寄存器。(4)掌握单片机中断初始化及中断服务程序。学习重点和难点(1)单片机的中断的寄存器的功能。(2)单片机中断初始化程序设计。(3)单片机中断系统应用程序设计。5.1 中断系统的基本概念 5.1.1 中断的定义 中断是指 CPU 正在处理某些事务时,发生了某一事件,请求 CPU 及时处理。于是,CPU 暂停中断当前的工作,转而处理所发生的事件。处理完毕,再回到原来被暂停工作中断的地方,继续原来的工作。这样的过程称为中断。实现中断功能的部件,
2、称为。产生中断的请求源,称为。响应中断请求过程5.1.2 中断的优点 提高了 CPU 的工作效率 进行实时处理5.1.3 中断嵌套 当 CPU 正在处理一个中断,又发生了另一个更紧迫事件(即优先级更高)的中断请求时,CPU 暂时终止对前一个中断的处理,转而响应优先级更高的中断请求,处理完优先级更高的中断请求后,再继续执行原来的中断处理程序。这样的过程,称为中断嵌套。这样的中断系统,称为多级中断系统。中断嵌套5.2 中断系统的内部结构 5.2.1 80C51单片机中断系统内部结构5.2.2 80C51单片机中断系统的寄存器5个中断源中断标志的 TCON 寄存器和 SCON 寄存器;中断允许寄存器
3、 IE、中断优先级寄存器 IP;1.TCON和SCON中的相关标志位80C51 有 5 个中断源,包括 2 个外部中断源 INT 0 和 INT1,以及 3 个内部中断源 T0、T1 和串行口中断源。这 5 个中断源的中断标志位占用了 TCON 寄存器中的 6 位,以及 SCON寄存器中的 2 位。两个外部中断源的触发方式由 TCON 寄存器中的 2 个控制位来决定。IE0:外部中断 INT 0 的请求标志位。当 INT 0 引脚上出现中断请求信号(低电平或脉冲下降沿)时,硬件自动将 IE0 置“1”,产生中断请求标志。IT0:外部中断 INT 0 触发方式控制位。由软件来置“1”或清零,以控
4、制外部中断 INT 0的触发方式。当 IT0=1 时,外部中断 INT0 为下降沿触发,即外部中断 INT 0 出现下降沿时,触发 IE0,使其为“1”;为使下降沿信号被可靠地采样,其负脉冲宽度至少应保持一个机器周期。当 IT0=0 时,外部中断 INT 0 为电平触发,即外部中断 INT0 出现低电平时,触发 IE0,使其为“1”。IE1:为外部中断 INT1 的请求标志位。功能与 IE0 相同。IT1:外部中断 INT1 触发方式控制位。功能与 IT0 相同。内部中断源有定时器 T0 和 T1 溢出中断源,以及串行口发送接收中断源。MCS-51 内部有两个定时器计数器,分别为定时器 T0
5、和定时器 T1,它们内部都有各自的计数器。当计数器计满溢出时,分别产生溢出中断,使各自的中断标志位 TF0 和 TF1 置“1”,产生中断请求标志。TF0 和 TF1 占用 TCON 寄存器中的 2 位。TF0:定时器 T0 的溢出中断标志位。TF1:定时器 T1 的溢出中断标志位。TI:串行口内部发送中断请求标志位。当串行口发送完一个字符后,由内部硬件使发送中断标志 TI 置位,产生中断请求标志。RI:串行口内部接收中断请求标志位。当串行口接收到一个字符后,由内部硬件使接收中断请求标志位 RI 置位,产生中断请求标志。串行口的发送中断 TI 和接收中断 RI,共用一个内部中断源。它们逻辑“或
6、”后,作为一个内部的串行口中断源。当CPU响应TI或RI中断时,标志位TI或RI不能由CPU自动清除,必须设置相应的指令,由软件清除。中断允许寄存器 IE EA:中断总允许位。EA=1,CPU 开放中断;EA=0,CPU 禁止所有的中断请求。ES:串行中断允许位。ES=1,允许串行口中断;ES=0,禁止串行口中断。ET1:T1 溢出中断允许位。ET1=1,允许 T1 中断;ET1=0,禁止 T1 中断。EX1:外部中断 1 允许位。EX1=1,允许外部中断 1 中断;EX1=0,禁止外部中断 1 中断。ET0:T0 溢出中断允许位。ET0=1,允许 T0 中断;ET0=0,禁止 T0 中断。E
7、X0:外部中断 0 允许位。EX0=1,允许外部中断 0 中断;EX0=0,禁止外部中断 0 中断。MCS-51 单片机复位后,IE 中的每一位均被清零,即禁止所有的中断。要使用哪些中断,就要开放 IE 中对应的中断允许位以及总允许位。中断优先级寄存器 IP PS:串行口中断优先级控制位。PS=1,设定串行口为高优先级中断;PS=0,设定串行口为低优先级中断。PT1:T1 中断优先级控制位。PT1=1,设定定时器 T1 为高优先级中断;PT1=0,设定定时器 T1 为低优先级中断。PX1:外部中断 1 优先级控制位。PX1=1,设定外部中断 1 为高优先级中断;PX1=0,设定外部中断 1 为
8、低优先级中断。PT0:T0 中断优先级控制位。PT0=1,设定定时器 T0 为高优先级中断;PT0=0,设定定时器 T0 为低优先级中断。PX0:外部中断 0 优先级控制位。PX0=1,设定外部中断 0 为高优先级中断;PX0=0,设定外部中断 0 为低优先级中断。MCS-51 单片机复位后,IP 寄存器低 5 位全部被清零,将所有中断源设置为低优先级中断。(2)不同优先级中断请求同时发生时 CPU 响应的优先顺序 MCS-51 单片机在执行中断程序时,高优先级中断源可中断正在执行的低优先级中断服务程序,除非正在执行的低优先级中断服务程序设置了 CPU 关中断或禁止某些高优先级中断;而同级或低
9、优先级的中断源不能中断正在执行的中断服务程序。如果几个同优先级的中断源同时向 CPU 申请中断,谁先得到服务,取决于它们在 CPU内部的优先级顺序。(3)相同优先级中断请求同时发生时 CPU 响应的优先顺序中断源中断源同优先级时的优先级顺序同优先级时的优先级顺序外部中断0最高级定时器T0中断 外部中断1定时器T1中断 串行口中断最低级5.3 中断响应与中断返回 5.3.1 中断响应 MCS-51 单片机响应中断有 4 个条件:一是中断源有请求;二是寄存器 IE 的总允许位EA=1,且 IE 相应的中断允许位为 1;三是无同级或高级中断正在服务;四是现行指令执行完最后一个机器周期。一般情况下,这
10、 4 个条件得到满足,单片机就响应中断。但是,若现行指令是 RETI,或需要访问寄存器 IE 或寄存器 IP 的指令,则执行完现行指令,还要执行完紧跟其后的一条指令,单片机才会响应中断。5.3.2中断返回(1)保存断点(2)取中断向量(3)执行中断服务程序及中断返回(4)响应中断后各中断标志位的清除 CPU 在响应中断后,能自动清除定时器溢出标志位 TF0和 TF1,以及边沿触发下的外部中断标志 IE0 和 IE1。串行口的发送、接收中断标志 TI 和RI,在中断响应后不会自动清除,只能由用户用软件清除。对于电平触发方式下的外部中断标志位 IE0 和 IE1,CPU 无法直接干预,需要在引脚处
11、外加硬件电路(如 D 触发器),使其撤消外部中断请求。5.4中断初始化及中断服务程序结构 中断初始化实质上就是对4个与中断有关的特殊功能寄存器TCON、SCON、IE和IP进行管理和控制,具体实施如下:CPU的开、关中断(即全局中断允许控制位的打开与关闭,EA=1或EA=0);具体中断源中断请求的允许和禁止(屏蔽);各中断源优先级别的控制;外部中断请求触发方式的设定。C51中断服务程序(函数)的格式如下:void 中断处理程序函数名()interrupt 中断序号 using 工作寄存器组编号 中断处理程序内容 【例5-1】编写中断初始化程序,设置外部中断0和串行口中断为高级中断,其它中断源为
12、低级中断,外部中断采用边沿触发方式,禁止外部中断1中断,允许其它中断源中断,开总中断。汇编语言的中断初始化程序如下:SETB PX0 SETB PS SETB IT0 MOV IE,#9BH C51语言的中断初始化程序如下:.PX0=1;PS=1;IT0=1;IE=0 x9b;【例5-2】设外部中断0采用边沿触发方式,写出外部中断0的C51初始化程序段及中断服务函数。主函数外部中断0初始化程序段:EA=1;/打开总中断开关EX0=1;/开外部中断0IT0=1;/设置外部中断的触发方式中断服务函数Void int0()interrupt 0 using 1 /用户代码【例5-3】89S51单片机
13、系统接口电路如图所示,编写程序实现下列要求:按下K0时,L0熄灭,按下K1时,L1熄灭。8 89 9S S5 51 1P P1 1.0 0P P1 1.1 1P P3 3.2 2P P3 3.3 3K K0 0K K1 1L L0 0L L1 1 ORG 0000H SJMP MAIN ORG 0003H ;外部中断0入口地址 SJMP INT0 ORG 0013H ;外部中断1入口地址 SJMP INT1 MAIN:CLR IT0 ;设外部中断0为电平触发方式 SETB EX0 ;开外部中断0中断允许位 CLR IT1 ;设外部中断1为电平触发方式 SETB EX1 ;开外部中断1中断允许位 SETB EA ;开CPU总中断允许位 SJMP$INT0:CLR P1.0 RETI INT1:CLR P1.1 RETI END