第七章定时器及应用_第1页
第七章定时器及应用_第2页
第七章定时器及应用_第3页
第七章定时器及应用_第4页
第七章定时器及应用_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

1、定时器及应用定时器及应用教学内容教学内容基本要求基本要求:掌握计数:掌握计数/ /定时器的应用及编程方法定时器的应用及编程方法重点:重点:定时器定时器/ /计数器工作模式及应用计数器工作模式及应用难点:难点:定时器定时器/ /计数器的应用编程计数器的应用编程 定时器定时器/ /计数器的结构及功能计数器的结构及功能定时器定时器/ /计数器的控制计数器的控制定时器定时器/ /计数器的计数器的4 4种工作模式及其应用种工作模式及其应用定时器定时器/ /计数器的编程方法计数器的编程方法7.1 7.1 定时器概述定时器概述v89C51单片机内有两个16位定时器/计数器,即定时器0(T0)和定时器1(T1

2、),都是16位加1计数器。v功能:定时和事件计数,可用于定时控制、延时、对外部件计数和检测等场合。vT0由两个8位特殊功能寄存器TH0和TL0构成;T1由TH1和TL1构成。v每个定时器都可由软件设置为定时工作方式或 计数工作方式。由特殊功能寄存器TMOD和TCON所控制。v定时器工作不占用CPU时间,除非定时器/计数器溢出,才能中断CPU的当前操作。v定时器/计数器有四种工作模式。 定时器计数89C51片内振荡器输出经12分频后的脉冲,即每个机器周期使定时器(T0或T1)的数值加1直至计满溢出。 当89C51采用12MHz晶振时,一个机器周期为1s,计数频率为1MHz。定时工作方式定时工作方

3、式 若89C51采用6MHz晶振,计数频率为多少?v通过引脚T0(P3.4)和T1(P3.5)对外部脉冲信号计数。当输入脉冲信号产生由1至0的下降沿时计数器的值加1。vCPU检测一个检测一个1至至0的跳变需要两个机器周期,故最的跳变需要两个机器周期,故最高计数频率为振荡频率的高计数频率为振荡频率的1/24。v为了确保某个电平在变化之前被采样一次,要求电平保持时间至少是一个完整的机器周期Tcy。计数工作方式计数工作方式TcyTcy 定时器共有两个控制字,由软件写定时器共有两个控制字,由软件写TMOD和和TCON两个两个8位寄存器,用来设置位寄存器,用来设置T0和和T1的工作模式和控制功能。单片机

4、系的工作模式和控制功能。单片机系统复位时,两个寄存器所有位都被清统复位时,两个寄存器所有位都被清0。 6.2 定时器的控制定时器的控制 TMOD用于用于控制控制T0和和T1的工作模式的工作模式,其各位的定义格式如下图所示。其各位的定义格式如下图所示。 一、工作模式寄存器一、工作模式寄存器TMOD(89H) M1、M0形成四种编码控制四种工作模式形成四种编码控制四种工作模式 TMOD (89H) 工作模式工作模式 00模式模式001模式模式110模式模式211模式模式3 功能选择功能选择 1计数计数0定时定时 选通控制选通控制 1受受/INT1控制控制0不受不受/INT1控制控制TMOD不能位寻

