第6章 80C51单片机的CTC与中断系统_第1页
第6章 80C51单片机的CTC与中断系统_第2页
第6章 80C51单片机的CTC与中断系统_第3页
第6章 80C51单片机的CTC与中断系统_第4页
第6章 80C51单片机的CTC与中断系统_第5页
已阅读5页,还剩164页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章80C51单片机的CTC与中断系统§6.180C51单片机的CTC及其应用§6.280C51单片机的中断系统及其应用§6.180C51单片机的CTC及其应用一、80C51单片机的定时器/计数器二、定时器/计数器的应用举例概述

在测、控领域往往需要定时检测某个参数,或按一定的时间间隔来进行某种控制。还有一些控制是根据对某种事件的计数结果进行的。因此几乎所有单片机内部都集成了定时/计数器,以简化微机测控系统的设计。一、80C51单片机的定时器/计数器80C51系列单片机典型产品中80C51等有两个16位定时器/计数器T0,T1;80C52等有三个16位定时器/计数器T0、T1和T2。它们都可以用作定时器或外部事件计数器。概述一、80C51单片机的定时器/计数器(一)定时器/计数器T0、T1的结构原理(二)定时器/计数器T0、T1的工作方式(三)定时器/计数器T2(四)看门狗(WTD)一、80C51单片机的定时器/计数器1、结构框图

80C51单片机内部有2个可编程的16位定时器/计数器T0、T1,结构框图如下图所示。它是由6个专用寄存器构成的:TH0、TL0构成16位计数器T0,TH1、TL1构成16位计数器T1,TMOD、TCON为两个定时器共用,用来选择工作方式和控制启停。(一)定时器/计数器T0、T1的结构原理1、结构框图(一)定时器/计数器T0、T1的结构原理

T0、T1是加1计数器,每当输入信号有一个负跳变时,计数器加1,它们可用于计数也可用于定时。1、结构框图(一)定时器/计数器T0、T1的结构原理

当用作计数时,它对外部输入(自引脚T0、T1)的脉冲信号计数。每个机器周期的S5P2采样引脚电平,若前一个机器周期采样值为1,后一个机器周期采样值为0,则计数器加1。对输入计数信号的要求:

由于识别一个从1到0的负跳变信号需要两个机器周期(24个振荡周期),所以最高的计数频率为系统时钟频率的1/24;又因为一个机器周期对信号采样一次,因此输入信号的电平至少应持续一个机器周期。1、结构框图(一)定时器/计数器T0、T1的结构原理

当用作定时时,它对内部时钟计数,每个机器周期,计数器加1。1个机器周期为12个振荡周期,因此定时时间由计数长度和时钟频率共同决定。1、结构框图(一)定时器/计数器T0、T1的结构原理2、定时器方式寄存器TMOD

TMOD用来选择定时器的工作方式,各位定义如下图所示:(一)定时器/计数器T0、T1的结构原理2、定时器方式寄存器TMOD(一)定时器/计数器T0、T1的结构原理功能选择方式选择门控方式选择3、定时器控制寄存器TCON

TCON的高4位分别作为T0、T1的溢出标志和运行控制位,低4位用于外部中断,如下图所示:(一)定时器/计数器T0、T1的结构原理3、定时器控制寄存器TCON(一)定时器/计数器T0、T1的结构原理(二)定时器/计数器T0、T1的工作方式简述80C51单片机定时器T0有四种工作方式:方式0、方式1、方式2和方式3。定时器T1有三种工作方式:方式0、方式1、方式2。1、工作方式0

当M1M0两位为00时,定时器/计数器选为工作方式0。它是一个13位的计数器,由TLX的低5位和THX组成。结构如下图所示:(二)定时器/计数器T0、T1的工作方式1、工作方式0(二)定时器/计数器T0、T1的工作方式1、工作方式0

当TLX的低5位计数溢出时即向THX进位,而THX计数溢出时向中断标志位TFX进位。在开中断的情况下,会向CPU发出中断请求;CPU响应中断后,硬件自动清除TFX标志。TFX也可供CPU读写,CPU写入状态与硬件置“1”或清“0”的效果相同。(二)定时器/计数器T0、T1的工作方式1、工作方式0由结构图可见,当C/T=1时,多路开关接通引脚TX,计数器对外部时钟计数;(二)定时器/计数器T0、T1的工作方式当C/T=0时,多路开关接振荡器经12分频后的输出,计数器对机器周期计数,即工作于定时方式。1、工作方式0

当门控位GATE=0时,定时器的启停仅由TRX控制,而当GATE=1时,定时器的启停还受到INTX引脚电平的控制。(二)定时器/计数器T0、T1的工作方式1、工作方式0在方式0应用时应注意以下几点:①

因计数器是做加1计数的,所以时间常数初值应用补码装入。②

方式0为13位计数器,应正确安排13位二进制码。③

如果要重复定时或计数,则须重新设置时间常数初值。(二)定时器/计数器T0、T1的工作方式

当M1M0两位为01时,定时器/计数器选为工作方式1,它是一个16位的计数器,结构如下图所示。

方式1和方式0唯一不同的就是位数,其它控制方式和用法均相同。(二)定时器/计数器T0、T1的工作方式2、工作方式1(二)定时器/计数器T0、T1的工作方式2、工作方式1

当M1M0两位为10时,定时器/计数器选为工作方式2,为8位时间常数可自动再装入的计数器,结构如下图所示。(二)定时器/计数器T0、T1的工作方式3、工作方式2(二)定时器/计数器T0、T1的工作方式3、工作方式2

这时TLX为8位计数器,THX为时间常数初值寄存器。当TLX计满溢出时,置位TFX,并将THX的内容(即时间常数初值)重新装入TLX中。方式2特别适合于需要重复定时/计数的场合。(二)定时器/计数器T0、T1的工作方式3、工作方式2

