您好,欢迎访问三七文档
当前位置:首页 > 金融/证券 > 金融资料 > 第五章定时计数器与中断系统
单片机应用技术第五章定时/计数器与中断系统5.1定时/计数器结构特点及控制5.2中断系统结构及管理5.3定时/计数器及中断系统综合应单片机应用技术5.1定时/计数器结构特点及控制5.1.1定时/计数器结构5.1.2定时/计数器工作方式5.1.3定时/计数器控制寄存器5.1.4定时/计数器常数的计算返回本章首页单片机应用技术5.1.1定时/计数器结构定时/计数器简称定时器,8051单片机有2个16位的定时/计数器:定时器0(T0)和定时器1(T1)。它们都有定时器或事件计数的功能,可用于定时控制、延时、对外部事件计数和检测等场合。T0由2个特殊功能寄存器TH0和TL0构成,T1则由TH1和TL1构成。作计数器时,通过引脚T0(P3.4)和T1(P3.5)对外部脉冲信号计数,当输入脉冲信号从1到0的负跳变时,计数器就自动加1。计数的最高频率一般为振荡频率的1/24。返回本节单片机应用技术5.1.2定时/计数器工作方式每个定时/计数器还有4种工作方式,也就是每个定时器可构成4种电路结构模式。在方式0、1和2,T0和T1的工作方式相同,在方式3,两个定时器的方式不同。下面以T1为例,分述各种工作方式的特点和用法。单片机应用技术1.方式0工作方式0是13位定时/计数器。THx全部8位和TLx低5位(TLx的高3位无效)组成13位加1计数器。最大计数值为213 = 8192个脉冲。方式0采用13位计数器是为了与其早期的产品MCS-48系列单片机兼容,其初值的计算较麻烦,如果不是为了兼容,在实际应用中可不必使用,而采用方式1。方式0的全部功能,方式1都可以代替。单片机应用技术1.方式0图5-1定时/计数器T1(T0)工作模式0单片机应用技术2.方式1方式1逻辑结构如图5-2所示。THx和TLx组成了16位加法计数器。其中,THx为高8位,TLx为低8位。当TLx低8位计数溢出时自动向THx进位,而THx溢出时向中断位TFx进位(硬件自动置位),并申请中断。图5-2定时/计数器T1(T0)工作模式1单片机应用技术2.方式1当=0时,多路开关连接12分频器输出,计数器对机器周期计数,此时为定时器。当=1时,多路开关与Tx相连,外部计数脉冲由Tx脚输入,当外部信号电平发生由1到0的负跳变时,计数器加1,此时为计数器。方式1下的计数器,其最大计数脉冲为65536。因此其最长定时时间(晶振为12MHz时)为:T×65536= 65.536ms,其中T为机器周期,是晶振周期的12分频,当晶振为12MHz时T=1s。TC/TC/单片机应用技术当GATE=0时,经非门后,或门输出1,这样TRx将直接控制定时器的启动和关闭。这时如果TRx=1,则接通控制开关,定时器从初值开始计数直至溢出。溢出时,16位计数器为0,TFx置位,并申请中断。如要循环计数,则计数器需重置初值,且需用软件将TFx复位。TRx=0,则与门被封锁,控制开关被关断,停止计数。当GATE=1时,与门的输出由输入INTx的电平和TRx位的状态来确定。这时若TRx=1,则引脚INTx可直接开启或关断计数器:当INTx为高电平时,允许计数;低电平时则停止计数。若TRx=0,则与门被封锁(即输出为0),控制开关被关断,不能计数。2.方式1单片机应用技术以上控制启动、停止计数方式总结如下:1)非门控方式当GATE=0时,控制权由TRx决定,TRx=1计数启动,TRx=0计数停止。这种方式实际上是用软件控制启动、停止计数的。2)门控方式当GATE=1、TRx=1时,控制权由INTx决定,INTx=1计数启动,INTx=0计数停止。这种方式实际上是用外部硬件INTx引脚控制启动、停止计数的。2.方式1单片机应用技术3.方式2定时/计数器工作于方式2时,其逻辑结构如下图所示。由图可知方式2时,16位加法计数器的THx和TLx具有不同功能,其中TLx是8位计数器,THx是重置初值的8位缓冲器。在程序初始化时,TLx和THx由软件赋予相同的初值。一旦TLx计数溢出,TFx将被置位,同时,THx中的计数初值自动装入TLx,从而进入新一轮计数,如此循环不止。单片机应用技术3.方式2方式0和方式1用于循环计数时,每次计满溢出后,计数器都复位为0,要进行新一轮计数还须重置计数初值。这不仅导致编程麻烦,而且影响定时时间精度。方式2具有初值自动装入功能,避免了上述缺陷,适合用作较精确的定时脉冲信号发生器。方式2最大计数值为256,最长定时时间(晶振12MHz时T = 1s)为256s。单片机应用技术4.方式3返回本节定时/计数器工作于方式3时,其逻辑结构如图所示。由图可知,方式3时,T0被分解成两个8位定时/计数器,其中:TL0作为一个定时/计数器,占用了原定时/计数器T0的控制位、引脚和中断源,即GATE、TR0、TF0和T0(P3.4)引脚、INT0(P3.2)引脚。除计数位数不同于方式0、方式1外,其功能、操作与方式0、方式1完全相同,可定时亦可计数。单片机应用技术4.方式3返回本节TH0作为另一个定时/计数器,占用原定时/计数器T1的控制位TF1和TR1,同时还占用了T1的中断源,其启动和关闭仅受TR1置1或清0控制。TH0只能对机器周期进行计数,因此,TH0只能用作简单的内部定时,不能用作对外部脉冲进行计数,是定时器T0附加的一个8位定时器。因定时/计数器T1的控制位TF1和TR1被TH0计数时占用,所以T1无工作方式3。一般情况下,方式3用于串行通信波特率发生时选用。单片机应用技术5.1.3定时/计数器控制寄存器定时器共有2个控制寄存器TMOD和TCON,由软件写入TMOD和TCON两个8位寄存器,设置各个定时器的操作模式和控制功能。单片机应用技术1.工作模式控制寄存器—TMOD(89H)GATEC/TM10MGATEC/T1M0M控制T1控制T089H和T类同01M0M00011011方式方式0方式1方式2方式301定时器模式计数器模式01与INT无关00与INT有关图5-5定时器工作模式寄存器TMOD单片机应用技术2.定时器控制寄存器—TCON(88H)TCON位地址0DD1D2D3D4D5D6D7IT0IE0IT11IETR0TF0TR1TF188898A8B8C8D8E8F见下一节{00:停T计数01:启T计数00:无T中断(硬件复位){1:有T溢出中断00:无T中断(硬件复位)10:停T计数{1:有T溢出中断1:启T计数{111图5-6定时器工作模式寄存器TCON返回本节单片机应用技术由于MCS-51单片机的定时/计数器是可编程的,因此在使用之前需要进行初始化。3.定时/计数器的编程和应用举例在编程时主要注意两点:第一要能正确写入控制字;第二要进行计数初值的计算。一般情况下,编程包括以下几个步骤:(1)确定工作方式,即对TMOD寄存器进行赋值。(2)计算计数初值,并写入寄存器TH0、TL0或TH1、TL1中。(3)需要时,置位ETx以允许定时/计数器中断,置位EA以开放中断。(4)置位TRx启动计数。单片机应用技术一般的程序如下:MOVTMOD,#xxH;选择方式MOVTHx,#xx;装入Tx计数初值MOVTLx,#xxSETBEA;开Tx中断SETBETx;允许Tx定时器中断SETBTRx;启动Tx定时器3.定时/计数器的编程和应用举例单片机应用技术5.1.4定时/计数器常数的计算1.计数器初值的计算把计数器计满为零所需要的计数值设定为C,计数初值设定为TC,由此可得到公式:TC=M-C式中,M为计数器模值,该值和计数器工作方式有关。在方式0时M为213;在方式1时M为216;在方式2和方式3时M为28。单片机应用技术2.定时器初值的计算返回本节在定时器模式下,计数器由单片机主脉冲经12分频后计数。因此,定时器定时时间T的公式:T=(M-TC)T计数上式也可写成:TC=M-T/T计数式中,M为模值,和定时器的工作方式有关;T计数是单片机振荡周期TCLK的12倍;TC为定时器的定时初值。5.1.4定时/计数器常数的计算单片机应用技术5.1.5定时/计数器应用举例例1:如下图所示,已知MCS-51单片机系统晶振频率为12MHz,试编写程序,用定时器T0,工作方式2,使P1.0引脚输出如下周期方波。分析:每隔0.1ms改变一次P1.0的输出状态,即形成周期方波,用T0方式2,定时实现。图5.1.1定时器输出图单片机应用技术计算初值:C=28-t/T=256-(0.0001)/10-6=256-100=156= 9CH程序如下:ORG0000HAJMPMAINORG000BH;T0中断的硬件入口地址CPLP1.0;取反,产生方波RETI;中断返回ORG0030HMAIN:MOVTMOD,#02H;中断方式MOVTL0,#9CH;计数初值MOVTH0,#9CH单片机应用技术SETBEA;开放总中断SETBET0;开放T0中断SETBTR0;启动定时器T0SJMP$;等待定时中断,;相当于执行其它任务END需要说明的是,例题程序在定时器初始化之后进入主程序,用执行SJMP$等待定时器溢出产生中断。这是主程序处于无事状态等待中断的一种方法。在实际系统中的等待期间CPU完全可以去做其它事情。单片机应用技术例2:如图所示,用P1.7驱动LED亮1s、灭1s地闪烁,设晶振频率为12MHz。分析:MCS-51定时器最长的定时时间达不到1s,这里采用了一种长定时方法:先做一个10ms,即0.01s的定时,增加一个软件计数器(如R7),记录0.01s定时中断次数,计满100个中断为1s。图5.1.2定时器电路图单片机应用技术计数初值:C = 216-t/T = 65536 -0.01/10-6 = D8F0H程序如下:ORG0000HAJMPMAIN;转主程序ORG001BH;T1中断的硬件入口地址AJMPPT1INT;跳转到PT1INTORG0030H;主程序START:MOVR7,#64H;中断次数计数器;R7 = 100MOVTMOD,#10H;中断方式MOVTL1,#0F0H;计数初值MOVTH1,#0D8H单片机应用技术SETBEA;开放总中断SETBET1;开放T1中断SETBTR1;启动定时器T1SJMP$;等待定时100ms的中断PT1INT:MOVTL1,#0F0H;恢复计数初值MOVTH1,#0D8HDJNZR7,PEND;判断是否发生了;100次0.01s的中断MOVR7,#100;恢复R7 = 100,;汇编软件允许用十;进制数据CPLP1.7;1s后,将P1.7反相PEND:RETI;中断返回END单片机应用技术此例中的中断服务程序超过了8个字节,所以在T1中断的硬件入口地址001BH处放了一条跳转程序AJMPPT1INT,将中断服务程序放在了其它地址区域。单片机应用技术分析:采用T1的门控制方式,使T1的启动受的控制,当GATA=1,TR1=1时,一旦引脚输入高电平,T1就启动计数,直至出现低电平,停止计数。为了确保真正从高电平上升沿开始计数,T1的计数要先等到出现一个高电平后,下一个高电平到来时才开始进行,见图5.1.3。INT1INT1例3:引脚输入被检测信号,用门控方式测量正脉冲宽度(设脉宽小于65.5ms)。INT1单片机应用技术图5.1.3定时器例3图单片机应用技术程序主要部分如下:START:MOVTMOD,#90H;T1,门控方式、定时器,;工作方式1MOVTL1,#00H;计数初值MOVTH1,#00HWAIT1:JBP3.3,WAIT1;检测到的第一个高电平放;弃,等待INT1低。如果没有;这条语句,可能计数不是;从正脉冲开始瞬间计数的为;计SETBTR1;数做好准备WAIT2:JNBP3.3,WAIT2;等待下一个高电平的到来WAIT3:JBP3.3,WAIT3;INT1高电平时计数,低电;平时停止CLRTR1;停止计数MOVR2,TL1;将计数结果送R2、R3以便进一步处理MOVR3,TH1单片机应用技术注意:本例是在停止了计数后读取计数值的,这时计
本文标题:第五章定时计数器与中断系统
链接地址:https://www.777doc.com/doc-3154613 .html