资源描述
5 定时器定时器/计数器及其应用计数器及其应用.1 定时器定时器/计数器工作原理计数器工作原理1 1基本概念基本概念(1 1)计数)计数:计数是指对外部事件的个数进行计量。其实质就计数是指对外部事件的个数进行计量。其实质就是对外部输入脉冲的个数进行计量。实现计数功能的器件是对外部输入脉冲的个数进行计量。实现计数功能的器件称为计数器。称为计数器。(2 2)定时:)定时:8051单片机中的定时器和计数器是一个部件,只单片机中的定时器和计数器是一个部件,只不过计数器记录的是外界发生的事件,而定时器则是由单不过计数器记录的是外界发生的事件,而定时器则是由单片机内部提供一个非常稳定的计数源进行定时的。这个计片机内部提供一个非常稳定的计数源进行定时的。这个计数源是由单片机的晶振经过数源是由单片机的晶振经过12分频后获得的一个脉冲源。分频后获得的一个脉冲源。所以定时器计数脉冲的时间间隔与晶振有关。所以定时器计数脉冲的时间间隔与晶振有关。(3 3)定时的种类)定时的种类 软件定时:软件定时:利用执行一个循环程序进行时间延迟。其特点是利用执行一个循环程序进行时间延迟。其特点是定时时间精确,不需外加硬件电路,但占用定时时间精确,不需外加硬件电路,但占用CPU时间。因此时间。因此软件定时的时间不宜过长。软件定时的时间不宜过长。硬件定时:硬件定时:利用硬件电路实现定时。其特点是不占用利用硬件电路实现定时。其特点是不占用CPU时时间,通过改变电路元器件参数来调节定时,但使用不够灵活间,通过改变电路元器件参数来调节定时,但使用不够灵活方便。对于时间较长的定时,常用硬件电路来实现。方便。对于时间较长的定时,常用硬件电路来实现。可编程定时器:可编程定时器:通过专用的定时器通过专用的定时器/计数器芯片实现。其特计数器芯片实现。其特点是通过对系统时钟脉冲进行计数实现定时,定时时间可通点是通过对系统时钟脉冲进行计数实现定时,定时时间可通过程序设定的方法改变,使用灵活方便。也可实现对外部脉过程序设定的方法改变,使用灵活方便。也可实现对外部脉冲的计数功能。冲的计数功能。MCS-51单片机内部有两个单片机内部有两个16位可编程的定时器位可编程的定时器/计数器,简计数器,简称为称为T0和和T1,均可作定时器用也可计数器,它们均是二进制加,均可作定时器用也可计数器,它们均是二进制加法计数器,当计数器计满回零时能自动产生溢出中断请求,表法计数器,当计数器计满回零时能自动产生溢出中断请求,表示定时时间已到或计数已终止。适用于定时控制、延时、外部示定时时间已到或计数已终止。适用于定时控制、延时、外部计数和检测等。计数和检测等。计数器:计数器:对引脚对引脚T0(P 3.4)和)和T1(P3.5.)输入的外部脉冲信号)输入的外部脉冲信号计数,当输入脉冲信号从计数,当输入脉冲信号从1到到0的负跳变时,计数器就自动加的负跳变时,计数器就自动加1。计数的最高频率一般为振荡频率的计数的最高频率一般为振荡频率的1/24。定时器:定时器:对系统晶振振荡脉冲的对系统晶振振荡脉冲的12分频输出进行计数。分频输出进行计数。(1 1)定时器)定时器/计数器的结构计数器的结构组成:组成:16位加法计数器、工作方式寄存器位加法计数器、工作方式寄存器TMOD和控制寄存器和控制寄存器TCON。T0:TL0(低(低8位)和位)和TH0(高(高8位)位)T1:TL1(低(低8位)和位)和TH1(高(高8位)位)2MCS-51内部定时器/计数器 8051单片机内部的定时器单片机内部的定时器/计数器的结构如下图所示。计数器的结构如下图所示。(2)控制寄存器TCON (88H)TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0TF0/TF1:T0/1计数溢出标志位。可用于申请中断或供计数溢出标志位。可用于申请中断或供CPU查询。在进入中断服务程序时会自动清零;但在查询方式时查询。在进入中断服务程序时会自动清零;但在查询方式时必须软件清零。必须软件清零。=1:计数溢出;计数溢出;=0:计数未满。计数未满。TR0/TR1:T0/1启停控制位。启停控制位。=1:启动计数;启动计数;=0:停止计数。停止计数。IE0/IE1和和IT0/IT1:用于管理外部中断(前面已介绍过)。用于管理外部中断(前面已介绍过)。M1,M0:工作方式选择位工作方式选择位。=00:13位定时器位定时器/计数器;计数器;=01:16位定时器位定时器/计数器(常用);计数器(常用);=10:可自动重装的:可自动重装的8位定时器位定时器/计数器(常用);计数器(常用);=11:T0 分为分为2个个8位定时器位定时器/计数器;仅适用于计数器;仅适用于T0。C/:定时方式:定时方式/计数方式选择位。计数方式选择位。=1:选择计数器工作方式,对:选择计数器工作方式,对T0/T1引脚输入的外部事件引脚输入的外部事件的负脉冲计数;的负脉冲计数;=0:选择定时器工作方式,对机器周期脉冲计数定时。:选择定时器工作方式,对机器周期脉冲计数定时。如下页图所示。如下页图所示。(2)工作方式寄存器TMOD GATE C/T M1 M0 GATE C/T M1 M0T1T0TGATE:门控位,定时器门控位,定时器/计数器的启计数器的启/停可由软件与硬件两者控停可由软件与硬件两者控制制 =0:软件控制,只由软件控制,只由TCON中的启中的启/停控制位停控制位TR0/TR1控制控制定时器定时器/计数器的启计数器的启/停。停。=1:硬件控制,由外部中断请求信号硬件控制,由外部中断请求信号 /和和TCON中中的启的启/停控制位停控制位TR0/TR1组合状态控制定时器组合状态控制定时器/计数器的启计数器的启/停。停。其控制逻辑如下图所示。其控制逻辑如下图所示。0INT1INT1INT 定时器/计数器的工作方式 8051单片机的定时器单片机的定时器/计数器共有四种工作模式,现以计数器共有四种工作模式,现以T0为例加为例加以介绍,以介绍,T1与与T0的工作原理相同,但方式的工作原理相同,但方式3下下T1停止计数。方式(如停止计数。方式(如F0)和用户定义名称等几种)和用户定义名称等几种方式。方式。1工作方式工作方式0(M1M0=00,13位定时器位定时器/计数器)计数器)由由TH0的全部的全部8位和位和TL0的低的低5位(位(TL0的高的高3位未用)构成位未用)构成13位加位加1计数器,当计数器,当TL0低低5位计数满时直接向位计数满时直接向TH0进位,并当全部进位,并当全部13位计数位计数满溢出时,溢出标志位满溢出时,溢出标志位TF0置置“1”。2工作方式工作方式1(M1M0=01,16位定时器位定时器/计数器)计数器)由由TH0和和TL0构成构成16位加位加1计数器,其他特性与工作方式计数器,其他特性与工作方式0相同。相同。3工作方式工作方式2(M1M0=10,自动重装计数初值的,自动重装计数初值的8位定时位定时器器/计数器)计数器)16位定时器位定时器/计数器被拆成两个计数器被拆成两个8位寄存器位寄存器TH0和和TL0,CPU在对在对它们初始化时必须装入相同的定时器它们初始化时必须装入相同的定时器/计数器初值。以计数器初值。以TL0作计数器,作计数器,而而TH0作为预置寄存器。当计数满溢出时,作为预置寄存器。当计数满溢出时,TF0置置“1”,同时,同时TH0将计将计数初值以硬件方法自动装入数初值以硬件方法自动装入TL0。这种工作方式很适合于那些重复计。这种工作方式很适合于那些重复计数的应用场合(如串行数据通信的波特率发生器)。数的应用场合(如串行数据通信的波特率发生器)。4工作方式工作方式3(M1M0=11,2个个8位定时器位定时器/计数器,仅适用计数器,仅适用于于T0)TL0:8位定时器位定时器/计数器,使用计数器,使用T0原有控制资源原有控制资源TR0和和TF0,其功能和操作与方式其功能和操作与方式0或方式或方式1完全相同。完全相同。TH0:只能作为只能作为8位定时器,借用位定时器,借用T1的控制位的控制位TR1和和TF1,只能,只能对片内机器周期脉冲计数。对片内机器周期脉冲计数。在方式在方式3模式下,定时器模式下,定时器/计数器计数器0可以构成两个定时器或可以构成两个定时器或者一个定时器和一个计数器。者一个定时器和一个计数器。T0方式方式3下的下的T1方式方式2,因定时初值能自动恢复,用作波,因定时初值能自动恢复,用作波特率发生器更为合适。特率发生器更为合适。定时器定时器/计数器可按片内机器周期定时,也可对由计数器可按片内机器周期定时,也可对由T0/T1引脚输入一个负脉冲进行加法计数。在应用时,其工作方式引脚输入一个负脉冲进行加法计数。在应用时,其工作方式和工作过程均可通过程序设定和控制,因此,定时器和工作过程均可通过程序设定和控制,因此,定时器/计数器计数器在工作前必须先对其进行初始化,计算和设置初值。在工作前必须先对其进行初始化,计算和设置初值。1.定时器定时器T0/T1 中断申请过程中断申请过程 (1)在已经开放)在已经开放T0/T1中断允许且已被启动的前提下,中断允许且已被启动的前提下,T0/T1加加1计满溢出时计满溢出时 TF0/TF1标志位自动置标志位自动置“1”;(2)CPU 检测到检测到TCON中中TF0/TF1变变“1”后后,将产生指令:将产生指令:LCALL 000BH/LCALL 001BH 执行中断服务程序;执行中断服务程序;(3)TF0/TF1标志位由硬件自动清标志位由硬件自动清“0”,以备下次中断申请。以备下次中断申请。.定时器/计数器的应用 2.定时器/计数器初始化的步骤 (1)写)写TMOD,设置定时器,设置定时器/计数器的工作方式;计数器的工作方式;(2)计算定时器)计算定时器/计数器的初值,写入计数器的初值,写入TH0/TH1、TL0/TL1。(3)设置)设置IE、IP,以开放相应的中断和设定中断优先级。,以开放相应的中断和设定中断优先级。3.定时器定时器/计数器的定时器计数器的定时器/计数器范围计数器范围 (1 1)工作方式)工作方式0 0:13位定时器位定时器/计数器方式计数器方式 最大计数值最大计数值=213=8192 (2 2)工作方式)工作方式1 1:16位定时器位定时器/计数器方式计数器方式 最大计数值最大计数值=216=65536 (3)工作方式工作方式2和工作方式和工作方式3:8位的定时器位的定时器/计数器方式计数器方式 最大计数值最大计数值=28=256 3.计数器初值的计算计数器初值的计算 方法:方法:用最大计数量减去需要的计数次数。即:用最大计数量减去需要的计数次数。即:TC=M C 其中:其中:TC计数器需要预置的初值;计数器需要预置的初值;M计数器的模值(最大计数值);计数器的模值(最大计数值);方式方式0时,时,M=213;方式;方式1时,时,M=216;方式;方式2,3时,时,M=28;C计数器计满回计数器计满回0所需的计数值,即设计任务要所需的计数值,即设计任务要求的计数值。求的计数值。例如:例如:流水线上一个包装是流水线上一个包装是12盒,要求每到盒,要求每到12盒就产生一个动盒就产生一个动作,用单片机的工作方式作,用单片机的工作方式0来控制,则应当预置的初值为:来控制,则应当预置的初值为:TC=M C=213 12=81804.定时器初值的计算定时器初值的计算 定时时间的计算公式为:定时时间的计算公式为:T=(M TC)T0(或或TC=M T/T0)其中:其中:T定时器的定时时间,即设计任务要求的定时时间;定时器的定时时间,即设计任务要求的定时时间;T0计数器计数脉冲的周期,即单片机系统主频周期计数器计数脉冲的周期,即单片机系统主频周期的的12倍;倍;M计数器的模值;计数器的模值;TC定时器需要预置的初值。定时器需要预置的初值。若设初值若设初值TC=0,则定时器定时时间为最大。若设单片机,则定时器定时时间为最大。若设单片机系统主频为系统主频为12MHz,则各种工作方式定时器的最大定时时间为:,则各种工作方式定时器的最大定时时间为:工作方式工作方式0 0:Tmax=2131 s=8.192ms工作方式工作方式1 1:Tmax=2161 s=65.536ms工作方式工作方式2 2和和3 3:Tmax=281 s=0.256ms5.5.定时器定时器/计数器应用举例计数器应用举例 例题例题44 设一只发光二极管设一只发光二极管LED和和8051的的P1.0脚相连。当脚相连。当P1.0脚是低电平时,脚是低电平时,LED发亮;当发亮;当P1.0脚是高电平时,脚是高电平时,LED不亮。编制程序用定时器来实现发光二极管不亮。编制程序用定时器来实现发光二极管LED的闪烁功能,的闪烁功能,设置设置LED每每1s闪烁一次。已知单片机系统主频为闪烁一次。已知单片机系统主频为12MHz。解:解:定时器定时器/计数器的最长的定时是计数器的最长的定时是65.536ms,无法实现,无法实现1s的的定时。可以采用软件计数器来进行设计。定时。可以采用软件计数器来进行设计。设计思想:设计思想:定义一个软件计数器单元定义一个软件计数器单元30H,先用定时器,先用定时器/计数计数器器0做一个做一个50ms的定时器,定时时间到了以后将软件计数器中的定时器,定时时间到了以后将软件计数器中的值加的值加1,如果软件计数器计到了,如果软件计数器计到了20,取反,取反P1.0,并清掉软件,并清掉软件计数器中的值,否则直接返回。则完成了计数器中的值,否则直接返回。则完成了20次定时中断才取反次定时中断才取反一次一次P1.0,因此定时时间就为,因此定时时间就为2050=1000ms=1s。定时器定时器/计数器计数器0采用工作方式采用工作方式1,其初值为:,其初值为:216 50ms/1 s=65536 50000=15536=3CB0H电路图如下:电路图如下:定时器初值的新算法定时器初值的新算法:程序如下:程序如下:ORG 0000H AJMP START ;转入主程序转入主程序 ORG 000BH ;定时器定时器/计数器计数器0的中断服务程序入口地址的中断服务程序入口地址 AJMP TIME0;跳转到真正的定时器中断服务程序处跳转到真正的定时器中断服务程序处 ORG 0030H START:MOV SP,#60H ;设置堆栈指针设置堆栈指针 MOV P1,#0FFH ;关发光二极管关发光二极管LED(使其灭)(使其灭)MOV 30H,#00H ;软件计数器预清软件计数器预清0 MOV TMOD,#01H ;定时器定时器/计数器计数器0工作于方式工作于方式1 MOV TH0,#3CH ;设置定时器设置定时器/计数器的初值计数器的初值 MOV TL0,#0B0H SETB EA ;开总中断允许开总中断允许 SETB ET0 ;开定时器开定时器/计数器计数器0中断允许中断允许 SETB TR0;启动定时器启动定时器/计数器计数器0 LOOP:AJMP LOOP ;循环等待循环等待 (真正工作时,这里可写任意其他程序)(真正工作时,这里可写任意其他程序)定时器定时器/计数器计数器0 0的中断服务程序的中断服务程序1 1:TIME0:PUSH ACC ;将将PSW和和ACC推入堆栈保护推入堆栈保护 PUSH PSW INC 30H ;软件计数器加软件计数器加1 MOV A,30H CJNE A,#20,T_LP2;软件计数器单元中的值到了软件计数器单元中的值到了20了吗?了吗?到了,继续执行到了,继续执行;否则,转入否则,转入T_LP2 T_LP1:CPL P1.0 ;到了,到了,P1.0取反取反 MOV 30H,#00H;清软件计数器清软件计数器(或置初值或置初值20)T_LP2:MOV TH0,#3CH;重置定时器重置定时器/计数器的初值计数器的初值 MOV TL0,#0B0H POP PSW ;恢复恢复PSW和和ACC POP ACC RETI;中断返回中断返回 END定时器定时器/计数器计数器0 0的中断服务程序的中断服务程序2 2:TIME0:MOV TL0,#0B0H ;重置定时器重置定时器/计数器的初值计数器的初值 MOV TH0,#3CH DJNZ 30H,T_LP2 ;软件计数器单元中的值到了软件计数器单元中的值到了20了吗?了吗?;T_LP1:CPL P1.0 ;到了,到了,P1.0取反取反 MOV 30H,#20;重置软件计数器初值重置软件计数器初值 T_LP2:RETI;中断返回中断返回 END 例题例题55 设外部有一个计数源。编制程序,对外部计数源进行设外部有一个计数源。编制程序,对外部计数源进行计数并显示。计数并显示。解:解:将外部计数源连到定时器将外部计数源连到定时器/计数器计数器1的外部引脚的外部引脚T1上,可用上,可用LED将计数的值显示出来,我们用将计数的值显示出来,我们用P1口连接的口连接的8个个LED来显示来显示计到的数据。计到的数据。LED对对P1口电平要求同例口电平要求同例4。(电路图类同例(电路图类同例3 3)程序如下:程序如下:ORG 0000H AJMP START;转入主程序转入主程序 ORG 0030H START:MOV SP,#60H;设置堆栈指针设置堆栈指针 MOV TMOD,#60H;定时器定时器/计数器计数器1作计数用作计数用 SETB TR1 ;启动计数器启动计数器1开始运行开始运行 LOOP:MOV A,TL1 ;读计数器读计数器1的计数值送的计数值送A MOV P1,A ;将计数值输出到将计数值输出到P1口,驱动口,驱动LED显示显示 AJMP LOOP ;转回转回LOOP END
展开阅读全文