当M1M0两位为11时,选择工作方式3。方式3只适用于T0,如果企图将T1置为方式3,则将使T1停止计数,与清“0”TR1的效果相同。

T0工作于方式3时,变成两个独立的8位计数器TL0和TH0,结构如下图所示。(二)定时器/计数器T0、T1的工作方式4、工作方式3(二)定时器/计数器T0、T1的工作方式4、工作方式3TL0占用了原T0的所有资源;TH0占用了原T1的部分资源TR1和TF1,且TH0只能作为定时器用。

这种情况下,T1仍可工作于方式0、1或2的定时或计数,但TR1、TF1被TH0占用。该方式一般用在T1作为串口的波特率发生器,或不需要中断的场合。(二)定时器/计数器T0、T1的工作方式4、工作方式3(三)定时器/计数器T2

T2内部除了两个8位计数器TH2、TL2和控制寄存器T2CON及方式控制寄存器T2MOD外,还设置了捕捉寄存器RCAP2L(低字节)和RCAP2H(高字节)。概述80C52中有一个功能较强的定时器/计数器T2,它是一个16位的、具有自动重装载和捕捉能力的定时器/计数器。

T2的计数脉冲源有两个:内部机器周期和外部计数脉冲(从T2即P1.0端输入)

此时P1.1作为外部控制信号输入端T2EX。(三)定时器/计数器T2概述TF2EXF2RCLKTCLKEXEN2TR2C/T2CP/RL2捕捉/重装载选择1,选择捕捉0.选择重装载计数定时方式选择1,计数0,定时运行控制位1,启动T20,关闭T2允许/禁止外部信号触发捕捉或重装载1,允许0,禁止1、T2中的特殊功能寄存器(1)T2控制寄存器T2CON(字节地址C8H):(三)定时器/计数器T21、T2中的特殊功能寄存器TF2EXF2RCLKTCLKEXEN2TR2C/T2CP/RL2串行口发送波特率发生器选择1,选择T20,选择T1串行口接收波特率发生器选择1,选择T20,选择T1T2外部标志1,T2EX引脚(P1.1)上出现,造成捕捉/重装载,0,CPU响应中断,应由软件清除该标志。(EXEN2=1)T2溢出标志,T2溢出时置位(在波特率发生器方式下不置位)并申请中断,只能靠软件清除。该位置1,申请中断。(1)T2控制寄存器T2CON(字节地址C8H):(三)定时器/计数器T2(2)T2方式控制寄存器T2MOD:T2OEDCEN1,向下计数向下计数允许位0,向上计数T2输出允许位(仅对80C54/58)1,允许时钟输出至T2(P1.0)0,不允许输出T2MOD的复位值为:××××××00B1、T2中的特殊功能寄存器(三)定时器/计数器T2(3)数据寄存器:TH2,TL2两个8位寄存器构成16位计数器,可供CPU以字节方式读写。(4)捕捉寄存器:RCAP2H、RCAP2L用于捕捉计数器TH2、TL2的计数状态或预置计数初值。1、T2中的特殊功能寄存器(三)定时器/计数器T22、T2的功能选择:定时/计数(1)C/T2=0,选择定时方式。每个机器周期,T2的内容增1。(2)C/T2=1,选择计数方式,当T2(P1.0)引脚有一个负跳变,T2内容增1。注意计数脉冲频率不得超过振荡器频率的1/24。(三)定时器/计数器T23、T2的工作方式选择包括捕捉、自动重装载和波特率发生器三种。由T2CON中的CP/RL2和RCLK+TCLK来选择,见下表:(三)定时器/计数器T2T2的工作方式选择表捕捉方式:即在一定条件下,自动将计数器TH2和TL2中的数据读入RCAP2H和RCAP2L。捕捉方式的原理图如下:3、T2的工作方式选择(三)定时器/计数器T2(P1.0)(P1.1)T2外部标志(在T2CON中)允许/禁止外部触发(在T2CON中)捕捉方式:3、T2的工作方式选择(三)定时器/计数器T2当CP/RL2=1,选择捕捉方式。下述情况下将发生捕捉操作:当EXEN2=1,且引脚T2EX(P1.1)出现负跳变时,发生捕捉,同时标志EXF2置1,申请中断。捕捉方式:3、T2的工作方式选择(三)定时器/计数器T2

如果T2的中断开放,CPU响应后转到002BH执行中断服务程序。

注意:在中断返回之前,必须用软件来清除TF2/EXF2。捕捉方式:3、T2的工作方式选择(三)定时器/计数器T2自动重装载方式:即在一定条件下,自动将RCAP2H和RCAP2L中的数据装入计数器TH2和TL2中。一般RCAP2H和RCAP2L中预置了T2的计数初值。自动重装载方式的原理图如下:3、T2的工作方式选择(三)定时器/计数器T2自动重装载方式:3、T2的工作方式选择(P1.0)(P1.1)T2的自动重装载方式(三)定时器/计数器T2当CP/RL2=0时,选择自动重装载方式,以下两种情况下发生自动重装载操作:①T2溢出时,打开重装载三态缓冲器,发生重装载操作,同时置位TF2,申请中断。自动重装载方式:3、T2的工作方式选择(三)定时器/计数器T2当CP/RL2=0时,选择自动重装载方式,以下两种情况下发生自动重装载操作:②当EXEN2=1,且引脚T2EX(P1.1)有负跳变时,发生重装载操作,同时置位EXF2标志,申请中断。自动重装载方式:3、T2的工作方式选择(三)定时器/计数器T2如果T2中断允许,CPU响应后转到002BH执行中断服务程序。注意:在返回之前,应该用软件清除TF2/EXF2