5、址,只能字节寻址。不能位寻址,只能字节寻址。C/T:定时器:定时器 /计数器方式选择位计数器方式选择位 C/T=0:定时方式:定时方式 计数片内脉冲(即对机器周期计数,计数片内脉冲(即对机器周期计数,周期确定周期确定) C/T=0:计数方式:计数方式 计数片外脉冲(即对通过计数片外脉冲(即对通过P3.4/P3.5来自片外的计来自片外的计数信号计数,数信号计数,周期不定周期不定)GATE:门控位:门控位 GATE =0:软件使:软件使TR0/TR1置置1,即可启动定时器,即可启动定时器 GATE =1:只有:只有INT0/INT1输入信号为高电平,输入信号为高电平,软件使软件使TR0/TR1置置

6、1,才可启动定时器,才可启动定时器定时器的使用:定时器的使用:设置工作方式设置工作方式-置初值置初值-启动启动-溢出中断溢出中断二、控制寄存器二、控制寄存器TCON(88H) TCON各位的作用如下:各位的作用如下: TF1(TCON.7)T1溢出标志位。溢出标志位。 TF0(TCON.5)T0溢出标志位。溢出标志位。 TR1(TCON.6)T1运行控制位运行控制位。 TR0(TCON.4)T0运行控制位运行控制位。 IE1,IT1,IE0和和IT0(TCON.3TCON.0)外外部中断部中断INT1,INT0请求及请求方式控制位。请求及请求方式控制位。 89C51复位后,复位后,TCON的所

7、有位被清的所有位被清0。 TCON (88H) T0运行控制(软件)运行控制(软件) 1启动启动0禁止禁止 T0溢出标志(硬件)溢出标志(硬件) 1溢出溢出0未溢出未溢出 T1运行控制(软件)运行控制(软件) 1启动启动0禁止禁止 T1溢出标志(硬件)溢出标志(硬件) 1溢出溢出0未溢出未溢出7.3 定时器的四种模式及应用定时器的四种模式及应用 89C51单片机的定时单片机的定时/计数器计数器T0和和T1可由可由软件对特殊功能寄存器软件对特殊功能寄存器TMOD中控制位中控制位C/T进进行设置,以选择定时功能或计数功能。对行设置,以选择定时功能或计数功能。对M1和和M0位的设置对应于四种工作模式

8、,即模式位的设置对应于四种工作模式,即模式0、模式模式1、模式、模式2和模式和模式3。在模式在模式0、模式、模式1和模和模式式2时,时,T0和和T1的工作模式相同;在模式的工作模式相同;在模式3时,时,两个定时器的工作模式不同两个定时器的工作模式不同。一、模式一、模式 0 0 及其应用及其应用(一)模式(一)模式 0 的逻辑电路结构的逻辑电路结构(以以T0为例为例) 模式模式0是选择定时器(是选择定时器(T0或或T1)的)的高高8位位和和低低5位位组成的一个组成的一个13位位定时器定时器/计数器。计数器。定时计数 在这种模式下,在这种模式下,1616位寄存器(位寄存器(TH0TH0和和TL0T

9、L0)只用)只用了了。其中。其中TL0TL0的高的高3 3位未用,其余位未用,其余5 5位为整个位为整个1313位位的低的低5 5位,位,TH0TH0占高占高8 8位。当位。当TL0TL0的低的低5 5位溢出时,向位溢出时,向TH0TH0进位;进位;TH0TH0溢出时,向中断标志溢出时,向中断标志TF0TF0进位(硬件置进位(硬件置位位TF0TF0),并申请中断。),并申请中断。 TH0TL08位5位(二)模式(二)模式 0 工作特点工作特点(二)模式(二)模式 0 工作特点工作特点如何得到所需的时间? 当当C/ T =0时,控制开关接通时,控制开关接通振荡器振荡器12分频输出端,分频输出端,

10、T0对机器对机器周期计数。这就是定时工作方式。周期计数。这就是定时工作方式。 定时时间为:定时时间为:t=(213T0初值初值)振荡周期振荡周期12 当当C/ T =1时,时,T0对外部输入计数。对外部输入计数。计数长度为:计数长度为: L=(213T0初值初值)(个外部脉冲)(个外部脉冲)例例1:设晶振为:设晶振为12MHz,试计算定时器,试计算定时器T0工作于模式工作于模式0时时的最大定时时间的最大定时时间T。解:解:当当T0处于处于工作模式工作模式0时,加时,加1计数器为计数器为13位位。 定时时间为:定时时间为: t=(213T0初值初值)振荡周期振荡周期12 最大定时时间为最大定时时

11、间为“T0初值初值=0”时。时。所以:所以:122T13 振振荡荡周周期期12101212613 ms192.81081926 例例2:设定时器:设定时器T0用于定时用于定时10ms,晶振为,晶振为6MHz。编。编程实现:程实现:P1.0输出周期为输出周期为20ms的方波。的方波。 解:解:1)确定)确定T0初值初值 当当T0处于工作模式处于工作模式0时,加时,加1计数器为计数器为13位。位。定时时间:定时时间:120T2(T13 振振荡荡周周期期初初值值)所以:所以:120T2(ms1013 振振荡荡周周期期初初值值)12106101020T6313 初初值值T0T0初值初值=3192=C7

