【5—7】80C51单片机在什么情况下可响应中断? 【答】中断响应是有条件的,即:
·中断源申请中断;
·该中断源已被允许中断,且CPU也已允许中断; ·没有同级或高优先级中断在执行中断服务程序。
在接受中断申请时,如遇下列情况之一,硬件生成的长调用指令LCALL将被封锁: ①CPU正在执行同级或高一级的中断服务程序。因为当一个中断被响应时,其对应的中断优先级触发器被置1,封锁了同级和低级中断。
②查询中断请求的机器周期不是执行当前指令的最后一个周期。目的在于使当前指令执行完毕后,才能进行中断响应,以确保当前指令的完整执行。
③当前正在执行RETI指令或执行对IE、IP的读/写操作指令。80C51.中断系统的特性规定,在执行完这些指令之后,必须再继续执行一条指令,然后才能响应中断。 【5—8】如何分析中断响应时间?这对实时控制系统有何意义?
【答】从中断请求发生直到被响应去执行中断服务程序,所需时间称为“中断响应时间”。一般来说,在单级中断系统中,中断的响应时间最短为3个机器周期,最长为8个机器周期。 ① 当中断请求标志位查询占1个机器周期时,若这个机器周期恰好是指令的最后一个机
器周期,则在这个机器周期结束后,CPU立即响应中断,产生硬件长调用LCALL指令。执行这条长调用指令需要2个机器周期,这样,中断响应时间为3个机器周期。
② 如果CPU正在执行的是RETI指令或访问IP、IE指令,则等待时间不会多于2个机器周
期,而中断系统规定这几条指令执行完后,必须再继续执行一条指令后才能响应中断。如这条指令恰好是4个机器周期长的指令(比如乘法指令MUL或除法指令DIV),再加上执行长调用指令LCALL所需2个机器周期,则总共需要8个机器周期。 ③ 如果中断请求被阻止,不能产生硬件长调用LCALL指令,那么所需的响应时间就更长。
如果正在处理同级或优先级更高的中断,那么中断响应的时间还需取决于处理中的中断服务程序的执行时间。
当单片机应用中断于实时控制系统时,往往非常在意中断的响应时间。比如出现故障后,
单片机在多长时间里能够响应和处理,这反映了单片机对故障处理的“失控’’时间长短。 .
【5—9】为什么单片机需要进行中断请求的撤消?中断请求的撤消有哪些方法?
【答】单片机响应中断请求,转向中断服务程序执行,在其执行中断返回指令RETI之前,中断请求信号必须撤除,否则将会再一次引起中断而出错。 中断请求撤除的方式有三种,即:
1.由单片机内部的硬件自动复位(硬件置位,硬件清除)
对于定时器/计数器TO、T1的溢出中断和采用跳变触发方式的外部中断请求,单片机响应中断后,由内部硬件自动清除中断标志TF0和TFl、IE0和IEl,从而自动撤除中断请求。
2.应用软件清除相应标志(硬件置位,软件清除)
对于串行接收/发送中断请求和80C52中的定时器/计数器T2的溢出和捕获中断请求,单片机响应中断后,必须在中断服务程序中应用软件清除RI、TI、TF2和EXF2这些中断标志,才能撤除中断。
3.采用外加硬件结合软件来清除中断请求(硬件置位,硬、软件结合清除)
对于采用电平触发方式的外部中断请求,中断标志的撤消是自动的,但中断请求信号的低电平可能继续存在。在以后机器周期采样时,又会把已清O的IEO、IEl标志重新置1,
再次申请中断。在系统中加入如图5—2所示的电平方式外部中断请求的撤消电路,保证在中断响应后把中断请求信号从低电平强制改变为高电平。
从图5—2中可看到,用D触发器锁存外部中断请求低电平,并通过触发器输出端Q送INT0或INTl,所以D触发器对外部中断请求没有影响。但在中断响应后,为了撤消低电平引起的中断请求,可利用D触发器的直接置位端SD来实现。采用80C51的一根I/O口线来控制SD端。只要在SD端输人一个负脉冲即可使D触发器置1,从而撤消低电平的中断请求信号。
通过在中断服务程序中增加以下两条指令,SD端得到所需负脉冲: ANL P1,#OFEH ;Q置1(SD为直接置位端,低电平有效) ORL P1,#01H ;SD无效
使P1.0输出一个负脉冲,其持续时间为2个机器周期,足以使D触发器置位,撤除低电平中断请求。第二条指令是必要的,否则D触发器的Q端始终输出1,无法再接收外部中断请求。
【5—1 0】请简述8OC51单片机扩展外部中断源的几种方法。
【答】在80C51单片机中,一般只有两个外部中断请求输入端INTO和INTl。当某个系统需要多个外部中断源时,可以通过增加OC门结合软件来扩展;当定时器/计数器在系统中有空余时,也可以通过对计数器计数长度的巧妙设置,使定时器/计数器的外部输入脚(TO或T1)成为外部中断请求输入端。 1.采用OC门经“线或\后实现 图5—3就是占用一个80C51的INTO或INTl扩展4个外部中断源的电路。 当4个扩展的外部中断源中有一个或几个出现高电平时,OC门反相器输出为O,引起INT0低电平触发中断,所以这些中断源都是电平触发方式。当满足外部中断请求条件时, CPU响应中断,转入中断矢量地址0003H单元开始执行中断服务程序。在中断服务程序中,由软件设定的顺序查询外部扩展中断哪一位是高电平,然后进入该中断处理程序。查询的顺序就是外部扩展中断源的中断优先级顺序。 外部中断源查询的流程图如图5—4所示。
INT0的中断服务程序如下:
PINTO: PUSH PSW ;保护现场 PUSH ACC ,
JB P1.0,LOOPl ;转向中断服务程序1 JB P1.1,LOoP2 ;转向中断服务程序2 JB P1..2,LOOP3 ;转向中断服务程序3 JB P1.3,LOOP4 ;转向中断服务程序4 INTEND:POP ACC 恢复现场 , POP PSW
RETI
LOOPI: ?? ..;中断服务程序1 · j.: .
AJMP INTEND +
LOOP2: ?? ;中断服务程序2 AJMP INTEND
LOOP3: ?? ;中断服务程序3 AJMP INTEND
LOOP4: ?? ;中断服务程序4 AJMP INTEND
从程序中可以看出,这里定义的扩展外中断源1的优先级最高,扩展外中断源4的优先级最低,因为先从P1.O开始查询。 2.通过片内定时器/计数器来实现
可以利用定时器/计数器T0或T1的外部事件输人引脚TO、T1作为边沿触发的外部中断源。这时应设置定时器/计数器TO或T1为计数器方式,而计数常数为满刻度值。外部输入的脉冲在负跳变时有效,计数器加1,由于计数常数已设为满刻度值,所以计数器加1后即溢出,向CPU’申请中断。
如果以定时器/计数器TO、T1的计数脉冲输人作为外部中断请求输入,定时器/计数器TO、T1的中断矢量用做第三、第四个扩展的外部中断矢量,定时器/计数器TO、T1的中断服务程序人口地址作为扩展的外部中断服务人口地址,即实现了外部中断源的扩展。 当定时器/计数器2用作波特率发生器时,若EXEN2置1,则T2EX端的信号产生负跳
变时;若EXF2置1,但不会发生重装载或捕获操作。这时,T2EX可以作为一个附加的外部中断源。
例如,把外部中断请求信号2连到80C51.单片机的T1引脚上,定时器/计数器T1设为计数器的方式2,即8位自动重装载方式,时间常数设为满刻度值FFH。外部中断2的服务程序人口地址存放在T1的中断矢量区中。其初始化程序段如下: ORG 0000H AJMP MAIN
ORG 001BH ;T1中断矢量作为外部中断2的中断矢量使用 LJMP INT2 ORG 0030H
MAIN: MOV TMOD,#60H ;设定时器/计数器T1为计数器方式2 MOV TLI.,#0FFH ;置T1计数常数 MOV THI,#0FFH
SETB EA ;开中断 SETB TRI. ;启动计数
INT2: ?? ;外部中断2的中断服务程序 RETI
【5一11】请简述80C51单片机的中断与子程序调用的异同点,并举例加以说明。 【答】中断与子程序调用的相似点如下:
·都是中断当前正在执行的程序,转去执行子程序或中断服务子程序。 ·都是由硬件自动把断点地址压入堆栈,然后通过软件完成现场保护。
·执行完子程序或中断服务子程序后,都要通过软件完成现场恢复,并通过执行返回指令,重新返回到断点处,继续执行程序。
·两者都可以实现嵌套,如中断嵌套和子程序嵌套。 中断与子程序调用的不同点如下:
·中断请求信号可以由外部设备发出,是随机的,比如故障产生的中断请求、按键中断等;子程序调用却是由软件编排好的。
·中断响应后由固定的矢量地址转入中断服务程序;子程序地址由软件设定。 ·中断响应是受控的,其响应时间会受一些因素影响;子程序响应时间是固定的。
第6章 【单片机的定时器/计数器原理及应用】 思考与练习题解析
【6-1】80C51单片机内部设有几个定时器/计数器?简述各种工作方式的特点。
【答】80C51单片机内部设有2个16位定时器/计数器TO和T1。定时器/计数器有4种工作方式,其特点如下: .
①方式O是13位定时器/计数器。由THx高8位(作计数器)和TLx的低5位(32分频的定标器)构成,TLx的低5位溢出时,向THx进位;THx溢出时,硬件置位TFx(可用于软件查询),并可以申请定时器中断。
②方式1是16位定时器/计数器。TLx的低8位溢出时向THx进位,THx溢出时,硬 件置位TFx(可用于软件查询),并可以申请定时器中断。
③方式2是定时常数自动重装载的8位定时器/计数器。TLx作为8位计数寄存器, THx作为8位计数常数寄存器。当TLx计数溢出时,一方面将TFx置位,并申请中断;另一