标志。自动重装载方式:3、T2的工作方式选择(三)定时器/计数器T2波特率发生器方式:当T2CON中RCLK+TCLK=1时,T2作为串行口的波特率发生器,其结构原理如下图所示:3、T2的工作方式选择(三)定时器/计数器T2波特率发生器方式:3、T2的工作方式选择T2的波特率发生器方式结构图(三)定时器/计数器T2

当T2用作波特率发生器时,TH2的溢出不使TF2置位,不产生中断,所以此时T2不必禁止中断。计数时钟可以是内部,也可以是外部,由C/T状态决定,波特率的值决定于RCAP2H和RCAP2L装载的初值。波特率发生器方式:3、T2的工作方式选择(三)定时器/计数器T2该方式下,在T2计数过程中,不能再读写TH2和TL2;可以读但不能改写RCAP2H和RCAP2L;如果要访问RCAP2H和RCAP2L,应先关闭定时器。

上图可见,当T2用作波特率发生器时,若T2CON中EXEN2位置1,引脚T2EX(P1.1)可作为一个外部中断源。波特率发生器方式:3、T2的工作方式选择(三)定时器/计数器T2(四)看门狗(WTD)概述看门狗亦称监视定时器T3,它的作用是强迫单片机进入复位状态,使之从硬件或软件故障中解脱出来。即单片机的程序进入了错误状态后,在一个指定的时间内,用户程序没有重装定时器T3,将产生一个系统复位。

80C552中WTD是由一个11位的分频器和8位定时器T3(加1计数)组成。结构其结构如下图所示:看门狗T3结构图(四)看门狗(WTD)结构T3由外部引脚及PCON.4(WLE)和PCON.1(PD)控制。低电平,允许WTD工作,禁止掉电方式,也不能置位掉电位PCON.1。高电平,禁止WTD工作,允许掉电方式。引脚在软件调试阶段,通过将接高电平来禁止T3工作,待调试结束后,再将接低电平。(四)看门狗(WTD)WLE(PCON.4)——看门狗定时器允许重装标志1:允许定时器T3重装。0:T3装入后WLE自动清除,若该位为0,说明T3已被重装。T3的重装和溢出,产生复位的时间间隔,由装入T3的值决定。结构

对T3的装入分两步:先置位PCON.4(WLE),然后装入T3。T3装入后,PCON.4自动复位。如果PCON.4=0,则T3不能被装入。(四)看门狗(WTD)工作过程

定时器T3的工作原理:在T3溢出时,复位8X552并产生复位脉冲输出至复位引脚RST。为防止系统复位,必须在定时器T3溢出前,通过软件对其进行重装。如果发生软件或硬件故障,将使软件对定时器T3的重装失败,从而T3溢出导致复位信号的产生。用这样的方法可以在软件失控时,恢复程序的正常运行。(四)看门狗(WTD)编程实例例如:watchdog使用的一段程序如下:T3EQU0FFH;定时器T3的地址PCONEQU87H;PCON的地址WATCH_INTVEQU156;看门狗的时间间隔LCALLWATCHDOG看门狗服务程序WATCHDOG:ORLPCON,#10H;允许定时器T3重装MOVT3,#WATCH_INTV;装载定时器T3RET(四)看门狗(WTD)二、定时器/计数器的应用举例(一)定时器/计数器编程步骤(二)定时器/计数器的应用举例(1)确定工作方式,把方式字写入TMOD寄存器。(2)计算定时/计数初值,并将初值写入寄存器TH0、TL0或TH1、TL1。计数初值应用补码写入。作计数器:计数初值X=2n-C,作定时器:时间常数初值X=2n-T/TC,式中n为计数器位数,C是实际计数值,TC是机器周期,T是设定的时间。(一)定时器/计数器编程步骤(3)将中断控制字和中断优先级别分别写入中断允许寄存器IE和中断优先级寄存器IP。(4)向TCON写入适当命令字,控制定时器/计数器的运行。(一)定时器/计数器编程步骤例1利用T0方式0产生1ms的定时,在P1.0引脚上输出周期为2ms的方波。设单片机晶振频率fosc=12MHz

解:要在P1.0输出周期为2ms的方波,只要使P1.0每隔1ms取反一次即可。T0的方式字为:TMOD=00H计算要定时1ms,T0的初值:机器周期Tc=(1/fosc)×12=[1/(12×106)]×12=1μs(二)定时器/计数器的应用举例(二)定时器/计数器的应用举例

利用T0方式0产生1ms的定时,在P1.0引脚上输出周期为2ms的方波。设单片机晶振频率fosc=12MHz

例1设T0的计数初值为X,则(213-X)×1×10-6=1×10-3

X=213-1×10-3/(1×10-6)

=8192-1000

=7192

=1110000011000B高8位

E0H

低5位

18H利用T0方式0产生1ms的定时,在P1.0引脚上输出周期为2ms的方波。设单片机晶振频fosc=12MHz。那么:TH0初值为E0H,TL0初值为18H。采用查询TF0的状态来控制P1.0输出。程序清单:MOVTMOD,#00H;置T0为方式0MOVTL0,#18H;送计数初值MOVTH0,#0E0HSETBTR0;启动T0例1(二)定时器/计数器的应用举例利用T0方式0产生1ms的定时,在P1.0引脚上输出周期为2ms的方波。设单片机晶振频率fosc=12MHz。

LOOP:JBCTF0,NEX;查询定时时间到否SJMPLOOPNEX:MOVTL0#18H;重赋计数初值MOVTH0#0E0HCPLP1.0;输出取反SJMPLOOP;重复循环例1(二)定时器/计数器的应用举例利用T0方式0产生1ms的定时,在P1.0引脚上输出周期为2ms的方波。设单片机晶振频率fosc=12MHz。