12、8H=3192=C78H = =011000110110001111000 B11000 B即:(即:(TH0)=0110 0011 B=63H(高(高8位)位) (TL0)=1 1000 B=18H(低(低5位)位)3192 32商为高商为高8位,位,余数为低余数为低5位位 TMOD的低四位为的低四位为T0的控制位的控制位 模式模式0:M1M0=00, 定时器方式:定时器方式:C/T=0, 门控位不受门控位不受INT0的影响:的影响:GATE=0, 其余位:其余位:为为 0。 模式字为模式字为 TMOD=0000 0000 B=00H定时器定时器T1定时器定时器T0GATE C/ T M1

13、M0 GATEM1C/ TM0TMOD(89H) D7 D6 D5 D4 D3 D2 D1 D0解:解:2 2)确定确定TMOD的初值的初值解:解:3)编写程序编写程序方法一:采用查询方式方法一:采用查询方式 #include vvoid main()v TMOD=0 x00;v TH0=0 x63; TL0=0 x18;v ET0=1; EA=1;v TR0=1;v P1_0=1;v while(1)v if(TF0=1)v v TF0=0;v TH0=0 x63; TL0=0 x18;v P1_0=P1_0; v v v解:解:3)编写程序编写程序方法二:定时器溢出中断方式实现方法二:定时

14、器溢出中断方式实现v#include vvoid main()v v TMOD=0 x00;v TH0=0 x63; TL0=0 x18;v ET0=1; EA=1;v TR0=1;v P1_0=1;v while(1);vvvoid timer_0() interrupt 1vv TH0=0 x63;v TL0=0 x18; v P1_0=P1_0; v思考:设定时器设定时器T0用于定用于定时时10ms,晶振为,晶振为6MHz。编程实现:编程实现:P1.0输出周期输出周期为为40ms,高电平宽为高电平宽为10ms,低电平宽为低电平宽为30ms的矩形波。的矩形波。如何编程如何编程? 二、二、

15、模式模式 1 及其应用及其应用该模式对应的是一个该模式对应的是一个16位的定时器位的定时器/计数器。计数器。其结构与操作几乎与模式其结构与操作几乎与模式0完全相同,唯一的完全相同,唯一的差别是:在模式差别是:在模式1中,寄存器中,寄存器TH0和和TL0是以是以全部全部16位位参与操作。参与操作。用于定时工作方式时,定时时间为:用于定时工作方式时,定时时间为: 用于计数工作方式时,计数长度为:用于计数工作方式时,计数长度为: (216T0初值初值)(个外部脉冲)(个外部脉冲)。 例例3 3:设定时器:设定时器T0T0选择工作模式选择工作模式1 1的计数器工作方式,的计数器工作方式,其计数器初值为

16、其计数器初值为FFFFFFFFH H,问此时定时器,问此时定时器T0T0的实际的实际用途是什么?用途是什么?解:因其初值为解:因其初值为FFFFHFFFFH,只要随机外来一脉冲即可溢,只要随机外来一脉冲即可溢出,向出,向CPUCPU申请中断,故这一内部中断源实质上申请中断,故这一内部中断源实质上已作为外部中断源使用。因此此定时器已作为外部中断源使用。因此此定时器T0T0并不用并不用于定时或计数。于定时或计数。例例4 4:设晶振为:设晶振为12MHz12MHz,试计算定时器,试计算定时器T1T1工作于模式工作于模式1 1时的最大定时时间时的最大定时时间T T。解:解:当当T1T1处于处于工作模式

17、工作模式1 1时,加时,加1 1计数器为计数器为1616位位。 定时时间为: t=(216T1初值)振荡周期12 最大定时时间为“T1初值=0”时。所以:122T16 振振荡荡周周期期12101212616 ms536.6510655366 例例5 5:用定时器:用定时器T1T1产生一个产生一个50Hz50Hz的方波,由的方波,由 P1.1P1.1输出。输出。foscfosc=6MHz=6MHz。解:1)确定定时器T1初值 方波周期T=1/50 =0.02s = 20ms 用T1定时10ms,时间到P1.1引脚电平取反。121T2t16 振振荡荡周周期期初初值值)(定定时时时时间间:12t21

18、T16 振振荡荡周周期期初初值值121061ms1021T616 初初值值H78EC605361T 初初值值(TH1TH1)=ECH=ECH,(,(TL1TL1)=78H=78H20ms10ms 10ms解:解:2 2)确定工作模式寄存器)确定工作模式寄存器TMODTMOD的值的值 定时器T1工作于模式1的定时器工作方式, 高四位:高四位: GATE=0,C/T=0,M1M0=01 ,低四位:取,低四位:取0。 (TMODTMOD)=0001 0000 B = 10H=0001 0000 B = 10H3)编程(查询方式)编程(查询方式) #include void main() TMOD=0

