第4章定时器/计数器与中断系统北京航空航天大学出版社第4章单片机的定时/计数器4.2定时/计数器的控制4.3定时/计数器的工作方式4.1定时/计数器的基本概念及结构4.4定时/计数器的应用SINGLECHIP4.6中断的控制4.5中断系统基本概念4.8中断系统的应用4.7中断响应4.1定时/计数器的基本概念及结构4.1.1基本概念80C51单片机中的两个定时器/计数器都为16位加1计数器,它们是同一结构,计数器记录的是单片机外部发生的事件,一般是由外部电路提供计数信号;而定时器是由单片机内部提供的稳定脉冲(振荡脉冲的12分频)为计数信号。4.1.2定时/计数器结构及工作原理定时器/计数器是由两个独立的8位的计数器(其中TH1,TL1是T1的计数器,TH0,TL0是T0的计数器,THX、TLX均属于SFR)拼装而成。定时/计数器本质上都是16位加1计数器。其计数脉冲有两个来源,一个是来自内部的机器周期信号(机器周期=12*振荡周期),另一个是由引脚P4.4(T0)或P4.5(T1)输入的外部脉冲信号。当定时/计数器设置为定时工作方式时,计数器对内部机器周期计数,每过一个机器周期,计数器加1,直至计满溢出。续:51核单片机的一个机器周期由12个振荡脉冲组成,所以,计数频率。如果单片机系统采用12MHz晶振,则计数周期为:这是最短的定时周期,适当选择定时器的初值可获取各种定时时间。如当计数值从0计到1000时,则定时时间为1ms。osccf121fs112/110121T6定时计数器结构图CPU_____INT1(P3.3)_____INT0(P3.2)中断TCON(88H)T1(P3.5)定时器T1定时器T0TH1TL1TH0TL0TMOD(89H)溢出启动(8DH)(8BH)(8CH)(8AH)7070启动内部总线溢出工作方式工作方式T0(P3.4)77004.2定时/计数器的控制4.2.1定时器的工作方式寄存器TMODM1、M0:工作方式选择位。定时器/计数器有四种工作方式,由这两位来定义。说明::定时或计数功能选择位。=1时,为计数器功能;=0时,为定时器功能。一个定时/计数器同一时刻要么作定时用,要么作计数用,不能同时使用。GATE:定时器/计数器门控位,用来设置定时/计数器的启动方式。GATE=0,只要设置运行控制位TR0或TR1为1,就可以启动定时/计数器T0或T1工作(简称为软启动);GATE=1时,除了要设置TR0或TR1为1外,还要使对应的外部中断请求引脚或为高电平,才能启动定时/计数器(即允许外中断、启动定时器,简称软硬结合启动)。T/C4.2.2定时器控制寄存器TCON特殊功能寄存器TCON用于控制定时器的启动、停止,标志定时器的溢出和中断情况。它的字节地址为88H,可以进行位寻址。其中位0~4与外部中断有关,与定时器有关的各位定义如下。说明:TR0:T0的运行控制位。该位置1或清0用来实现启动计数或停止计数。TF0:T0的溢出中断标志位。当T0计数溢出时由硬件自动置1;在CPU响应中断后由硬件自动清0。TR1:T1的运行控制位,功能同TR0。TF1:T1的溢出中断标志位,功能同TF0。TMOD和TCON寄存器在复位时其每一位均自动清零。启动定时器或清溢出标志位都可以用位操作指令,如“SETBTR1”,“CLRTF1”分别表示启动T1及清T1溢出标志。4.3定时/计数器的工作方式80C51单片机定时/计数器T0有4种工作方式,而T1只有4种工作方式(无工作方式4),T0与T1的4种工作方式(方式0、1、2)基本相同,下面仅以T0为例分别介绍这4种工作方式。4.3.1工作方式0当M1M0=00时,定时/计数器工作于方式0,构成一个14位定时器/计数器。此时16位加法计数器(TH0和TL0)只用了14位,即TH0的高8位与TL0的低5位(高4位未用)。当TL0低5位溢出时自动向TH0进位,而TH0溢出时向中断位TF0进位(硬件自动置位),并申请中断。4.3.2工作方式1方式1构成一个16位定时器/计数器。由图可知:当M1M0=01时,定时/计数器工作于方式1,构成一个16位定时器/计数器。16位加法计数器由两个8位寄存器TH0和TL0组成。当TL0计满溢出时自动向TH0进位,而TH0溢出时向中断位TF0进位。当=0时,多路开关连接振荡器12分频输出,T0对机器周期计数,此时,T0为定时器。其定时时间为:当=1时,多路开关与T0(P4.3)相连,外部计数脉冲由T0脚输入,当外部信号电平发生由1到0的负跳变时,计数器加1,此时,T0为计数器。当GATE=0时,或门被封锁,信号无效。当GATE=1时,与门的输出由的输入电平和TR0位的状态来确定。12065536120时钟周期初值)(时钟周期初值)(TTM例4.1用定时器1方式0实现实训5步骤1)中1s的延时。1s延时子程序如下:DELAY:MOVR4,#200MOVTMOD,#00HMOVTH1,#64HMOVTL1,#18HSETBTR1LP1:JBCTF1,LP2SJMPLP1LP2:MOVTH1,#64HMOVTL1,#18HDJNZR4,LP1RET4.3.3工作方式2振荡器÷12TL0(8位)TL0(8位)中断TF0重新输入_C/T=0_C/T=1控制T0TR0GATE&≥11INT0例4.2试用定时器1方式2实现1s的延时。1s延时子程序如下:DELAY:MOVR5,#28HMOVR6,#64HMOVTMOD,#20HMOVTH1,#06HMOVTL1,#06HSETBTR1LP1:JBCTF1,LP2SJMPLP1LP2:DJNZR6,LP1MOVR6,#64HDJNZR5,LP1RET4.3.4工作方式3振荡器÷12112fOSC112fOSCTH0(8位)中断TF0_C/T=0_C/T=1控制T0TL0(8位)112fOSCTR0GATE&≥11INT0TR1TF1中断4.4定时/计数器的应用4.4.1定时器/计数器的初始化步骤:(1)确定工作方式——对TMOD赋值(2)预置定时或计数的初值——直接将初值写入TH0、TL0或TH1、TL1中(3)根据需要开启定时器/计数器中断——直接对IE寄存器赋值(4)启动定时器/计数器工作——将TR0或TR1置“1”2、计数器初值的计算定时器/计数器可用软件随时随地起动和关闭,起动时它就自动进行加“1”计数,一直到计满,即全为“1”,若不停止,计数值从全“1”变为全“0”,同时将计数溢出位置“1”并向CPU发出溢出中断申请。设计数器从初值开始作加1计数到计满为全1所需要的计数值设定为C和计数初值设定为X,由此便可得到如下的计算通式:初值X=M-计数值C式中,M为计数器模值,该值和计数器工作方式有关。在方式1时M为216;在方式2和方式4时M为28。例1:在定时器模式下,计数器由单片机脉冲经12分频后计数。因此,定时器定时时间T的计算公式为:T=计数值C×机器周期=(M—初值X)12/fOSC(µs)例1:设方式1工作时,定时时间为1ms,时钟振荡频率为6MHz,(216—X)12/6µS=1ms=1000µSX=216—500=65046化成16进制数,高8位送至TH0,低8位送至TL0,可用下列指令实现。MOVDPTR,#65046;将10进制数转化为16进制数MOVTL0,DPL;低8位送TL0寄存器MOVTH0,DPH;高8位送TH0寄存器例2:若单片机时钟频率fOSC为12MHz,请计算定时2ms所需的定时器初值。解:由于定时器工作在方式2和方式4下时的最大定时时间只有0.256ms,因此要想获得2ms的定时时间定时器必须工作在方式0或方式1。若采取方式1,则有:TC=216—2mS/1µs=64546=F840H即:TH0应装F8H;TL0应装40H。例3:设T1作定时器,以方式1工作,定时时间为10mS;T0作计数器,以方式2工作,外界发生一次事件即溢出。解:T1的时间常数为:(216-X)×2µs=10msX=EC78H初始化程序:MOVTMOD,#16HMOVTL0,#0FFH;T0初值送TL0MOVTH0,#0FFH;T0初值送TH0MOVTL1,#78H;T1初值(低8位)送TL1MOVTH1,#0ECH;T1初值(高8位)送TH1SETBTR0;置TR0为1允许T0启动计数SETBTR1;置TR1为1允许T1启动计数4.4.2定时器/计数器的应用举例例1、广告灯的左移右移1、功能说明①开始时P1.0亮,延时0.2秒后左移至P1.1亮,如此左移7次后至P1.7亮,再延时0.2秒右移至P1.6亮,如此右移7次后至P1.0亮。②延时时间0.2秒,使用TIMER0在MODE0下工作(时钟频率fOSC为12MHz)。程序见下页.程序:ORG00H;起始地址MOVTMOD,#01H;设定TIMER0工作在MODE1START:CLRC;C=0MOVA,#0FFH;ACC=FFH,左移初值MOVR2,#08;R2=08,设左移8次LOOP:RLCA;左移一位MOVP1,A;输出至P1MOVR4,#20;0.2秒ACALLDELAY;10000微妙DJNZR2,LOOP;左移8次MOVR2,#07;R2=07,设右移7次LOOP1:RRCA;右移一位MOVP1,A;输出至P1续:MOVR4,#20;0.2秒ACALLDELAY;10000微妙DJNZR2,LOOP1;右移7次JMPSTARTDELAY:SETBTR0;启动TIMER0开始计时AGAIN:MOVTL0,#0F0H;设定TL0的值MOVTH0,#0D8H;设定TH0的值LOOP1:JBCTF0,LOOP4;TF0是否为1,是则跳至LOOP4,并清楚TF0JMPLOOP1;不是则跳到LOOP1LOOP4:DJNZR4,AGAIN;R4是否为0?不是;则跳到AGAINCLRTR0;是则停止TIMR0计数RETEND4.1.1中断的基本概念中断表现为正常的工作过程被突发的事件打断了。中断源:可以引起中断的来源。AT89S51一共有5个:两个外部中断,两个定时/计数器中断,一个串行口中断。中断的优先级与嵌套优先级的问题不仅仅发生在两个中断同时产生的情况,也发生在一个中断已产生,又有一个中断申请的情况,当CPU正在处理一个优先级低的中断请求时,又发生另一个优先级比它高的中断请求,CPU暂停正在处理的中断源的处理程序,转去处理优先级高的中断请求,待处理完以后,再回到原来正在处理的低级中断程序,这种高级中断源能中断低级中断源的中断处理称为中断嵌套。中断的响应过程1、保护断点,即保存下一条将要执行的指令的地址,方法是把这个地址送入堆栈。2、寻找中断入口,根据5个不同中断源所产生的中断,查找5个不同的入口地址。3、执行中断处理程序。4、中断返回:执行完中断程序后返回到主程序继续执行。4.1.2中断源与中断标志1、中断系统的组成AT89S51单片机中断系统有与中断有关的寄存器,中断入口(矢量地址)、顺序查询逻辑电路等组成。具体有5个中断源,提供两个中断优先级(能实现两级中断嵌套),4个用于中断控制的寄存器IE、IP、TCON和SCON。每一个中断源的优先级的高低可以通过编程来设定。中断源的中断请求是否得到响应,受中断允许寄存器IE的控制各中断源的优先级可由中断优先级寄存器IP中的各位来确定同一优先级中的各中断源同时请求中断时,由内部的查询逻辑来确定响应的次序。中断系统结构图:1IT0=0IT0=1INT0T0T1TXRXTCONIEEX0EAIPPX01111100000PSPT1PX1PT0SCON中断标志源允许总允许硬件查询矢量地址矢量地址自然优先级自然优先级IT1=0IT1=1INT1IE0TF0IE1TF1TIRIEX0EX1≥1ET1ES优先级高级中断请求PC低级中断请求PC2、中断源凡是能引起中断的设备或事件均称为中断源。分成外部中断源和内部中断源。(1)外部中断源2个::来自P3.2引脚上的外部中断请求(