采用查询方式的程序很简单,但CPU要不断地查询溢出标志TF0的状态,这就占用了CPU工作时间,以致CPU的效率不高。采用定时溢出中断方式,可以提高CPU的效率。例1(二)定时器/计数器的应用举例采用定时溢出中断方式产生前例所要求的方波。

解:方式字和初值与上例一样。程序清单:主程序:ORG0000HAJMPMAIORG000BH;T0中断入口AJMPIST0;转中断服务程序例2(二)定时器/计数器的应用举例采用定时溢出中断方式产生前例所要求的方波。MAI:MOVSP,#53H;设置堆栈MOVTMOD,#00H;置T0为方式0MOVTL0,#18H;送初值MOVTH0,#OE0HSETBEA;CPU开中断SETBET0;T0中断允许SETBTR0;启动T0HERE:SJMPHERE;等待中断例2(二)定时器/计数器的应用举例采用定时溢出中断方式产生前例所要求的方波。中断服务程序:IST0:MOVTL0,#18H;重装初值MOVTH0,#0E0HCPLP1.0;输出方波RETI;中断返回例2(二)定时器/计数器的应用举例采用定时器控制输出一方波信号,要求方波的周期为1s。设单片机晶振频率为12MHz。解:输出周期为1s的方波要求定时值为500ms,在时钟为12MHz的情况下,即使采用方式1(16位计数器),这个值也超过了方式1可能提供的最大定时值(65.536ms)。如果采用降低单片机时钟频率来延长定时时间,在一定的范围内可以,但会降低CPU运行速度,而且定时误差也会加大。例3(二)定时器/计数器的应用举例采用定时器控制输出一方波信号,要求方波的周期为1s。设单片机晶振频率为12MHz。要获得500ms的定时,可选用定时器T0方式1,定时时间为50ms。另设一个软件计数器,初始值为10。每隔50ms定时时间到,产生溢出中断,在中断服务程序中使软件计数器减1,当软件计数器减到0时,就获得500ms定时。下面介绍一种利用定时器定时和软件计数来延长定时时间的复合方法。例3(二)定时器/计数器的应用举例采用定时器控制输出一方波信号,要求方波的周期为1s。设单片机晶振频率为12MHz。若时钟频率f=12MHz,50ms定时的计数初值为:X=216-50×10-3/(1×10-6)=65536-50000

=15536D=0011110010110000B3CH

B0H

例3(二)定时器/计数器的应用举例即X=3CB0H,因此TH0初值为3CH,TL0初值为B0H。采用定时器控制输出一方波信号,要求方波的周期为1s。设单片机晶振频率为12MHz。程序清单:ORG0000HAJMPMAI;转主程序ORG000BHAJMPTIS;转定时器T0中断服务程序例3(二)定时器/计数器的应用举例采用定时器控制输出一方波信号,要求方波的周期为1s。设单片机晶振频率为12MHz。MAI:MOVSP,#53HMOVTMOD,#01H;定时器T0方式1MOVTL0,#0B0H;T0低8位初值MOVTH0,#3CH;T0高8位初值MOVIE,#82H;T0开中断SETBTR0;启动T0MOVR1,#10;软件计数器初值DEFG:SJMPDEFG;等待中断例3(二)定时器/计数器的应用举例采用定时器控制输出一方波信号,要求方波的周期为1s。设单片机晶振频率为12MHz。中断服务程序:TIS:DJNZR1,NEXT;(R1)=0,则不对P1.0取反CPLP1.0;输出方波MOVR1,#10;重装软件计数器初值NEXT:MOVTL0,#0B0H;重装定时器初值MOVTH0,#3CHRETI;中断返回例3(二)定时器/计数器的应用举例利用定时器方式2对外部脉冲计数,要求每计满110次,将P1.0端取反。解:外部信号由T1引脚输入,每发生一次负跳变计数器加1,每输入110个脉冲,计数器发生溢出中断,中断服务程序将P1.0取反一次。T1为计数方式2的方式字为:TMOD=60H。设T0不用,TMOD的低4位可任意,但不能使T0进入方式3,一般取0。例4(二)定时器/计数器的应用举例利用定时器方式2对外部脉冲计数,要求每计满110次,将P1.0端取反。计算T1的计数初值:X=28-110=146=92H则TL1的初值为92H,重装初值寄存器TH1=92H。例4(二)定时器/计数器的应用举例利用定时器方式2对外部脉冲计数,要求每计满110次,将P1.0端取反。程序清单:MAI:MOVTMOD,#60H

