470 likes | 620 Views
第 5 章 MCS-51的中断系统. 任务五 左右移流水灯 5.1 概述 5.2 MCS-51的中断系统 5.3 MCSMCS-51外中断应用设计举例. 任务五 左右移流水灯. 任务目的 利用单片机外部中断,完成左右移动的流水彩灯设计,实现用按键对信号灯的控制 。 任务描述 用单片机的P3.2 , P3.3各接一只 按 键,按下一个按键时,实现彩灯左移花样,按下另一个按键时,实现彩灯右移花样 。 1.电路原理图 学习板电路原理图见 图5-1 所示 2.参考程序 FX BIT 00H ; 位地址00H 命名为FX ORG 0000H
E N D
第5章 MCS-51的中断系统 • 任务五左右移流水灯 • 5.1概述 • 5.2 MCS-51的中断系统 • 5.3 MCSMCS-51外中断应用设计举例
任务五 左右移流水灯 • 任务目的 • 利用单片机外部中断,完成左右移动的流水彩灯设计,实现用按键对信号灯的控制。 • 任务描述 • 用单片机的P3.2 , P3.3各接一只按键,按下一个按键时,实现彩灯左移花样,按下另一个按键时,实现彩灯右移花样。 • 1.电路原理图 • 学习板电路原理图见图5-1所示 • 2.参考程序 FX BIT 00H ; 位地址00H 命名为FX ORG 0000H LJMP MAIN ; 转移到主程序 ORG 0003 H ; 外中断0服务程序入口 下一页 返回
任务五 左右移流水灯 LJMP INT 0 ; 转移到外中断0服务程序 ORG 0013H ; 外中断1服务程序入口 LJMP INT1 ; 转移到外中断1服务程序 ORG 0030 H MAIN : MOV SP ,#5FH ; 设置堆栈栈底 SETB IT0 ; 设置外中断0为下降沿触发 SETB IT1 ; 设置外中断1为下降沿触发 CLR PX0 ; 设置外中断0 为低优先级 CLR PX1 ; 设置外中断1为低优先级, 由于复位时被清零,以上2条清零 标志位的指令可以省略 SETB EX0 ; 开外中断0 SETB EX1 ; 开外中断1 SETB EA ; 开总中断 MOV A , #01H ; 显示代码初值送累加器A 上一页 下一页 返回
任务五 左右移流水灯 K0: MOV P0 , A ; 把显示代码传送到P0口输出, 控制LED亮灭 JB FX , K1 ; FX=1(00H位为1),转移至K1, 执行右移 RL A ; FX=O , 执行显示代码左移, 暂存在A中 SJMP K2 ; 转移到K2 , 避开右移指令 K1: RR A ; 显示代码右移 K2: LCALL DELAY ; 调用延时子程序 SJMP K0 ; 返回 , 继续下一拍 INT0 : CLR FX ; 外中断0 服务程序 , 方向标志位清0 RETI ; 中断返回 INT1: SETB FX ; 外中断1服务程序 , 方向标志位置1 RETI ; 中断返回 DELAY: MOV R7 , #0FFH ; 延时子程序 L1: MOV R6 , #0FFH DJNZ R6 , $ 上一页 下一页 返回
任务五 左右移流水灯 KJNZ R7 , L1 RET END ; 程序结束 • 3.程序仿真及烧录 • 把这段程序在1}% AV6000中编辑、汇编,用软件仿真运行、调试无误,把得到bin格式或者hex格式的日标文件,通过烧录器或者下载线,保存到单片机的程序存储器中。把单片机插人实验板插座里,上电运行,分别按下两只按键,观察运行结果。 • 4.程序分析 • 按下P3.2处连接的按键,会在P3.2引脚(INTO)输人一个低电平,触发外部中断0,运行外部中断0服务程序,把方向标志位清零;按下P3.3处连接的按键,会触发外部中断1,运行外部中断1服务程序,把方向标志位置1。当主程序中执行到JB FX , K1这条指令时,会根据FX的值是0还是1,选择不同的流向,去执行RL A或者执行RR A,使彩灯出现不同的移动方向。 上一页 返回
5.1 概述 • 5.1.1中断的基本概念 • 1.中断 • 当中央处理器CPU正在处理某事件时,与它并行工作的外围部件或者外部设备由于工作的需要或者出现故障,请求CPU迅速去处理,CPU暂停当前工作,转去处理所发生的事件,处理结束之后,再回到被打断的地方继续原来的工作。这样的过程称为中断,如图5-2所示。 • 2.中断系统 • 实现中断功能的硬件称为中断系统。 • 3.中断源 • 能够产生中断请求的条件称为中断源。中断源可以来 下一页 返回
5.1 概述 自单片机的外部和内部。在不同种类的单片机中,中断源的数量一般并不相同。MCS-51单片机有5个中断源。 • 4.中断申请 • 中断源发出相应的电信号,向CPU申请中断,称为中断申请。 • 5.中断响应 • CPU暂停当前工作,转去执行中断服务程序,称为中断响应。 • 6.中断优先级 • 几个中断源同时申请中断或者CPU正在处于某中断处理过程中时,又有另一外部事件申请中断,CPU必须区分哪个中断源更重要,从而确定优先处理谁,这就是中断优先级的问题。 上一页 下一页 返回
5.1 概述 在MCS-51单片机中,中断的优先级可以用指令设定,也就是说是可编程的。在几个中断源同时申请中断时,高优先级的中断源先被响应,执行完毕以后,再去执行低优先级中断服务程序。 • 7.中断嵌套 • 优先级高的事件可以中断CPU正在处理的低优先级中断服务程序,待完成高级中断服务程序之后,再继续执行被打断的低级中断服务程序,这就是中断嵌套。反之,在高级中断服务程序执行时,同优先级或者低优先级中断请求将被挂起,等高级中断服务程序执完毕,才能执行低级中断服务程序。如图5-3所示。 • 5.1.2 中断的功能 上一页 下一页 返回
5.1 概述 • 1.实现CPU与外设的速度配合 • 由于许多外部设备速度较慢,无法与CPU进行直接的同步数据交换,为此可通过中断方法来实现CPU与外设的协调工作。在CPU执行程序过程中,如需进行数据输人/输出时,先启动外设,然后CPU继续执行程序。与此同时,外设在为数据输人/输出传送作准备。当准备完成后,外设发出中断请求,请求CPU暂停正在执行的程序,转去完成数据的输人/输出传送。传送结束后,CPU再返回继续执行原程序,而外设则为下次数据传送作准备。这种以中断方法完成的数据输人/输出操作,在宏观上看来似乎是CPU与外设在同时工作。我们称之为CPU与外设并行工作。 • 2.实现实时控制 • 在实时控制系统中要求计算机能及时完成被控对象随机 上一页 下一页 返回
5.1 概述 • 提出的分析和计算任务,以便使被控对象能保持在最佳工作状态,达到预定的控制要求。在自动控制系统中,各控制参量可能随机地在任何时刻向计算机发出请求,要求进行某种处理。对此,CPU必须作出快速响应和及时处理。这种实时处理功能只能靠中断技术才能实现。 • 3.实现故障的及时发现 • 计算机在运行过程中,常会突然发生一些事先无法预料的故障,如:硬件故障、程序故障等。应用中断技术,计算机就能对这些故障及时发现并进行自动处理。 • 4.实现人机交互 • 当用户需要对单片机的工作进行干预时,可以先通过键盘发出中断请求,在CPU执行完当前重要的工作以后,再按照用户的意图工作。如果马上响应用户请求,中断当前重要程序的运行,则有可能造成的严重后果。 上一页 返回
5.2 MCSMCS-51的中断系统 • MCSMCS-51有多个中断源,下面以8051为例进行介绍。 • 8051的中断系统有三类共5个中断源,提供两级中断优先级,可实现二级中断服务程序嵌套。对每个中断源而言,根据实际需要,既可通过编程设置为高优先级中断或低优先级中断,也可通过编程设置为中断开放或中断屏蔽。所谓编程设置是指在程序中通过指令,对于相关寄存器的特定位,设置相应的0, 1值。 • 与中断系统有关的特殊功能寄存器有中断允许寄存器IE、中断优先级控制寄存器1P、中断源寄存器(TCON, SCON中有关的位),中断系统内部结构如图5-4所示。 下一页 返回
5.2 MCSMCS-51的中断系统 • 5.2.1中断源和中断标志 • 1.中断源 • 8051的中断系统的5个中断源中,两个来自单片机的外部,三个来自单片机的内部。8051为每个中断源设置厂中断请求标志位。CPU每个机器周期都会对所有中断源进行检测,当检测到中断请求信号以后,8051为相应的中断标志位置位,以便在下一个机器周期进行控制和处理。 • (1)外部中断源。 • 8051有两个外部中断源,分别称为外部中断0 (INTO)和外部中断1(INTl)。外部中断0的中断请求信号由引脚INTO (P3.2)引入,外部中断1的中断请求信号由引脚INT1 (P3.3)引入。 上一页 下一页 返回
5.2 MCSMCS-51的中断系统 • 外中断源有两种中断触发方式:电平触发方式和脉冲触发方式。触发方式是通过定时控制寄存器TCON中相关位进行设置的。 • 当8051的外部中断源以电平方式触发时,低电平有效。CPU采样到引脚INTO即P3.2(或者引脚INT1即P3.3)为低电平时,就认为是外部中断0,(或者外部中断1)的一个有效的中断请求信号,这时把对应的标志位置位,向CPU申请中断。 • 当8051的外部中断源以脉冲方式触发时,下降沿有效。CPU在一个机器周期采样到引脚INTO即P3.2(或者引脚INT1即P3.3)为高电平,在接下来的一个机器周期CPU采样到该引脚 上一页 下一页 返回
5.2 MCSMCS-51的中断系统 • 为低电平,也就是说在出现厂下降沿的跳变(负脉冲),就认为是外部中断0(或者外部中断1)的一个有效的中断请求信号,这时把对应的标志位置位,向CPU申请中断。因为两次采样的时间间隔是一个机器周期,所以负脉冲对应的高低电平持续时间都至少要维持一个机器周期,才能保证CPU能检测到电平的跳变,可靠的触发中断。 • (2)定时器/计数器中断源。 • 8051内部有两个定时器/计数器TO和T1,用于进行定时和计数控制,是内部中断源。 • TO和T1在内部时钟(或者外部计数脉冲)的作用下进行定时(或者计数)。当定时(或者计数)结束时,自动由硬件产生溢出信号把对应的标志位置位,向CPU申请中断。这种中断请求是在单片机芯片内部发生的,因此无需在芯片上设置引入端。 上一页 下一页 返回
5.2 MCSMCS-51的中断系统 • (3)串行中断源。 • 8051有一个全双工异步串行口,用于串行通信,是内部中断源。每当串行口接收或发送完一组串行数据时,就自动由硬件产生一个中断请求。因此串行中断请求也是在单片机芯片内部自动发生的,同样不需在芯片上设置引入端。 • 这里所说的中断控制是指提供给用户使用的中断控制手段,具体说就是用户通过设置状态位来使用中断系统。为此MCSMCS-51单片机设置厂一些控制寄存器。与中断控制有关的寄存器有四个:定时器控制寄存器、中断允许控制寄存器、中断优先控制寄存器以及串行口控制寄存器。这四个控制寄存器都属于特殊功能寄存器。 • 2.中断请求标志 • CPU在每个机器周期都采样5个中断源的中断标志IEO, 上一页 下一页 返回
5.2 MCSMCS-51的中断系统 • IE1, TFO, TF1,TI和RI,这些中断请求源的中断请求标志位分别由特殊功能寄存器TCON和SCON的相应位锁定。 • (1)定时器控制寄存器TCON。 • ITO—选择外部中断请求INTO (P3.2)为边沿触发方式或电平触发方式的控制位。ITO可由软件置1或清0。当ITO=0时,为电平触发方式,INTO低电平有效。CPU在采样到外部中断输人线(INTO引脚)为低电平时,把中断申请标志位(IEO)置1。当外部中断源被设定为电平触发方式时,在中断服务子程序返回之前,外部中断INTO请求输人必须无效(即变为高电平),否则CPU返回主程序后会再次响应中断。所以电平触发方式适合于外部中断以低电平输人,而且中断服务子程序能清除外部中断请求源的情况。 上一页 下一页 返回
5.2 MCSMCS-51的中断系统 • 当ITO=1时,INTO为边沿触发方式,INTO输人脚上的电平从高到低的负跳变有效。外部中断申请触发器能锁存外部中断输人线上的负跳变。即便是CPU暂时不能响应,中断申请标志也不会丢失。在这种方式时,如果相继连续两次采样,一个周期采样到外部中断输人为高,下个周期采样为低,则置1中断申请标志位(IEO),直到CPU响应此中断时才清0。这样不会丢失中断,但输人的负脉冲宽度至少保持12个振荡周期,才能被CPU采样到。外部中断的边沿触发方式适合于以负脉冲形式输人的外部中断请求。 • IEO—外部中断0的中断申请标志位。当ITO=0即电平触发方式时,每个机器周期采样INTO,若INTO为低电平,则IEO置1,否则IEO清0;当ITO=1,即INTO程控为边沿触发方式时,当第一个机器周期采样到该引脚为高电平而第二个机器周期 上一页 下一页 返回
5.2 MCSMCS-51的中断系统 • 采样到该引脚为低电平时,IEO置1。IEO为1表示外部中断0正在向CPU申请中断。当CPU响应中断,转向中断服务子程序时,由硬件把IEO自动清0。 • IT1—选择外部中断请求INT1 (P3.3)为边沿触发方式或电平触发方式的控制位,由软件进行设定。当IT1MCS-0时,为电平触发方式,当IT1=1时,INT1为边沿触发方式。 • IE1—外部中断1的中断申请标志位,当INT1引脚得到有效的外中断请求信号时,由硬件自动置to • TFO—定时器/计数TO的计数溢出标志位。当TO定时(或者计数)结束时,该位由硬件自动置1。此位作为中断请求标志位,在中断响应后由硬件自动清0,也可以执行LCR TFO等指令由软件清O。 上一页 下一页 返回
5.2 MCSMCS-51的中断系统 • TF1—定时器TO , T1的计数溢出标志位。当T1定时(或者计数)结束时,该位由硬件自动置1。此位作为中断请求标志位,在中断响应后由硬件自动清0,也可以执行LCR TF1等指令由软件清O。 • TRO—定时器TO的运行控制位,可由软件置1或清0 o TRO=1,启动定时/计数器TO工作,TRO =0,停止定时/计数器TO工作。 • TR1—定时器T1的运行控制位,可由软件置1或清0 o TR1=1,启动定时/计数器T1工作, TR1MCS-0,停止定时/计数器T1工作。 • MCS-51单片机复位后,TCON被清零。 • (2)串行口控制寄存器SCON。 • SCON为串行口控制寄存器,字节地址为98 H,可位寻址。这里只介绍与中断有关系的低2位:TI和RI。 上一页 下一页 返回
5.2 MCSMCS-51的中断系统 • TI串行口的发送中断标志位,当串行口结束一次数据发送后,由硬件自动置to值得注意的是CPU响应发送器中断请求,转向执行中断服务程序时并不能自动把TI清0,TI必须由用户的中断服务子程序清0,口中断服务子程序中必须用CLR TI等把TI清0的指令。 • RI-串行口接收中断标志位,当串行口结束一次数据发送后,由硬件自动置1。同样RI必须由用户的中断服务子程序清O。 • MCS-51单片机复位后,SCON被清零。 下一页 返回 上一页
5.2 MCSMCS-51的中断系统 • 5.2.2 中断控制寄存器 • 1.中断允许寄存器IE • MCSMCS-51单片机的CPU对中断源的开放或屏蔽,是由片内的中断允许寄存器IE控制的(如图5MCS-3所示),IE的字节地址为A8 H,可以位寻址。格式如下所示。 • 中断允许寄存器IE各位的功能如下: • EA—中断允许总控制位。EA=0 , CPU屏蔽所有的中断请求(关中断);EAMCS-1 , CPU开放所有中断(开中断)。 • ES串行口中断允许位。ES=0,禁止串行口中断;ES=1,允许串行口中断。 • ET1—定时/计数器T1的溢出中断允许位。ET1=0,禁止T1溢出中断;ET1=1,允许T1溢出中断。 上一页 下一页 返回
5.2 MCSMCS-51的中断系统 • EX1—外部中断1中断允许位。EX1MCS-0,禁止外部中断1中断;EX1MCS-1 ,允许外部中断1中断。 • ETO—定时/计数器TO的溢出中断允许位。ETO =0,禁止TO溢出中断;ETO=1,允许TO溢出中断。 • EXO—中断0中断允许位。EXO=0,禁止外部中断0中断;EXO=1,允许外部中断0中断。 • MCS-51单片机复位以后,IE被清0,由用户程序置1或清OIE相应的位,实现允许或禁止各中断源的中断申请。若允许某一个中断源中断,除厂开放中断总的允许位EA外,必须同时使CPU开放该中断源的中断允许位。因为中断允许寄存器IE的地址是A8H,可以进行位寻址,所以可以通过位操作指令和字节操作指令实现。 上一页 下一页 返回
5.2 MCSMCS-51的中断系统 • 2.中断优先级寄存器IP • MCS-51单片机有两个中断优先级,对于每一个中断请求源可编程为高优先级中断或低优先级中断。 • MCSMCS-51单片机的片内有一个中断优先级寄存器IP,其字节地址为B8H,可以位寻址,可进行字节操作和位操作来设置各中断源中断级别。形式如下所示。 • 中断优先级寄存器IP各位的功能如下: • PS串行口中断优先级控制位 • PS=1,串行口中断定义为高优先级;(PS)=0,串行口中断定义为低优先级。 • PT1—定时/计数器T1中断优先级控制位。(PT1)=1,定时/计数器T1中断定义为高优先级;(PT1)=0,定时器T1中断定义为低优先级。 上一页 下一页 返回
5.2 MCSMCS-51的中断系统 • PX1—外部中断1中断优先级控制位PX1=1,外部中断1定义为高优先级;PX1MCS-0,外部中断1定义为低优先级。 • PTO—定时器TO中断优先级控制位。(PTO) =1,定时/计数器TO中断定义为高优先级;(PTO) =0,定时/计数器TO中断定义为低优先级。 • PXO—外部中断0中断优先级控制位。(PXO)=1,外部中断0定义为高优先级;PXO=0,外部中断。定义为低优先级。 • 中断优先级控制寄存器IP的各位都由用户程序置1和清0,可用位操作指令或字节操作指令更新IP的内容,以改变各中断源的中断优先级。MCS-51单片机复位以后IP为0,各个中断源均为低优先级中断。 • 5.2.3 中断优先级结构 上一页 下一页 返回
5.2 MCSMCS-51的中断系统 • MCS-51单片机有两个中断优先级,对于每一个中断请求源可编程为高优先级中断或低优先级中断。一个正在执行的低优先级中断程序能被高优先级的中断源所中断,但不能被另一个低优先级的中断源所中断。若CPU正在执行高优先级的中断,则不能被任何中断源所中断,一直执行到结束,遇到返回指令RETI,返回主程序后再执行一条指令后才能响应新的中断请求。以上所述可以归纳为下面两条基本规则: • (1)低优先级可被高优先级中断,而高优先级中断源不能被任何中断源所中断。 • (2)任何一种中断(不管是高级还是低级),一旦得到响应,不会再被它的同级中断所中断。遵循这样的原则,MCS-51单片机可实现两级中断嵌套,其工作过程如图5-3所示。 上一页 下一页 返回
5.2 MCSMCS-51的中断系统 • 为了实现上述两条规则,中断系统内部包含两个不可寻址的优先级状态触发器。其中一个指示某高优先级的中断正在执行,所有后来的中断均被阻止。另一个触发器指示某低优先级的中断正在执行,所有同级的中断都被阻止,但不阻断高优先级的中断。 • 当几个同优先级的中断同时申请中断,响应哪一个中断源将取决于内部查询顺序,或称为辅助优先级结构,也称为自然优先级。其优先级排列见下表。 上一页 下一页 返回
5.2 MCSMCS-51的中断系统 • 5.2.4 中断响应 • 1.中断服务区 • CPU响应中断请求、为中断源事件进行处理,是通过执行中断服务程序实现的。8051在内部ROM中为五个中断源定义厂固定的中断服务人口地址,称为中断向量。MCS-51的中断向量见下表。 上一页 下一页 返回
5.2 MCSMCS-51的中断系统 • 响应中断请求后,CPU按照中断源的不同,自动转到各个中断人口地址去执行程序。由于每个中断向量仅间隔8个字节,不可能放下一般的中断处理程序。因此一般在中断向量处放置一条无条件转移指令,转到真正的中断处理程序。 • 例如:外中断0的中断服务程序存放在INTO开始的地方,则编程如下: ORG 0003 H LJMP INT0 • 2.中断响应过程 • MCSMCS-51单片机在每个机器周期以IE , IP和自然优先级为依据查询每个中断源的中断请求标志,若有中断源发出请求,CPU则在下个机器周期按优先级顺序查询各中断标志,并且取高优先级的中断响应。响应中断后置位相应中断优先级状态触发器,表明当前中断服务的优先级别,执行硬件调用程序,将程序计数器PC的内容压人堆栈保护。 上一页 下一页 返回
5.2 MCSMCS-51的中断系统 • 对应中断源的中断人口地址装人程序计数器PC便程序转向该中断人口处执行中断服务程序,直至遇到RETI指令。执行RETI指令,撤销中断优先级触发器,弹出断点地址至程序计数器PC,继续原程序的执行过程。 • 在接受中断申请时,可能会遇到下列三种情况: • (1)正在执行同级或高一级的中断服务程序,则此次中断响应失败; • (2)当前指令周期不是该指令的最后一个周期(或一条指令未执行完),必须在当前指令完整执行后才能执行硬件调用程序响应中断; • (3)当前正在执行的指令是RETI或对IE , IP的读写操作,则还需要在它的下一条指令执行后才能执行硬件调用程序响应中断。 • 3.外中断响应时间 上一页 下一页 返回
5.2 MCSMCS-51的中断系统 • 在应用设计者使用外部中断时,有时需考虑从外部中断请求有效(外中断请求标志置“1")到转向中断人口地址所需要的响应时间。下面来讨论这个问题。 • 如果CPU正在为一个高级或者同级中断源服务,则无法计算此次中断请求的响应时间。只有当CPU处于非响应中断状态,或者新的中断请求优先级高于CPU正在响应的中断请求的优先级时,才能计算响应时间。 • 外部中断的最短的响应时间为3个机器周期。其中中断请求标志位查询占1个机器周期,而这个机器周期恰好是处于正在执行的指令的最后一个机器周期,在这个机器周期结束后,中断即被响应,CPU接着执行一条硬件子程序调用指令LCALL,以转到相应的中断服务程序人口。而该硬件调用指令本身需2个机器周期。 • 外部中断响应最长时间为8个机器周期。该情况发生在中断标志查询时,刚好是开始执行RETI或是访问LE或IP的指 上一页 下一页 返回
5.2 MCSMCS-51的中断系统 • 令,则需把当前指令执行完再继续执行一条指令后,才能响应中断。执行上述RETI或是访问IE或IP的指令,最长需要2个机器周期。而接着再执行的一条指令,我们按最长的指令(乘法指令MUL和除法指令DIV)来算,也只有4个机器周期。再加上硬件子程序调用指令LCALL的执行,需要2个机器周期。所以,外部中断响应时间为8个机器周期。 • 在一个单一中断的系统里,外部中断请求的响应时间总是在3-8个机器周期之间。 • 4.中断请求标志的撤除 • 当中断有效,CPU响应中断请求后,在中断返回前,应该及时撤除上一个中断请求,否则会引起另一次中断。 • 中断请求的产生是由硬件自动完成的,但是不同中断源的中断请求标志的撤除却并不相同。 • (l)外部中断请求标志的撤除。 上一页 下一页 返回
5.2 MCSMCS-51的中断系统 • 对于下降沿触发的外部中断,CPU在响应中断后,是由硬件自动清除有关的中断请求标志位无需采取其他措施。 • 对于电平激活的外部中断,撒除方法较复杂。因为在电平触发方式中,CPU响应中断时不会自动清除IEO或IE1标志,所以在响应中断后应立即撒除INTO引脚或INT1引脚上的低电平。由于CPU不能控制INTO引脚和INT1引脚外接的信号,所以必须用软硬件结合的方法处理。图5-5电路是一个可行的方案。 • 外部中断请求信号接在D触发器的CP端,当外部中断请求信号正脉冲出现在CP端时,由于D端接低电平,所以D触发器输出端输出低电平,申请中断。当CPU响应中断时,执行两条指令: 上一页 下一页 返回
5.2 MCSMCS-51的中断系统 SETB P1.0 CLR P1.0 • 在P1.0输出一个负脉冲,D触发器被置1, Q输出为1,撤销了中断请求信号。 • (2)定时/计数器溢出标志的撤除。 • 对定时器0或1溢出中断,CPU在响应中断后,就用硬件清除厂有关的中断 • 请求标志TFO或TF1,即中断请求是自动撤除的,无需采取其他措施。 • (3)串行口收发结束中断标志的撤除。 • 对于串行口中断,CPU响应中断后,没有用硬件清除TI, RI,故这些中断不能自动撤除,而要靠软件来清除相应的标志。 上一页 下一页 返回
5.2 MCSMCS-51的中断系统 • 5.2.5 中断应用程序的编程方法 • 1.保护现场 • 中断服务程序是一种具有特定功能的独立程序段。它为中断源的特定要求服务,以中断返回指令结束。在中断响应过程中,断点的保护主要由硬件电路来实现。对用户来说,在编写中断服务程序时,主要需考虑现场的保护与恢复。在多级中断系统中,中断可以嵌套,为厂不至于在保护现场或恢复现场时,由于CPU响应其他更高级中断请求,而破坏现场。一般要求,在保护和恢复现场时,CPU不响应外界的中断请求,即关中断。因此在编写程序时,应在保护现场和恢复现场之前,使CPU关中断,在保护现场和恢复现场之后,再根据需要使CPU开中断。中断服务程序一般编写格式如下: 上一页 下一页 返回
5.2 MCSMCS-51的中断系统 CLR EA ; 中断服务程序开始,先关中断 PUSH ACC ; 累加器A的内容人栈 PUSH PSW ; PSW的内容人栈 SETB RS1 ; 切换工作寄存器组 ...... SETR FA ; 现场内容全部保护,开中断 ...... ; 中断服务程序 CLR EA ; 准备恢复现场,关中断 ...... POP PSW ; PSW 的内容恢复,工作寄存器组切换 POP ACC ; 累加器A的内容恢复 SETR EA ; 现场内容全部恢复,开中断 RET1 ; 中断返回 上一页 下一页 返回
5.2 MCSMCS-51的中断系统 • 2.中断方式编程 • 如果CPU的工作只是因为处理中断请求而暂时被打断,其主要工作仍然是实现原程序的功能,那么应采用中断方式编程,通过中断服务程序进行相关处理。 • 中断方式编程步骤如下: • (1)设置堆栈指针SPo • (2)中断源的相关控制(如设置外部中断触发方式、启动定时器等)。 • (3)设置中断优先级。 • (4)开中断。 • (5)编写中断服务程序。 • [例5-1]当外中断0发生中断请求时,把RO的内容右移一位送P2口。 上一页 下一页 返回
5.2 MCSMCS-51的中断系统 ORG 0000H LJMP MAIN LRG 0003H ; 中断服务入口 LJMP INT0 ORG 0030H MAIN: MOV SP , #60H;设置堆栈栈底地址, 如果不使用1组工作寄存器组, 可以省略这条指令 SETB IT0 ; 下降沿触发 CLR PX0 ; 低优先级 SETB EX0 ; 开外部中断0 SETB EA ; 开总中断 ...... ORG 0F00H INT0 : PUSH ACC ; 中断服务程序 , 保护现场 MOV A , R0 ; 中断处理 上一页 下一页 返回
5.2 MCSMCS-51的中断系统 RR A MOV P2 , A POP A ; 恢复现场 RETI ; 中断返回 • 在中断方式下,CPU只是用一部分在执行中断服务程序,其余时间都是在执行主程序,这样就实现厂并行工作,提高厂效率。 • 3.查询方式编程 • 如果CPU工作的全部内容就是等待中断的发生,没有别的工作需要处理,那么可以使用查询方式对中断服务程序编程,在主程序里对中断标志进行处理。 • 查询方式编程步骤如下: 上一页 返回
5.3 MCSMCS-51外中断应用设计举例 • 在本节中只介绍外中断的应用,定时/计数器及串行中断的应用将在以后的章节中进行介绍。 • 【例5-3J设计一个左移流水灯,每当按下与P3.2相连接的按键以后,流水灯的速度就加快一些,按7次后还原为原来的速度。LED连接在P2口。 • 分析:由于按键与P3.2连接,可以应用外中断0完成加快速度的任务,由于显示代码存放在累加器A中,而在改变延时参数时会使用到A,因此必须在中断服务程序中保护现场。 • 参考程序如下: ORG 0000H LJMP MAIN ; 转移到主程序 ORG 0003 H ; 外中断0服务程序入口 LJMP INT0 ; 转移到外中断0服务程序 ORG 0030H MAIN: MOV SP , #5FH ; 设置堆栈栈底 SETB IT0 ; 设置外中断0为下降沿触发 下一页 返回
5.3 MCSMCS-51外中断应用设计举例 CLR PX0 ; 设置外中断0为低优先级。由于复位时被清零,所以清零PX0的指令可以省略 SETB EX0 ; 开外中断0 SETB EA ; 开总中断 MOV 30H , #0E0H ; 设置延时参数 MOV A , #0FEH ; 显示代码初值送累加器A K0: MOV P2 , A ; 把显示代码传送到P0口输出,控制LED亮灭 RL A ; 显示代码左移, 暂存在A中 LCALL DELAY ; 调用延时子程序 SJMP K0 ; 返回 , 继续下一拍 INT0 : PUSH ACC ; ACC 入栈, 保护现场 LCALL D10MS ; 延时10ms , 避开开关抖动 返回 上一页 下一页
5.3 MCSMCS-51外中断应用设计举例 MOV A , 30H CLR C SUBB A , #20H ; 减小延时参数 JNZ N1 ; A为0 , 速度已经到了最快 MOV A , #0E0H ; 恢复最初的速度 N1: MOV 30H , A POP ACC ; ACC出栈, 恢复现场 RETI D10MS : MOV R5, #50 ; 在中断发生时, 很有可能正在运行延时子程序R6,R7正在使用, 此外如使用R6, R7 会破坏现场 上一页 下一页 返回
5.3 MCSMCS-51外中断应用设计举例 L0: MOV R4 , #100 DJNZ R4 ,$ DJNZ R5 , L0 RET DELAY: MOV R7, 30H L1: MOV R6 , #0FFH L2: NOP DJNZ R6 , L2 DJNZ R7 , L1 RET END 上一页 返回