第5章中断系统与定时/计数器本章概要及学习目标本章介绍单片机中断系统的概念及89C51三种中断类型的工作方式;介绍定时/计数器的结构、类型及控制方式。
并通过实训介绍中断技术、定时/计数器的具体应用及中断服务子程序的基本编程方法。
通过对本章的学习,读者应掌握和了解以下知:1.89C51中断系统的概念及中断系统的功能2.特殊功能寄存器TCON、SCON、IE、IP、TH、TL和TMOD各控制位的功能及设置方法3.定时/计数器的结构、两种工作方式、四种工作模式及应用4.中断服务子程序的结构及基本编程方法5.MCS-51单片机外部中断源的扩展方法5.1 中断系统中断系统是计算机的重要组成部分。
实时控制、故障自动处理、计算机与外围设备间的数据传送往往采用中断系统。
中断系统的应用大大提高了计算机的工作效率。
中断技术的应用使计算机的功能更强,效率更高。
5.1.1 中断的概念1.中断技术中断是指CPU正在执行程序的过程中,CPU以外发生的某一事件(如芯片引脚一个电平的变化、一个脉冲沿的发生或定时/计数器的溢出等)向CPU发出中断请求信号,要求CPU暂时中断当前程序的执行而转去执行相应的处理程序,待处理程序执行完毕后,再继续执行原来被中断的程序。
这种程序在执行过程中由于外界的原因而被中间打断的情况称为“中断”。
例5.1中,50ms定时时间到则发生定时器0溢出,向CPU提出中断请求,CPU响应中断请求,就暂时终止当前执行的程序,转去执行相应的处理程序ISSR(Interrupt Service Subroutine)。
“中断”之后所执行的相应的处理程序通常称之为中断服务或中断处理子程序,原来正常运行的程序称为主程序。
主程序被断开的位置(或地址)称为“断点”。
引起中断的原因或能发出中断申请的来源,称为“中断源”。
中断源要求服务的请求称为“中断请求”(或中断申请)。
例5.1中的中断服务子程序是ISSR程序,主程序中的断点(读者自行查找),中断源是定时器0,在50ms定时时间到后由硬件置位TCON寄存器中的TF0位,然后自动向CPU发出中断请求。
调用中断服务程序的过程类似于调用子程序,其区别在于调用子程序在程序中是事先安排好的,而何时调用中断服务程序事先无法确定,因为“中断”的发生是由外部因素随机决定的,程序中无法事先安排调用指令,因此,调用中断服务程序的过程是由硬件自动完成的。
对这个中断全过程的分析,研究及实现方法称为中断技术。
2.中断技术的应用采用中断技术能实现以下的功能:(1)并行处理有了中断技术,就解决了快速的CPU与慢速外设之间的速度匹配问题,CPU可以与多台外设并行工作,CPU可分时与多台外设进行信息交换。
CPU在启动外设后,便继续执行主程序;而外设被启动后,开始进行准备工作。
当外设准备就绪时,就向CPU发出中断请求,CPU响应该中断请求并为其服务完毕后,返回到原来的断点处继续执行主程序。
外设在得到服务后,也继续进行自己的工作。
CPU和外设并行工作。
由于CPU与外设速度的悬殊差异,CPU可以使多个外设同时工作,并分时为多台外设提供服务。
(2)实时处理在单片机实时控制中,请求CPU提供服务是随机发生的。
有了中断系统,CPU就可以立即响应并进行相应的处理。
从而实现了实时处理。
(3)故障处理单片机系统工作时会出现一些突发故障,如电源断电、存储器出错、运算溢出等。
有了中断系统,当出现故障时,CPU可及时转去执行故障处理程序,自行处理故障而不必停机。
在单片机应用系统中,为了实现上述中断功能而配置的软件与硬件,便称为中断系统。
5.1.2 中断系统的硬件结构和中断源1.中断系统的硬件结构中断过程是在硬件基础上再配以相应的软件而实现的,不同的计算机,其硬件结构和软件指令是不完全相同的,因此,中断系统也是不尽相同的。
89C51中断系统的结构示意图如图5. 1. 1所示。
图5. 1. 1 89C51中断系统的结构示意图由图可知,89C51单片机有5个中断源,分别为外部中断0 INT0、外部中断1INT1、定时器0溢出中断请求TF0、定时器1溢出中断请求TF1和串行中断请求R I或TI,四个用于中断控制寄存器,分别为定时/计数器及外部中断控制寄存器TCON(用六位)、串行口控制寄存器SCON(用两位)、中断允许控制寄存器IE及中断优先级控制寄存器IP。
5个中断源有两个优先级,每个中断源可以由中断优先级控制寄存器IP编程设置为高优先级或低优先级中断,同级中断源的中断先后由顺序查询逻辑电路决定。
5个中断源分别对应5个固定的中断入口地址。
2.中断源中断源是中断申请的来源。
89C51单片机的5个中断源见表5. 1. 15.1.3 中断控制89C51通过对4个特殊功能寄存器TCON,SCON,IE和IP的设置来进行中断允许、中断申请方式和中断优先级的控制。
1.定时器/计数器及外部中断控制寄存器TCONTF1:定时器/计数器T1的溢出中断请求标志位。
当启动T1计数后,T1从预先设置的初值开始加1计数。
当计数器最高位产生溢出时,由硬件使TF1置1,并向CPU发出中断请求。
当CPU响应中断时,由硬件使TF1清零。
TF0:定时器/计数器T0的溢出中断请求标志位,含义与TF1相同。
IE1:外部中断1的中断请求标志。
当检测到外部中断引脚P3.3上存在有效的中断请求信号时,由硬件使IE1置1。
当CPU响应该中断请求时,由硬件使IE1清零。
IE0:外部中断0的中断请求标志位。
其含义与IE1类同。
IT1:外部中断1的中断触发方式控制位。
IT1为0时,外部中断1为电平触发方式,若外部中断1的引脚P3.3为低电平,则使IE1置1,请求中断。
IT1为1时,外部中断1为边沿触发方式,若CPU检测到外部中断1的引脚P3.3有由高到低的负跳边沿时,则使IE1置1,请求中断。
IT0:外部中断0的中断触发方式控制位。
其含义与IT1类同。
TR1:为1时启动定时器/计数器T1,为0时停止定时器/计数器T1。
TR0:为1时启动定时器/计数器T0,为0时停止定时器/计数器T0。
2.串行口控制寄存器SCONTI:串行口发送中断请求标志。
当CPU发送完一串行数据后,此时SBUF寄存器为空,硬件使TI置1,请求中断。
CPU响应中断后,由软件对TI清零。
RI:串行口接收中断请求标志。
当串行口接收完一帧串行数据时,此时SBUF寄存器为满,硬件使RI置1,请求中断。
CPU响应中断后,用软件对RI清零。
其他几位的含义及用法见串行通信一章。
3. 中断允许控制寄存器IE。
EA:中断允许总控制位。
EA=0,禁止所有中断;EA=1,开放所有中断。
但是否允许各中断源的中断请求,还要取决于各中断源的中断允许控制位的状态。
ES:串行口的中断允许位。
ET1:定时器/计数器T1的中断允许位。
EX1:外部中断1 INT1 的中断允许位。
ET0:定时器/计数器T0的中断允许位。
EX0:外部中断0 INT0 的中断允许位。
以上5个中断允许控制位为0时,禁止中断,为1时允许中断。
4. 中断优先级控制寄存器IP。
89C51单片机设有两级中断优先级,通过对IP寄存器相应位的设置进行中断优先级的选择。
PSPT1:定时器/计数器T1中断优先控制位。
PX1:外部中断1优先级控制位。
PT0:定时器/计数器T0中断控制位。
PX0:外部中断0中断优先级控制位。
以上5个中断优先级控制位分别为“0”时,为低级中断,为“1”时为高级中断。
如果几个同一优先级的中断源同时向CPU申请中断,CPU通过内部顺序查询逻辑电路,按自然优先级顺序确定该响应哪个中断请求。
自然优先级由硬件形成,排列见表表5.1.4 中断响应1.响应中断的条件(1)有中断请求信号(2)中断允许开放即EA=1,且中断源对应的中断允许位置位。
(3)无同级或更高级中断正在服务。
(4)当前的指令周期已经结束。
(5)如果当前指令为RETI或访问IE和IP的指令,至少需要再执行完一条指令。
当满足以上5个条件时CPU将对中断请求进行响应。
2.中断响应过程如果中断响应条件满足,CPU就响应中断。
中断响应过程分为以下6个步骤:a)保护断点断点就是CPU响应中断时程序计数器PC的内容,它指示被中断程序的下一条指令的地址——断点地址。
CPU自动把断点地址压入堆栈,以备中断处理完毕后,自动从堆栈取出断点地址送入PC,然后返回主程序断点处,继续执行被中断的程序。
b)给出中断入口地址程序计数器PC自动装入中断入口地址(见表5. 2),执行相应的中断服务程序。
c)保护现场为了使中断处理不影响主程序的运行,需要把断点处有关寄存器的内容和标志位的状态压入堆栈区进行保护。
现场保护要在中断服务程序开始处通过编程实现。
d)中断服务执行相应的中断服务,进行必要的处理。
e)恢复现场在中断服务结束之后,返回主程序之前,把保存在堆栈区的现场数据从堆栈区中弹出,送回到原来的位置。
恢复现场也需要通过编程实现。
f)中断返回执行中断返回指令RETI,它将堆栈内容保存的断点地址弹给PC,程序则恢复到中断前的位置。
5.1.5 中断的嵌套MCS-51单片机有两个中断优先级。
当CPU正在执行中断服务程序,又有新的断源发出中断申请时,CPU要进行分析判断,决定是否响应新的中断。
若是同级中断源申请中断,CPU将不予理睬;若是高级中断源申请中断,CPU将转去响应新的中断请求,待高级中断服务程序执行完毕,CPU再转回低级中断服务程序。
这就是中断的嵌套。
二级中断嵌套程序执行过程如图图5.1.2 中断嵌套流程图5.1.6 中断系统应用实例例5-1:试利用MCS-51内部定时器以中断的方式通过P1.0输出只有两个状态电平的占空比相等的系列方波,该方波的周期为50mS,用示波器查看。
①:题意分析:该题目是以定时中断来实现的。
程序上分为主程序和中断程序。
主程序负责中断的初始化,并加载第一个中断的定时,以保证系列方波的完整性,因题目简单,除此不再做其它事情;中断程序负责定时改变输出端口的状态,它能自动重载相应的定时值。
中断的执行过程所造成在时间上的影响只有几个μS,同样相对25mS的方波半周期影响极小,可以忽略不计。
②:汇编语言源程序:ORG 0000HSJMP MAIN ;跳到主程序ORG 000BH ;中断程序ISSR:CPL P1.0 ;改变输出端口MOV TH0,#0A6H ;重载25mS定;时值图5.1.3 例5-1流程图MOV TL0,#00HRETI ;中断返回MAIN: MOV IE,#82H ;开放中断总控位及定时器T0中断MOV TMOD,#01H ;设置定时器T0为模式1MOV TH0,#0A6H ;加载25mS定时值MOV TL0,#00HSETB TR0 ;启动定时器SJMP $ ;主程序动态停止END5.2 89C51/80C51的定时/计数器定时/计数器作为89C51的基本结构单元,主要完成以89C51为核心的测控系统中常常需要的定时或延时控制;当需要对外界事件进行计数时,就理所当然地由计数器来完成。