;置T1方式2计数MOVTL1,#92H;赋初值MOVTH1,#92HMOVIE,#88H;定时器T1开中断SETBTR1;启动计数器HERE:SJMPHERE;等待中断例4(二)定时器/计数器的应用举例利用定时器方式2对外部脉冲计数,要求每计满110次,将P1.0端取反。ORG001BH;中断服务程序入口CPLP1.0;对P1.0取反RETI;中断返回例4(二)定时器/计数器的应用举例利用T0门控位测试引脚上出现的正脉冲的宽度,并以机器周期数的形式显示在显示器上。解:根据要求,解题思路为:将T0设为定时器方式1,计数初值为0,GATE程控为1,置TR0为1。一旦P3.2引脚出现高电平即开始计数,直到出现低电平为止,然后读取T0的计数值并显示。测试过程如下图所示:例5(二)定时器/计数器的应用举例对T0初始化,09H→TMOD,GATE=1T0从0开始计数,测量脉冲宽度0→TR0,停止计数读T0值,送显示利用T0门控位测试引脚上出现的正脉冲的宽度,并以机器周期数的形式显示在显示器上。程序清单:START:MOVTMOD,#09H;T0定时方式1,GATE置1MOVTL0,#00HMOVTH0,#00HSETBTR0;启动定时器计数WAIT1:JBP3.2,WAIT1;等待INT0变低例5(二)定时器/计数器的应用举例利用T0门控位测试引脚上出现的正脉冲的宽度,并以机器周期数的形式显示在显示器上CLRTR0;停止T0计数MOVR0,#DISBUF;显示缓冲器首址送R0MOVA,TL0;机器周期存放格式为低位占低地址WAIT2:JNBP3.2,WAIT2;等待INT0升高WAIT3:JBP3.2,WAIT3;等待INTO变低例5(二)定时器/计数器的应用举例利用T0门控位测试引脚上出现的正脉冲的宽度,并以机器周期数的形式显示在显示器上。XCHDA,@R0;高位为占高地址。连续4个显示缓冲单元INCR0SWAPAXCHDA,@R0INCR0MOVA,TH0XCHDA,@R0INCR0例5(二)定时器/计数器的应用举例利用T0门控位测试引脚上出现的正脉冲的宽度,并以机器周期数的形式显示在显示器上。SWAPAXCHDA,@R0DIS:LCALLDISUP;长调用显示子程序AJMPDIS...;重复显示脉宽机器周期数...

由于定时器方式1的16位计数长度有限,被测脉冲高电平宽度必须小于65536个机器周期。例5(二)定时器/计数器的应用举例利用定时器/计数器测定周期示意图利用定时器测定下图所示波形的一个周期的长度。例6(二)定时器/计数器的应用举例

解:设T0为定时、门控方式,当INT0为高电平时,启动定时器,之后应改为非门控方式;T1为计数方式。信号波形及连接方式如上图(b)所示。①定时器设置:当脉冲速率低于每秒3个时,每个脉冲周期为330ms左右,且设脉冲宽度小于100ms,故设置定时器的基本定时为100ms,可满足测时的精度要求。例6利用定时器测定下图所示波形的一个周期的长度。(二)定时器/计数器的应用举例T0的TMOD的设置:采用门控方式启动定时器,按方式1定时,故方式字为09H。GATEC/TM1M01001例6门控定时器方式1利用定时器测定下图所示波形的一个周期的长度。(二)定时器/计数器的应用举例时间常数计算:振荡频率6MHz,机器周期Tc为Tc=12/6×106=2×10-6s,设置初值为x:基本定时时间为100ms,于是(216-x)*(2×10-6)=100×10-3x=216-50×103=15536=3CB0H预置:(TH0)=3CH,(TL0)=0B0H例6利用定时器测定下图所示波形的一个周期的长度。(二)定时器/计数器的应用举例②计数器设置:T1设为计数器,计数值为2。当计数1时,启动定时器;当计数2时,中断计数器T1,并停止T0的定时;T1的中断优先级高于定时器T0。T1的方式字为5H;计数初值为0FFFEH。预置:(TH1)=0FFH,(TL1)=0FEH。例6利用定时器测定下图所示波形的一个周期的长度。(二)定时器/计数器的应用举例

③编程:ORG000BH;定时器T0中断入口AJMPTIME0ORG001BH;定时器T1中断入口AJMPTIME1ORG××××HMOVR3,#0;清T0定时次数计数器SETBP3.2;置P3.2、P3.5为输入状态SETBP3.5

例6利用定时器测定下图所示波形的一个周期的长度。(二)定时器/计数器的应用举例

MOVTMOD,#59H

MOVTH0,#3CH;置定时器初值MOVTL0,#0B0HMOVTH1,#0FFH;置计数器初值MOVTL1,#0FEHSETBTR0;启动定时器、计数器SETBTR1

MOVIP,#08H;T1中断优先于T0例6利用定时器测定下图所示波形的一个周期的长度。③编程:续1(二)定时器/计数器的应用举例SETBET0;

允许T0、T1中断SETBET1CLR20H.0;清T0、T1中断软标志CLR20H.1

SETBEA;CPU开中断JNB20H.0,$;T0若未中断,则踏步等待JNB20H.1,$;T1若未中断,则踏步等待RET例6利用定时器测定下图所示波形的一个周期的长度。③编程:续2(二)定时器/计数器的应用举例TIME0:JB20H.0,LP;T0非初次中断,转MOVTMOD,#51H;取消门控方式SYTB20H.0

;置T0中断软标志

LP:MOVTH0,#3CH;重置定时器初值MOVTL0,#0B0HINCR3;软件计数器加1RETI例6利用定时器测定下图所示波形的一个周期的长度。③编程:续3(二)定时器/计数器的应用举例TIME1:CLR20H.0;清除T0、T1中断软标志CLR20H.1CLRET0;禁止T0、T1中断CLRET1

CLREA;CPU关中断CLRTR0;关定时器,计数器CLRTR1

RETI

注:结果(R3)×100ms即为所测波形的周期。严格地讲还应加上T0中的内容,即[(T0)-3CB0H)]×2us例6利用定时器测定下图所示波形的一个周期的长度。③编程:续4(二)定时器/计数器的应用举例§6.280C51单片机的中断系统及其应用一、80C51单片机的中断系统二、80C51单片机的中断系统应用举例中断:程序在执行过程中,允许外部或内部事件打断它,使其转向为处理外部或内部事件的中断服务程序中去;完成中断服务程序后,CPU继续执行原来被打断的程序。这样的过程称为中断。如下图所示:概述一、80C51单片机的中断系统中断源:能产生中断的外部和内部事件。概述一、80C51单片机的中断系统

中断优先级:当几个中断源同时申请中断,CPU必须区分哪个中断源更重要,从而确定优先处理哪个事件,这就是中断优先级问题。当CPU正在处理某中断事件时,又有另一事件申请中断,CPU是否相应?