19、 x10; TH1=0 xec; TL1=0 x78; ET1=1; EA=1; TR1=1; P1_1=1; while(1) if(TF1=1) TF1=0; TH1=0 x63; TL1=0 x18; P1_1=P1_1; 3)编程(定时器溢出中断方式)编程(定时器溢出中断方式) #include void main() TMOD=0 x10; TH1=0 xec; TL1=0 x78; ET1=1; EA=1; TR1=1; P1_1=1; while(1);void timer_1() interrupt 3 TH1=0 x63; TL1=0 x18; P1_1=P1_1; 模式模式

20、2把把TL0(或或TL1)配置成一个可以配置成一个可以自动重装自动重装载载的的8位位定时器定时器/计数器,逻辑电路结构如下图。计数器,逻辑电路结构如下图。三、三、 模式模式 2 及其应用及其应用TL0计数溢出时,不仅使溢出中断标志位计数溢出时,不仅使溢出中断标志位TF0置置1,而,而且还自动把且还自动把TH0中的内容重新装载到中的内容重新装载到TL0中。中。v在程序初始化时,在程序初始化时,TL0TL0和和TH0TH0由软件赋予相同的初值由软件赋予相同的初值。v用于定时工作方式时,定时时间为: t=(28TL0初值)振荡周期12v用于计数工作方式时,计数长度为:用于计数工作方式时,计数长度为:

21、 (2(28 8TL0TL0初值初值) ) (个外部脉冲)(个外部脉冲)v该模式可省去软件中重装常数的语句,并可产生相该模式可省去软件中重装常数的语句,并可产生相当精确的定时时间,适合于作串行口波特率发生器当精确的定时时间,适合于作串行口波特率发生器。 例例6:当:当P3.4引脚上的电平发生负跳变时,从引脚上的电平发生负跳变时,从P1.0输出输出一个一个500s的同步脉冲。的同步脉冲。编程实现该功能,fosc=6MHz。 解解: 首先选首先选T0为模式为模式2,外部事件计数方式。当,外部事件计数方式。当P3.4引引脚上的电平发生负跳变时,脚上的电平发生负跳变时,T0计数器加计数器加1,溢出标志

22、,溢出标志TF0置置1;然后改变;然后改变T0为为500s定时工作方式,并使定时工作方式,并使P1.0输出由输出由1变为变为0。T0定时到产生溢出,使定时到产生溢出,使P1.0引脚引脚恢复输出高电平,恢复输出高电平,T0又恢复外部事件方式。又恢复外部事件方式。(2)计算T0初值v T0T0工作在外部事件计数方式工作在外部事件计数方式: 题目要求题目要求T0T0引脚出现一次外部事件时,引起引脚出现一次外部事件时,引起T0T0中中断。断。 所以:设计计数器初值为所以:设计计数器初值为FFHFFH,当计数器再加,当计数器再加1 1就就溢出。溢出。 即即: T0: T0初值初值+1=2+1=28 8

23、T0T0初值初值 = 2= 28 8 1=11111111B=0FFH1=11111111B=0FFH 即:(TH0)=(TL0)=FFHv T0 T0工作在定时工作方式:工作在定时工作方式: 因为晶振频率为因为晶振频率为6MHz6MHz,定时,定时500s500s。 所以:所以:(2(28 8T0T0初值初值) )2s=500s2s=500s 得出:得出:T0T0初值初值 =6=06H=6=06H, 即:(TH0)=(TL0)=06H(3)程序清单:v#include vbit flag=0;vmain()vv TMOD=0 x06;v TH0=0 xff;v TL0=0 xff;v P1_

24、0=1;v ET0=1;v EA=1;v TR0=1;v while(1); vvvoid timer_0() interrupt 1vv TR0=0;v flag=flag;v if (flag=0)v v P1_0=1;v TMOD=0 x06;v TH0=0 xff;v TL0=0 xff;v TR0=1;v v elsev v P1_0=0;v TMOD=0 x02;v TH0=0 x06;v TL0=0 x06;v TR0=1;v v例6-8完例例7 7:利用定时器:利用定时器T1T1的模式的模式2 2对外部信号计数。要求每计对外部信号计数。要求每计满满100100次,将次,将 P1

25、.0P1.0端取反。端取反。解:(1)选择模式 外部信号由T1(P3.5)引脚输入,每发生一次负跳变计数器加1,每输入100个脉冲,计数器发生溢出中断,中断服务程序将P1.0取反一次。 T1计数工作方式模式2的模式字为(TMOD)=60H。 T0不用时,TMOD的低4位可任取,但不能进入模式3,一般取0。(2)计算T1的计数初值 X= 28 100=156=9CH 因此:TL1的初值为9CH,重装初值寄存器TH1=9CH。(3)程序清单v#includevmain()vv TMOD=0 x60;v TH1=0 x9c;v TL1=0 x9c;v ET1=1;v EA=1;v TR1=1;v w