约定:高优先级的中断源可以中断CPU正在处理的低级的中断服务程序,这就是中断嵌套问题。概述一、80C51单片机的中断系统

80C51单片机有5个中断源,2个中断优先级,它的中断处理程序可实现两级嵌套,有较强的中断处理能力。单片机对中断系统的管理是通过相关的专用寄存器来实现的。概述一、80C51单片机的中断系统(一)中断源及相关的专用寄存器(二)单片机对中断请求的控制(三)单片机对中断的响应一、80C51单片机的中断系统1、80C51单片机的中断源80C51(一)中断源及相关的专用寄存器中断源中断服务程序入口中断标志优先级顺序0003HIE0高低定时器T0000BHTF00013HIE1定时器T1001BHTF1串行口中断0023HTI或RI中断源及相应的中断矢量和中断标志1、80C51单片机的中断源(一)中断源及相关的专用寄存器INT0INT12、定时器控制寄存器TCON定时器控制寄存器TCON的结构如下图所示TCONTF1TR1TF0TR0IE1IT1IE0IT0位地址8F8E8D8C8B8A8988复位/未溢出:0T1溢出中断:1T1中断标志位停T1计数:0启T1计数:1T1启停位复位/未溢出:0T0溢出中断:1停T0计数:0启T0计数:1T0中断标志位T0启停位0:INT1无中断请求1:INT1有中断请求0:INT1为电平触发1:INT1为边沿触发0:INT0无中断请求1:INT0有中断请求0:INT0为电平触发1:INT0为边沿触发(一)中断源及相关的专用寄存器2、定时器控制寄存器TCON

当定时器T0或T1定时到或计数满时(即由全“1”变为全“0”),溢出标志TF0或TF1被硬件置位,若中断是开放的,即可向CPU发出中断请求。CPU响应此中断时由内部硬件自动将标志TF0或TF1清“0”,控制转到相应中断入口。注意:TF0或TF1可由软件读写,软件写入与硬件置位、复位效果相同。定时器T0、T1中断(一)中断源及相关的专用寄存器(一)中断源及相关的专用寄存器2、定时器控制寄存器TCON外部中断INT0、INT1外部中断有两种触发方式:

在边沿触发方式下,有专门的中断请求标志IE0、IE1,当CPU响应时,内部硬件自动将IE0或IE1清“0”,控制转到相应的中断入口。沿(一)中断源及相关的专用寄存器3、串行口控制寄存器SCONSCON的结构如下图所示,其中RI/TI是串行口接收/发送中断标志SCONSM0SM1SM2RENTB8RB8TIRI位地址9F9E9D9C9B9A9998

0:无接收中断1:有接收中断0:无发送中断1:有发送中断在串行口一节中介绍(一)中断源及相关的专用寄存器3、串行口控制寄存器SCON

RI

接收中断标志。当串行口接收完一帧数据,该标志置“1”,CPU响应串行口中断后内部硬件不清除,必须通过软件清“0”。

(一)中断源及相关的专用寄存器3、串行口控制寄存器SCON

TI

发送中断标志。当串行口发送完一帧数据,该标志置“1”,CPU响应串行口中断后内部硬件不清除,必须通过软件清“0”。

(一)中断源及相关的专用寄存器3、串行口控制寄存器SCON注意:RI、TI的中断入口都是0023H,故CPU响应后转入0023H开始执行服务程序,首先必须判断是RI中断还是TI中断,然后进行相应服务。

在返回主程序之前需用软件清除RI或TI,否则会出现一次请求多次响应的错误。(一)中断源及相关的专用寄存器4、关于外部中断触发方式的说明

电平触发方式

CPU在每个机器周期的S5P2采样INT0和INT1的输入电平,在电平触发方式下,单片机中没有专门的中断请求标志,外部中断申请触发器的状态随着CPU在每个机器周期采样到的外部中断输入线的电平变化而变化,同时单片机响应中断后,也不能自动清除请求信号。(一)中断源及相关的专用寄存器4、关于外部中断触发方式的说明对触发信号的要求:触发信号低电平必须保持足够长的时间,直到CPU响应为止;但持续时间亦不能太长,在中断返回之前必须撤去。

电平触发方式(一)中断源及相关的专用寄存器4、关于外部中断触发方式的说明

电平触发方式

解决这个问题的方法有两种:

一是用具有相应功能的接口芯片,如8255在选通输入方式时,当外部数据被选通到其数据输入寄存器时,INTR变高,向80C51单片机发中断请求,当单片机读取8255输入数据寄存器中的内容后,INTR自动变低,INTX变高,撤消中断请求。80C51(一)中断源及相关的专用寄存器4、关于外部中断触发方式的说明

另一种方法是在单片机之外增设一个请求标志(使用触发器),如下图所示,再配合相应程序即可。

电平触发方式80C51(一)中断源及相关的专用寄存器4、关于外部中断触发方式的说明

电平触发方式外部设置标志的程序如下:MAIN:SETBP3.0CLRIT0SETBEX0SETBEAHERE:AJMPHERE(一)中断源及相关的专用寄存器

电平触发方式4、关于外部中断触发方式的说明WBINT:CLRP3.0MOVA,#0FFHMOVP1,AMOVA,P1SWAPAMOVP1,ASETBP3.0

RETI(一)中断源及相关的专用寄存器4、关于外部中断触发方式的说明

边沿触发方式

CPU在每个机器周期的S5P2采样INT0和INT1的输入电平,如果前一个周期采样到为高电平,接着的下一个周期采样到为低电平,则置位中断请求标志IE0或IE1(在TCON中),表示外部中断源正在向CPU申请中断,直到该中断被响应后,标志IE1或IE0才被硬件清“0”。1、中断使能控制

通过中断允许寄存器IE进行两级控制:总控位EA和各中断源允许位。IE各位安排如下图IEEAET2ESET1EX1ET0EX0位地址AFADACABAAA9A80:关INT0中断1:开INT0中断0:关T0中断1:开T0中断0:关INT1中断1:开INT1中断0:关T1中断1:开T1中断0:关串行口中断1:开串行口中断0:关T2中断1:开T2中断0:关CPU中断1:开CPU中断(二)80C51单片机对中断请求的控制(二)80C51单片机对中断请求的控制2、中断优先级控制80C51单片机对中断优先级的控制也分为两级:第一级软件控制,由中断优先级寄存器IP的某位状态为1或0决定相应中断源为高优先级或低优先级。第二级硬件控制,即由硬件查询电路决定。(二)80C51单片机对中断请求的控制2、中断优先级控制IP各位的定义如下图所示(二)80C51单片机对中断请求的控制2、中断优先级控制

对于同一优先级的各中断源的优先顺序,由内部硬件查询电路规定为:INT0T0INT1T1串行口中断RI/TIT2(二)80C51单片机对中断请求的控制3、中断系统结构示意图(三)80C51单片机对中断的响应1、中断响应的条件

单片机在每个机器周期对所有的中断源进行顺序检测,当发现有中断源请求,便根据下列条件决定是否响应。80C51单片机中断响应条件是:中断源有请求,中断允许寄存器IE相应位置“1”,CPU开中断(EA=1)且:(三)80C51单片机对中断的响应(1)

CPU不在处理同级的或更高优先级的中断;(2)现行的机器周期是所执行指令的最后一个机器周期;(3)

CPU正在执行的指令不是RETI或任何访问IE/IP的指令。

同时满足上述三个条件的情况下,80C51单片机才可响应中断源的请求。1、中断响应的条件(三)80C51单片机对中断的响应2、中断响应的过程

当单片机判明有中断请求,并满足响应条件时,便在下一个机器周期的S1状态开始响应最高优先级的中断源的请求。在响应中断的过程中,80C51单片机必须做以下三件事:(三)80C51单片机对中断的响应2、中断响应的过程

(1)将相应的优先级状态触发器置位(指明CPU开始处理的中断优先级别)。(2)清中断标志(TI和RI除外)。(3)执行一个硬件子程序:把中断的断点地址,也就是当前程序计数器PC中的内容压入堆栈,将相应的中断服务程序的入口送给PC。(三)80C51单片机对中断的响应3、外部中断的响应时间80C51单片机在每个机器的S5P2期间对INT0和INT1进行检测,如果发现有中断请求,又能满足响应的条件,便在下一个机器周期的S1状态开始应答:先执行一个内部硬件子程序--占用两个机器周期,因此从外部发出中断请求信号到执行中断服务程序的第一条指令至少需要三个完整的机器周期。(三)80C51单片机对中断的响应3、外部中断的响应时间讨论:(1)如果现行的机器周期是本指令的最后一个周期,又无前述的其它响应条件所阻止,CPU马上响应,需要三个机器周期。(三)80C51单片机对中断的响应3、外部中断的响应时间

(2)如果现行的机器周期不是本指令的最后一个机器周期,则可能会增加1~3个周期,因为80C51单片机指令最长执行时间为4个机器周期,这样响应时间为4~6个机器周期。讨论:(三)80C51单片机对中断的响应3、外部中断的响应时间讨论:(3)如果CPU正在执行的是RETI或是访问IE、IP寄存器的指令,则单片机需要再执行一条其它指令才会响应中断。当然这条指令可以是1~4个机器周期,所以这种情况下,可能会增加5个机器周期。(三)80C51单片机对中断的响应3、外部中断的响应时间讨论:

所以,一个单级外部中断,单片机响应时间为3~8个机器周期,如果fosc=6MHz,则响应时间为6~16us。中断系统的应用主要是编程,下面先说明设计中断服务程序时应注意的一些问题。80C51单片机有5个中断源,由4个特殊功能寄存器TCON、SCON、IE和IP进行管理和控制。其中TCON和SCON用来锁存5个中断源的中断请求信号。关于中断程序的编制二、80C51单片机的中断系统应用举例关于中断程序的编制

IE用来控制CPU和5个中断源请求允许和禁止。IP用来对5个中断源的优先级别进行管理。TCON的第0位(IT0)和第2位(IT1),用来控制外部中断的触发方式。80C52单片机增加了一个T2。由T2CON进行控制,中断请求标志位是T2CON的第7位(TF2)和第6位(EXF2),使能控制是IE的第5位(ET2),优先级控制是IP寄存器的第5位(PT2)。二、80C51单片机的中断系统应用举例关于中断程序的编制从软件角度看,中断控制实质上就是对这几个寄存器的管理和控制,主要项目有:①

CPU开中断与关中断。②

某一中断源中断请求的允许与禁止。③各中断源优先级别的设定。④外部中断请求的触发方式的设定。二、80C51单片机的中断系统应用举例关于中断程序的编制(1)中断控制程序

中断程序一般包含中断控制程序和中断服务程序两部分。

中断控制程序即中断初始化程序,一般不独立编写,而是包含在主程序中,根据需要通过几条指令来实现。二、80C51单片机的中断系统应用举例关于中断程序的编制例如设置INT0和串口中断为高优先级INT1为低优先级。屏蔽T0和T1中断请求的程序。编程如下:MOVIP,#00010001BMOVIE,#10010101B(1)中断控制程序二、80C51单片机的中断系统应用举例关于中断程序的编制(2)中断服务程序