26、hile(1);vvvoid timer_1() interrupt 3vv P1_1=P1_1;v四、四、 模式模式 3 3 及其应用及其应用 工作模式工作模式3对对T0和和T1大不相同。大不相同。 若将若将T0设置为设置为模式模式3,TL0和和TH0被分成为两个相互独立的被分成为两个相互独立的8位计位计数器数器,逻辑图如下图:,逻辑图如下图: T0设置为模式3,TL0和TH0被分成两个相互独立的8位计数器。TL0: 用原T0的各控制位、引脚和中断源,即C/T,GATE,TR0,TF0,T0(P3.4)引脚,INT0(P3.2)引脚。 TL0可工作在定时器方式和计数器方式。其功能和操作与模式

27、0、模式1相同(只是8位)。TH0: 只可用作简单的内部定时功能。 TH0占用了定时器T1的控制位TR1和T1的中断标志TF1,其启动和关闭仅受TR1的控制。v定时器T1无工作模式3状态。在T0用作模式3时,T1仍可设置为模式02。vT0模式3下T1的逻辑电路结构见书图6-11所示。v由于TR1和TF1被定时器T0占用,计数器开关K已被接通,此时,仅用T1控制位C/T切换其定时或计数器工作方式就可使T1运行。当计数器溢出时,只能将输出送入串行口或用于不需要中断的场合,一般作波特率发生器。例例8 8:设某用户系统已使用了两个外部中断源,并置:设某用户系统已使用了两个外部中断源,并置定时器定时器T

28、1T1工作在模式工作在模式2 2,作串行口波特率发生器用。,作串行口波特率发生器用。现要求再增加一个外部中断源,并由现要求再增加一个外部中断源,并由P1.0P1.0引脚输出引脚输出一个一个5kHz5kHz的方波。的方波。FoscFosc=12MHz.=12MHz.解:(1)工作模式确定 可设置T0工作在模式3计数器方式,把T0的引脚作附加的外部中断输入端,TL0的计数初值为FFH,当检测到T0引脚电平出现由1至0的负跳变时,TL0产生溢出,申请中断。 T0模式3下,TL0作计数用,而TH0用作8位的定时器,定时控制P1.0引脚输出5kHz的方波信号。 (2)计算初值TL0的计数初值为FFH。T

29、H0的计数初值X为: P1.0方波周期 T=1/(5kHz)=0.2ms=200s 用TH0作定时100s时, X=256-100s/1s=156(3)程序清单 #include unsigned char temp;main() TMOD=0 x27; TL0=0 xff; TH0=156; TH1=temp; TL1=temp; TCON=0 x55; IE=0 x9f; while(1);void int_0() interrupt 0 void timer_l0() interrupt 1 TL0=0 xff;void int_1() interrupt 2 void timer_h0

30、() interrupt 3 TH0=156;void s_con() interrupt 4五、五、 综合应用举例综合应用举例例8:设时钟频率为6MHz。编程使P1.0所接的发光二极管闪烁,亮灭的时间分别为1S,利用T0定时。解:(1)定时器T0工作模式的确定模式0最长可定时16.384ms; 模式1最长可定时131.072ms; 模式2最长可定时512s;定时1s,可选用模式1,每隔100ms中断一 次,中断10次从而达到1s的定时。(2)求计数器初值X (216X)12/(6 106) =10010-3 s X=15536=3CB0H 因此:(TL0)=0B0H (TH0)=3CH(3)

31、实现方法: 对于中断10次计数,可使T0工作在计数方式,也可用循环程序的方法实现。本例采用循环程序法。(4)源程序清单v#include vunsigned char count=0;vmain()vv TMOD=0 x01;v TH0=0 xb0;v TL0=0 x3c;v ET0=1;v EA=0;v TR0=1;v while(count!=10);v TR0=0;v while(1);vvvoid timer_0() interrupt 1vv count+;v 例例9 9:设计实时时钟程序。时钟:设计实时时钟程序。时钟 就是以秒、分、时为单位进行计就是以秒、分、时为单位进行计时。用定时器与中断的联合应用时。用定时器与中断的

温馨提示

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

评论

0/150

提交评论