中断服务程序是为中断源的特定事件服务的独立程序段,以中断返回指令RETI结束。在程序存储器中有五个固定的单元作为中断服务程序的入口,即是0003H、000BH、0013H、001BH及0023H单元。每两个入口地址之间间隔8个单元。二、80C51单片机的中断系统应用举例如果中断服务程序少于8个字节,可以放在其中。否则,应将中断服务程序存放在程序存储器的其它部位,而在相应入口处安排一条无条件转移指令。这样,当CPU响应中断后,就执行该无条件转移指令,转向实际的中断服务程序的入口。二、80C51单片机的中断系统应用举例关于中断程序的编制(2)中断服务程序二、80C51单片机的中断系统应用举例关于中断程序的编制(2)中断服务程序中断服务程序和子程序一样,也有一个保护/恢复断点和现场的问题。断点的保护是由硬件电路自动实现;而现场保护却要由中断服务程序来进行。因此在编写中断服务程序时必须考虑保护现场的问题,方法与子程序相同。二、80C51单片机的中断系统应用举例关于中断程序的编制(2)中断服务程序在允许中断嵌套的情况下,为了不至于在保护现场或恢复现场时,由于CPU响应其它中断请求而使现场被破坏。在编写程序时,应在保护现场和恢复现场之前,关闭CPU中断;在保护现场和恢复现场之后,再根据需要使CPU开中断。下面通过具体例子来说明中断程序的设计方法。二、80C51单片机的中断系统应用举例例1利用80C51单片机的外部中断实现系统的单步操作。解:一般单片机的开发系统都有单步运行用户程序的功能。在调试程序时,每按一次单步执行键,CPU就执行一条用户程序的指令,之后进入暂停等待状态,还显示累加器中的内容和下条指令的地址。这是利用单片机的外部中断,配上简单硬件(如下图),再经适当编程实现的。二、80C51单片机的中断系统应用举例例1下图中,INT0设为电平触发方式,INT0引脚平时为低电平,单片机处于中断服务中。用户一次按键出现一个正脉冲,CPU在中断服务程序中检测到一个正脉冲便返回主程序执行一条用户程序指令,又得响应中断,等待用户按键,实现了单步操作。利用80C51单片机的外部中断实现系统的单步操作。二、80C51单片机的中断系统应用举例例1利用80C51单片机的外部中断实现系统的单步操作。二、80C51单片机的中断系统应用举例例1利用80C51单片机的外部中断实现系统的单步操作。初始化程序为:

CLR

IT0

;设INT0为电平触发SETB

EA

;CPU开中断SETB

PX0

;置为高中断优先级SETB

EX0

;允许INT0中断二、80C51单片机的中断系统应用举例例1利用80C51单片机的外部中断实现系统的单步操作。中断服务程序

:┋;显示必要的数据HIGH:JNBP3.2,HIGH;等待引脚为高电平LOW:JB

P3.2,LOW;再等待引脚为低电平RETI

;中断返回例2利用80C51将开关所设置的数据读入后驱动发光二极管。将下图中P1口的P1.7~P1.4设置成输入,P1.3~P1.0设置成输出。现要求利用80C51将开关所设置的数据读入后分别通过P1.3~P1.0输出,驱动发光二极管,以检查P1.7~P1.4输入电平的情况。要求采用外部中断方式,每边沿触发一次,完成一次读、写任务。二、80C51单片机的中断系统应用举例例2利用80C51将开关所设置的数据读入后驱动发光二极管。二、80C51单片机的中断系统应用举例例2利用80C51将开关所设置的数据读入后驱动发光二极管。二、80C51单片机的中断系统应用举例程序清单如下:

ORG0000HAJMPGAFN

;转向主程序

ORG0003H

;外部中断0入口地址

AJMPPAUSEO

;转向中断服务程序解:由图可见,中断请求从INT0输入,并采用了去抖动电路。当P1.3~P1.0的任何一位输出为1时,就会使相应的发光二极管发光。例2利用80C51将开关所设置的数据读入后驱动发光二极管。二、80C51单片机的中断系统应用举例主程序:

ORG1100HGAFN:SETBEA

;允许中断DEFG:AJMPDEFG

;等待中断例2利用80C51将开关所设置的数据读入后驱动发光二极管。二、80C51单片机的中断系统应用举例中断服务程序:

ORG1200HPAUSEO:MOVA,#0FFH

;设P1为输入状态MOVP1,AMOVA,P1

;读开关数据SWAPA

;(A)的高4位与低4位内容交换MOVP1,A

;驱动LED发光RETI例3二、80C51单片机的中断系统应用举例80C51利用查询法扩展外部中断源。如果80C51单片机应用系统需要的外部中断源较多时,可以采用查询法来扩展外部中断源。下图为支持电路。例3二、80C51单片机的中断系统应用举例利用查询法扩展外部中断源。解:XI1~XI4经由4个OC门电路组成“线或”电路,“线或”后接到INT1端。这就是说,如果在4个外中断源XI1~XI4中有1个或几个出现高电平,则“线或”输出为低电平,从而引起INT1中断。由于XI1~XI4还分别与P1.0~P1.3相连,因此通过查询P1.0~P1.3便可识别中断源。例3二、80C51单片机的中断系统应用举例利用查询法扩展外部中断源。EXINT:PUSHPSWPUSHACC下面给出INT1的中断服务程序:JBP1.0,SAV1JBP1.1,SAV2JBP1.2,SAV3JBP1.3,SAV4DISUB:POPACCPOPPSWRETI例3二、80C51单片机的中断系统应用举例利用查询法扩展外部中断源。SAV1:…AJMPDISUBSAV2:…AJMPDISUBSAV3:…AJMPDISUBSAV4:…AJMPDISUB例4二、80C51单片

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论