第六章单片微机的定时器_第1页
第六章单片微机的定时器_第2页
第六章单片微机的定时器_第3页
第六章单片微机的定时器_第4页
第六章单片微机的定时器_第5页
已阅读5页,还剩74页未读 继续免费阅读

下载本文档

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

文档简介

第六章单片微机的定时器第一页,共七十九页,编辑于2023年,星期四

通常采用以下三种方法来实现定时或计数: 1.硬件法 硬件定时功能完全由硬件电路完成,不占用CPU时间。但当要求改变定时时间时,只能通过改变电路中的元件参数来实现,很不灵活。 2.软件法 软件定时是执行一段循环程序来进行时间延时,优点是无额外的硬件开销,时间比较精确。但牺牲了CPU的时间。 3.可编程定时器/计数器 6.1概述第二页,共七十九页,编辑于2023年,星期四 可编程定时器/计数器最大特点是可以通过软件编程来实现定时时间的改变,通过中断或查询方法来完成定时功能或计数功能。有专门的可编程定时器/计数器芯片可供选用,比如Intel8253。还有一些日历时钟芯片,如菲利浦公司的PCF8583等。 目前单片微机中往往已配备了定时器/计数器(timer/counter)。 80C51芯片内包含有两个16位的定时器/计数器:T0和T1;而80C52包含有三个16位的定时器/计数器:T0、T1和T2;在80C51系列的部分产品(如Philips公司的80C552)中,还包含有一个用做看门狗的8位定时器(T3)。 定时器/计数器的核心是一个加1计数器.其基本功能是计数加1。第三页,共七十九页,编辑于2023年,星期四 若是对单片微机的T0、T1或T2引脚上输入的一个1到0的跳变进行计数增l,即是计数功能。 若是对单片微机内部的机器周期进行计数,从而得到定时,这就是定时功能。 定时功能和计数功能的设定和控制都是通过软件来设定的。 80C51的定时器/计数器除了可用作定时器或计数器之外,还可用作串行接口的波特率发生器。第四页,共七十九页,编辑于2023年,星期四 定时器/计数器T0、T1的内部结构简图示于图6-1中。从图中可以看出,定时器/计数器T0、T1由以下几部分组成:

计数器TH0、TL0和TH1、TL1;

特殊功能寄存器TMOD、TCON;

时钟分频器;

输入引脚T0、T1。6.2定时器/计数器T0、T1第五页,共七十九页,编辑于2023年,星期四

⒈定时器/计数器T0、T1的方式寄存器——TMOD

字节地址为89H。TMOD的格式如下:低4位用来定义T0,高4位用来定义T16.2.1与定时器/计数器T0、T1有关的特殊功能寄存器第六页,共七十九页,编辑于2023年,星期四D7 D6 D5D4 D3D2D1D0GATEC/TM1M0GATEC/TM1M0T1T0各位的意义如下:

GATE——门控位。GATE=1时,由外部中断引脚、和TR0、TR1共同来启动定时器。当 引脚为高电平时,TR0置位启动定时器T0;当引脚为高电平时,TR1置位,启动定时器T1。GATE=0时,仅由TR0和TR1置位来启动定时器T0和T1。

第七页,共七十九页,编辑于2023年,星期四C/T——功能选择位。C/T=1时,选择计数功能;C/T=0时,选择定时功能。T0、T1的计数、定时功能是通过TMOD中的位来选择的。①定时器,设置C/T=0计数输入信号是内部时钟脉冲,每个机器周期使寄存器的值增1。每个机器周期等于12个振荡周期,故计数速率为振荡周期的1/12。当采用12MHz的晶体时,计数速率为1MHz。定时器的定时时间,与系统的振荡频率fosc、计数器的长度和初始值等有关。②计数器,设置C/T=1

这时,通过引脚T0(P3.4)和T1(P3.5)对外部信号进行计数。在每个机器周期的S5P2期间,CPU采样引脚的输入电平。若前一机器周期采样值为1,下一机器周期采样值为0,则计数器增1,此后的机器周期S3P1期间,新的计数值装入计数器。第八页,共七十九页,编辑于2023年,星期四所以检测一个1到0的跳变需要两个机器周期,故计数脉冲频率不能高于振荡脉冲频率的1/24。

M1、M0——工作方式选择位。由于有M1和M0两位,可以有四种工作方式,如表6-1所示。⒉定时器/计数器T0、T1的控制寄存器——TCON

控制寄存器TCON是一个逐位定义的8位寄存器,字节地址为88H,位寻址的地址为88H~8FH。其格式如下:位地址

8FH8EH8DH8CH8BH8AH89H88H位功能

TF1TR1TF0TR0IE1IT1IE0IT0第九页,共七十九页,编辑于2023年,星期四其中各位的意义如下:

TF1(TCON.7)——定时器/计数器T1的溢出标志。 T1溢出时,该位由内部硬件置位。若中断开放,即响应中断,进入中断服务程序后,由硬件自动清0;若中断禁止,可用于判跳,用软件清0。

TR1(TCON.6)——T1的运行控制位。 用软件控制,置l时,启动T1;清0时,停止T1。

TF0(TCON.5)——T0的溢出标志。 T0溢出时,该位由内部硬件置位。若中断开放,即响应中断,进入中断服务程序后,由硬件自动清0;若中断禁止,可用于判跳,用软件清0。

TR0(TCON.4)——T0的运行控制位。 用软件控制,置1时,启动T0;清0时,停止T0。第十页,共七十九页,编辑于2023年,星期四

IE1(TCON.3)——外部中断1下降沿触发标志位。

IE0(TCON.I)——外部中断0下降沿触发标志位。

IT1(TCON.0)——外部中断1触发类型选择位。

IT0(TCON.0)——外部中断0触发类型选择位。TCON的低4位与中断有关,已在第五章“中断系统”中讨论过。

复位后,TCON的所有位均清0。T0和T1均是关断的。

⒊定时器/计数器T0、T1的数据寄存器 由TH1(地址为8DH)、TL1(地址为8BH)和TH0(地址为8CH)、TL0(地址为8AH)寄存器所组成。复位后,所有这四个寄存器全部清零。⒋定时器/计数器中断第十一页,共七十九页,编辑于2023年,星期四⑴中断允许寄存器IE

EA位--中断允许总控制位

ET0位、ET1位、ET2位--T0、T1和T2的中断允许控制位。 某位=0,则禁止对应定时器/计数器的中断。 某位=1,则允许对应定时器/计数器的中断。⑵中断矢量 定时器T0:000BH 定时器T1:001BH 定时器T2:002BH

第十二页,共七十九页,编辑于2023年,星期四⑶中断优先级寄存器IP

PT0位、PT1位、PT2位--T0、T1和T2中断优先级控制位。 某位为0,则相应的定时器/计数器的中断为低优先级; 某位为1,则相应的定时器/计数器的中断为高优先级。第十三页,共七十九页,编辑于2023年,星期四从图6–2中可看到: C/T位的电平为“0”或“1”,用来设定是作定时器或计数器。 门控位GATE可用作对INTx引脚上的高电平时间进行计量。由图6–2上可看出,当GATE=0时,A点为高电平,定时器/计数器的启动/停止由TRx决定。TRx=1,定时器/计数器启动;TRx=0,定时器/计数器停止。 当GATE=1时A点的电位由INTx决定,因而B点的电位就由TRx和INTx决定,即定时器/计数器的启动/停止由TRx和INTx两个条件决定。

计数溢出时,TFx置位。如果中断允许,CPU响应中断并转入中断服务程序,由内部硬件清TFx。TFx也可以由程序查询和清零。

⒉方式1:16位定时器/计数器

当TMOD中的M1=0、M0=l时,选定方式1工作。第十四页,共七十九页,编辑于2023年,星期四方式1时,T0、T1的逻辑结构如图6-3所示。这种方式下,计数寄存器由16位组成,THx高八位和TLx的低8位。 计数时,TLx溢出后向THx进位,THx溢出后将TFx置位,如果中断允许,CPU响应中断并转入中断服务程序,由内部硬件清TFx。TFx也可以由程序查询和清零。

⒊方式2:定时常数自动重装载的8位定时器/计数器

当TMOD中的M1=1、M0=0时,选定方式2工作。这种方式是将16位计数寄存器分为两个8位寄存器,组成一个可重载的8位计数寄存器。方式2时定时器/计数器T0、T1的逻辑结构如图6-4所示。在方式2中,TLx作为8位计数寄存器,THx作为8位计数常数寄存器。当TLx计数溢出时,一方面将TFx置位,并向CPU申请中断;另一方面将THx的内容重新装入TLx中,继续计数。第十五页,共七十九页,编辑于2023年,星期四

根据对TMOD寄存器中M1和M0的设定,T0可选择四种不同的工作方式,而T1只具有三种工作方式(即方式0、方式1和方式2)。⒈方式0:13位定时器/计数器 当TMOD中的M1=0、M0=0时,选定方式0工作。方式0时的结构如图6-2所示。这种方式下,计数寄存器由13位组成,即THx高八位(作计数器)和TLx的低5位(32分频的定标器)构成。TLx的高3位未用。计数时,TLx的低5位溢出后向THx进位,THx溢出后将TFx置位,并向CPU申请中断。6.2.2定时器/计数器T0、T1的工作方式

第十六页,共七十九页,编辑于2023年,星期四重新装入不影响THx的内容。方式2适合于作为串行口波特率发生器使用。⒋方式3当TMOD中的M1=l、M0=1时,选定方式3工作。这种方式是是将T0分为一个8位定时器/计数器和一个8位定时器,TL0用于8位定时器/计数器,TH0用于8位定时器。方式3时定时器/计数器T0、T1逻辑结构分别如图6–5、图6–6所示。⑴工作方式3下的定时器/计数器T0方式3时,T0的结构见图6–5所示。其工作与方式0时相同,只是此时的计数器为8位计数器TL0,它占用了T0的GATE、INT0、启动/停止控制位TR0、T0引脚(P3.4)以及

计数溢出标志位TF0和T0的中断矢量(地址为000BH)等。第十七页,共七十九页,编辑于2023年,星期四

TH0所构成的定时器只能作为定时器用,因为此时的外部引脚T0已为定时器/计数器TL0所占用。这时它占用了T1的启动/停止控制位TR1、计数溢出标志位TF1及T1中断矢量(地址为001BH)。T0方式3时,T1的结构如图6–6所示,T1只可选方式0、1或2。由于此时计数溢出标志位TF1及T1中断矢量(地址为001BH)已被TH0所占用,所以T1仅能作为波特率发生器或其它不用中断的地方。作串行口波特率发生器时,T1的计数输出直接去串行口,只需设置好工作方式,串行口波特率发生器自动开始运行,如要停止工作,只需向T1送一个设为工作方式3的控制字即可。第十八页,共七十九页,编辑于2023年,星期四

80C52中的T2是一个16位的、具有自动重装载和捕获能力的定时器/计数器。在T2的内部,除了两个8位计数器TL2、TH2和控制寄存器T2CON及T2MOD之外,还设置有捕获寄存器RCAP2L(低字节)和RCAP2H(高字节)。T2的计数脉冲源可以有两个:一个是内部机器周期,另一个是由T2(P1.0)端输入的外部计数脉冲。T2象T0、T1一样,既可用做定时器,也可用做计数器,由T2CON中的C/T位的电平所决定。T2有3种工作方式∶自动重装载、俘获和波特率发生器方式,由T2CON中有关位决定。 输入引脚T2(P1.0)是外部计数脉冲输入端;输入引脚T2EX(P1.1)是外部控制信号输入端。

6.3定时器/计数器T2

第十九页,共七十九页,编辑于2023年,星期四

⒈控制寄存器T2CON

T2控制寄存器T2CON是一个逐位定义的特殊功能寄存器,其字节地址为C8H,位地址为C8H~CFH。其格式如下:位地址

CFHCEHCDHCCHCBHCAHC9HC8H位功能

TF2EXF2RCLKTCLKEXEN2TR2/T2CP/RL2

TF2(T2CON.7)——T2溢出标志。定时器T2溢出时置位,并申请中断。只能靠软件清除。但在波特率发生器方式下,也即RCLK=1或TCLK=1时,定时器溢出不对TF2置位。

EXF2(T2CON.6)——T2外部标志。当EXEN2=1,且T2EX引脚上出现负跳变而造成捕获或重装载时,6.3.1定时器/计数器T2中的特殊功能寄存器第二十页,共七十九页,编辑于2023年,星期四EXF2置位,申请中断。这时若已允许T2中断,CPU将响应中断,转向中断服务程序。EXF2要靠软件来清除。

RCLK(T2CON.5)——接收时钟标志。靠软件置位或清除,用以选择T2或T1作串行口接收波特率发生器。RCLK=1时,用T2溢出脉冲作为串行口的接收时钟;RCLK=0时,用T1的溢出脉冲作接收时钟。

TCLK(T2CON.4)——发送时钟标志。靠软件置位或清除,用以选择T2或T1作串行口发送波特率发生器。TCLK=l时,用T2溢出脉冲作为串行口的发送时钟;TCLK=0时,用T1的溢出脉冲作发送时钟。

EXEN2(T2CON.3)——T2外部允许标志。 第二十一页,共七十九页,编辑于2023年,星期四

靠软件设置或清除,以允许或禁止用外部信号来触发捕获或重装载操作。当EXEN2=l时,若T2未用作串行口的波特率发生器,则在T2EX端出现的信号负跳变时,将造成T2捕获或重装载,并置EXF2标志为1,请求中断。EXEN2=0时,T2EX端的外部信号不起作用。TR2(T2CON.2)——T2运行控制位。靠软件设置或清除,以决定T2是否运行。TR2=1,启动T2,否则停止。C/T2(T2CON.1)——T2的定时器方式或计数器方式选择位。靠软件设置或清除。T2有计数和定时两种功能,,由控制位C/T2决定。C/T2=0时,选择定时器工作方式。TH2和TL2对机器周期进行计数。每个机器周期使TL2寄存器的值增1。计数脉冲的频率为1/12振荡器频率。

第二十二页,共七十九页,编辑于2023年,星期四C/T2=1时,选择计数器工作方式,下降沿触发。计数脉冲自T2(P1.0)引脚输入,TH2和TL2作外部信号脉冲计数器用,每当外部脉冲负跳变时,计数器值增1。其工作情况和时序关系与定时器/计数器T0和T1的完全一样,对外部计数脉冲的要求也相同。在每个机器周期的S5P2期间,CPU采样引脚的输入电平。若前一机器周期采样值为1,下一机器周期采样值为0,则计数器增1,此后的机器周期S3P1期间,新的计数值装入计数器。所以检测一个1到0的跳变需要两个机器周期,故外部脉冲频率不超过振荡器频率的1/24。CP/RL2(T2CON.0)——捕获/重装载标志。

用软件设置或清除。CP/RL2=l选择捕获功能,这时若EXEN2=1,且T2EX端的信号负跳变时,发生捕获操作。CP/RL2=0,选择重装载功能,这时若T2溢出或在EXEN2=1条件下T2EX端信号负跳变,都会造成自动重装载操作。当RCLK=l或TCLK=l时,CP/RL2控制位不起作用,T2被强制工作于重装载方式。重装载发生于T2溢出时,常用来作波特率发生器。第二十三页,共七十九页,编辑于2023年,星期四

T2CON中的各位都是可位寻址的,因此所有标志或控制位都可以靠软件来设置或清除。

T2控制寄存器T2CON的复位值=00000000B⒉方式控制寄存器——T2MOD

方式控制寄存器T2MOD是80C52/54/58芯片新增添的、T2的方式控制寄存器,字节地址为C9H。其格式如下:位地址

D7D6D5D4D3D2D1D0位功能

------T2OEDCEN该寄存器定义了2位,它们的含义是:T2OE(T2MOD.l)——T2输出允许位。 当T2OE=1时,允许时钟输出至T2(P1.0)引脚。这一位仅对80C54/80C58有定义。第二十四页,共七十九页,编辑于2023年,星期四

DCEN(T2MOD.0)——向下计数允许位。 当DCEN=l时,允许T2向下(减)计数, 当DCEN=0时,T2自动向上(增)计数。方式控制寄存器T2MOD复位值=××××××00B⒊数据寄存器——TH2、TL2

T2有一个16位的数据寄存器,是由高8位寄存器TH2和低8位寄存器TL2所组成。它们都只能字节寻址,相应的字节地址为CDH和CCH。这两个寄存器都是读/写寄存器。复位后,所有这两个寄存器全部清零。

第二十五页,共七十九页,编辑于2023年,星期四⒋捕获寄存器——RCAP2H、RCAP2L

T2中的捕获寄存器是一个16位的数据寄存器,由高8位寄存器RCAP2H和低8位寄存器RCAP2L所组成。它们也都只能字节寻址,相应的字节地址为CBH和CAH。 捕获寄存器RCAP2H和RCAP2L,用于捕获计数器TL2、TH2的计数状态,或用来预置计数初值的。TH2、TL2和RCAP2H、RCAP2L之间接有双向缓冲器(三态门)。 复位后,所有这两个寄存器全部清零。第二十六页,共七十九页,编辑于2023年,星期四 T2的工作方式用控制位CP/RL2(T2CON.0)和RCLK+TCLK来选择。T2可能有三种工作方式(表6-2):捕获方式、自动重转载方式和波特率发生器方式。⒈

捕获方式

捕获方式是指:在一定条件下,自动将计数器TH2和TL2的数据读入捕获寄存器RCAP2H和RCAP2L,亦即TH2和TL2内容的捕获是通过捕获寄存器RCAP2H和RCAP2L来实现的。其工作原理可参见图6-7。6.3.2定时器/计数器T2的工作方式

第二十七页,共七十九页,编辑于2023年,星期四当CP/RL2=l时,选择捕获方式。捕获操作发生于下述两种情况下:⑴定时器2的寄存器TH2和TL2溢出时,打开重装载三态缓冲器,把TH2和TL2的内容自动读入到捕获寄存器RCAP2H和RCAP2L中。同时,溢出标志TF2置1,申请中断。⑵当EXEN2=l且T2EX(P1.1)端的信号有负跳变时,将发生捕获操作。同时标志EXF2置1,申请中断。若T2的中断是被允许的,则无论发生TF2=l还是EXF2=l,CPU都会响应中断,此中断向量的地址为002BH。响应中断后,应用软件清除中断申请。TF2和EXF2都是直接可寻址位,可采用CLRTF2和CLREXF2指令实现清除中断申请的功能。

⒉自动重装载方式自动重装载方式是指:在一定条件下,自动地将捕获寄存器RCAP2H和RCAP2L的数据装入计数器TH2和TL2中。第二十八页,共七十九页,编辑于2023年,星期四

一般说来捕获寄存器RCAP2H和RCAP2L在这里起预置计数初值的功能。对8XC52,其工作原理可参见图6-8。当CP/RL2=0时,选择自动重装载方式。 重装载操作发生于下述两种情况下:⑴T2的寄存器TH2和TL2溢出时,打开重装载三态缓冲器,把捕获寄存器RCAP2H和RCAP2L的内容自动装载到TH2和TL2中。同时,溢出标志TF2置1,申请中断。⑵当EXEN2=1且T2EX(P1.1)端的信号有负跳变时,将发生重装载操作。同时标志EXF2置1,申请中断。若T2的中断是被允许的,则无论发生TF2=1还是EXF2=1,CPU都会响应中断,此中断向量的地址为002BH。响应中断后,应用软件撤除中断申请。TF2和EXF2都是直接可寻址位,可采用CLRTF2和CLREXF2指令实现撤除中断申请的功能。

第二十九页,共七十九页,编辑于2023年,星期四⒊波特率发生器方式

当T2CON中RCLK十TCLK=1时,T2工作于波特率发生器方式,即其溢出脉冲用做串行口的时钟。T2的波特率发生器方式下的结构图示于图6-9中。在T2CON中,RCLK选择串行通信接收波特率发生器,TCLK选择发送波特率发生器,因而,发送和接收的波特率可以不同。此时,T2的输入时钟可由内部时钟决定,也可由外部时钟决定。若C/T2=0,选用内部时钟,对机器周期计数,计数脉冲的频率为1/12振荡器频率.

若C/T2=1,选用外部时钟,该时钟由T2(P1.0)端输入,每当外部脉冲负跳变时,计数器值增l。外部脉冲频率不超过振荡器频率的l/24。

第三十页,共七十九页,编辑于2023年,星期四

由于脉冲溢出时,RCAP2H和RCAP2L的内容会自动装载到TH2和TL2中,故波特率的值还决定于RCAP2H和RCAP2L装载初值。

RCLK+TCLK还用于选择T1还是T2作串行通信的波特率发生器。由图6-9可看出,这两位的值用来控制两个电子开关的位置。值为0时,选用T1做波特率发生器;值为1时,选用T2做波特率发生器。当T2用做波特率发生器时,TH2的溢出不使TF2置位,不产生中断。因而,当T2用做波特率发生器时,没有必要禁止中断。当T2用做波特率发生器时,若EXEN2置1,则T2EX端的信号产生负跳变时,EXF2将置1,但不会发生重装载或捕获操作。这时,T2EX可以作为一个附加的外部中断源。

第三十一页,共七十九页,编辑于2023年,星期四在波特率发生器工作方式下,在T2计数过程中(即TR2=1之后),不能再读/写TH2和TL2的内容。如果读,则读出的结果不会精确(因为每个状态加1);如果写,则会影响T2的溢出而使波特率不稳定。在T2计数过程中,可以读出但不能改写RCAP2H和RCAP2L的内容。需要访问RCAP2H和RCAP2L,应事先关闭定时器工作。第三十二页,共七十九页,编辑于2023年,星期四

监视定时器T3有时俗称看门狗(watchdog),它的作用是强迫单片微机进入复位状态,使之从硬件或软件故障中解脱出来。 在飞利浦80C552中,监视定时器T3由一个11位的分频器和8位定时器T3组成,如图6一10所示。预分频器输入为晶振1/12的信号,晶振为12MHz时,输入为1MHz,而8位定时器T3每隔时间t加1: t=12×2048/fosc 当晶振为12MHz时,t为2ms。 若8位定时器溢出,则产生一个尖脉冲,它将复位8×C552,同时在RST引脚上也将产生1个正的复位尖脉冲。6.4监视定时器(看门狗)T3第三十三页,共七十九页,编辑于2023年,星期四

T3由外部引脚/EW和电源控制寄存器中的PCON.4(WLE)和PCON.l(PD)控制。

EW——看门狗定时器允许,低电平有效。EW=0时,允许看门狗定时器,禁止掉电方式;EW=1时.禁止看门狗定时器,允许掉电方式。

WLE(PCON.4)——看门狗定时器允许重装标志。若WLE置位,定时器T3只能被软件装入,装入后WLE自动清除。定时器T3的重装和溢出,产生复位的时间间隔,由装入T3的值决定,对于8×C552,其监视间隔可编程为2ms至2×255ms。定时器T3的工作过程:在T3溢出时,复位8XC552,并产生复位脉冲输出至复位引脚RST。为防止系统复位,必须在定时器T3溢出前,通过软件对其进行重装。如果发生软件或硬件故障,将使软件对定时器T3重装失败,第三十四页,共七十九页,编辑于2023年,星期四从而T3溢出导致复位信号的产生。用这样的方法可以在软件失控时,恢复程序的正常运行。 首先要确定系统能在不正常状态下维持多久,这段时间就设定为监视定时器的最大间隔时间。因为T3是加1计数器,T3中装入0,则监视时间间隔最长,装入值为FFH时,监视时间间隔最短。 在软件调试时,可以把EW接高电平以禁止看门狗工作,软件调试结束后再把EW接至低电平,通过人为制造故障,观察看门狗工作是否正常。 下面一段程序显示了如何控制看门狗工作的。

第三十五页,共七十九页,编辑于2023年,星期四例:watchdog使用的一段程序如下: T3 EQU 0FFH;定时器T3的地址PCONEQU 87H;电源控制寄存器PCON的地址WATCH_INTVEQU156;看门狗的时间间隔(2X100ms)

插在用户程序中对看门狗需要重新装入的地方:LCALLWATCHDOG看门狗的服务子程序:WATCHDOG:ORLPCON,#10H ;允许定时器T3重装 MOVT3,#WATCH_INTV;装载定时器T3 RET

第三十六页,共七十九页,编辑于2023年,星期四

⒈定时器/计数器溢出率的计算

定时器/计数器运行前,在其中预先置入的常数,称为定时常数或计数常数(TC)。由于计数器是加1(向上)计数的,故而预先置入的常数均应为补码。其中:

t——定时时间。 Tc——机器周期。

6.5定时器/计数器的应用编程

6.5.1定时器的应用第三十七页,共七十九页,编辑于2023年,星期四

Fosc——晶体振荡器频率。 L——计数器的长度。对于T0及T1: 方式0 L=13213=8192 方式1 L=16216=65536 方式2 L=828=256对于T2: L=16216=65536 TC——定时器/计数器初值,即定时常数或计数常数。 定时时间的倒数即为溢出率,即:第三十八页,共七十九页,编辑于2023年,星期四根据要求的定时时间t、设定的定时器工作方式(确定L)及晶体振荡频率fosc,可计算出TC值(十进制数),再将其转换成二进制数TCB,然后再分别送入THi、TLi(对于T0,i=0;对于T1,i=l)。 对于定时器/计数器T0、T1:方式0时:TCB=TCH+TCL,TCH——高8位,TCL—低5位MOV THi,#TCH ;送高8位MOV TLi,#TCL ;送低5位(高3位为0)方式1时:TCB=TCH+TCL,TCH——高8位,TCL—低8位MOV THi,#TCH ;送高8位MOV TLi,#TCL ;送低8位。方式2时:TCB——8位重装载MOVTHi,#TCB ;送高8位

第三十九页,共七十九页,编辑于2023年,星期四MOVTLi,#TCB ;送低8位。对于定时器/计数器T2:与T0、T1的方式1相同例1.要求在P1.0引脚上产生周期为2ms的方波输出。 已知晶体振荡器的频率为fosc=6MHz。可使用T0作定时器,设为方式0,设定lms的定时,每隔1ms使P1.0引脚上的电平变反。(1)解:定时常数计算振荡器的频率fosc=6MHz,机器周期为2μs,方式0计数器长度L=13(213=8192),定时时间t=1ms=0.001s定时常数:第四十页,共七十九页,编辑于2023年,星期四TC为7692=1E0CH,二进制数TCB=00011110000

01100B,取低13位,其中高8位TCH=F0H,低5位为TCL=0CH.计数长度为1E0CH=7692,定时为(8192—7692)×2μs=0.001STMOD的设定(即控制字)(2)编程 ORG 0000H AJMP MAIN

第四十一页,共七十九页,编辑于2023年,星期四

ORG 000BH ;T0中断矢量 AJMPINQP ORG 0030HMAIN: MOVTMOD,#00H;写控制字,设T0为定时器 ;方式0

MOV TH0,#0F0H;写定时常数(定时1ms)

MOV TL0,#0CH SETB TR0 ;启动T0

SETB ET0;允许T0中断

SETB EA;开放CPU中断

AJMP $ ;定时中断等待

第四十二页,共七十九页,编辑于2023年,星期四

ORG XXXXH ;T0中断服务程序

INQP:MOVTH0,#0F0H ;重写定时常数

MOV TL0,#0CH CPL P1.0 ;P1.0变反输出

RETI ;中断返回

例2.使用T1的方式1,设定1ms的定时。同样,在P1.0引脚上产生周期为2ms的方波输出。晶体振荡器的频率为fosc=6MHz。⑴解:

定时常数计算振荡器的频率fosc=6MHz=6×106Hz,方式1计数器长度L=16,2L=216=65536定时时间t=1ms=0.001s定时常数第四十三页,共七十九页,编辑于2023年,星期四定时常数TC转换成二进制TCB=1111111000001100B=FE0CH所以TCH=FEH(高8位),TCL=0CH(低8位)TMOD的设定(即控制字)第四十四页,共七十九页,编辑于2023年,星期四⑵

编程 ORG0000H AJMPMAIN ORG 000BH ;T0中断矢量地址 AJMPINQP ORG 100H ;主程序入口MAIN:MOVTMOD,#10H ;写控制字,T1为定时器、 ;方式1 MOV TH1,#0FEH ;写定时常数,定时1ms MOV TL1,#0CH SETB TR1 ;启动T1

第四十五页,共七十九页,编辑于2023年,星期四

SETB ET1 ;允许T1中断

SETB EA ;开放CPU中断 AJMP $ ORG 00XXH ;中断服务程序INQP:MOVTH1,#0FEH ;重写定时常数 MOV TL1,#0CH CPL P1.0 ;P1.0变反输出 RETI ;中断返回第四十六页,共七十九页,编辑于2023年,星期四例3.欲用80C51产生两个方波,一个周期为200μs,另一个周期为 400μs,该80C51同时使用串行口,用定时器/计数器作为 波特率发生器。⑴这时T0采用方式3工作,其中,TL0产生200μs定时,由P1.0输出方波;TH0产生400μs定时,由Pl.1输出方波;T1设置为方式2作波特率发生器用。focs=9.216MHz。第四十七页,共七十九页,编辑于2023年,星期四

定时常数计算•TL0定时常数为TCL0:tl0=100μs单位μs,为十进数制数值。十六进制数值为TCBL0=B3H。•TH0定时常数为TCH0:定时时间为th0=200μs单位μs,为十进制数值。十六进制的值为TCBH0=66H。•TH1的波特率(详细计算见串行口部分)设波特率为2400,则定时常数为TC2=F6H第四十八页,共七十九页,编辑于2023年,星期四⑵编程 ORG 0000H AJMP MAIN ORG 000BH ;TL0的中断入口 AJMPITL0 ORG 00lBH ;TH0的中断入口 AJMPITH0 ORG0100HMAIN: MOVSP,#60H ;设栈指针 MOV TMOD,#23H ;设T0为方式3,TI为2

第四十九页,共七十九页,编辑于2023年,星期四 MOV TL0,#0B3H;设TL0初值(100μs定时) MOV TH0,#66H;设TH0初值(200μs定时) MOV TL1,#0F6H;设TL1初值(波特率为2400) MOV TH1,#0F6H;设TH1初值 SETB TR0;启动TL0 SETB TR1;启动TH0 SETB ET0;允许TL0中断 SETB ET1;允许TH0中断 SETB EA;CPU中断开放 AJMP $

第五十页,共七十九页,编辑于2023年,星期四 ORG 0200HITL0:MOVTL0,#0B3H ;重装定时常数 CPL P1.0 ;输出方波(200μs) RETIITH0:MOVTH0,#66H ;重装定时常数 CPL P1.1 ;输出方波(400μs) RETI第五十一页,共七十九页,编辑于2023年,星期四 当TMOD寄存器中C/T位设置为“1”时,定时器/计数器作为计数器使用,可对来自单片微机引脚T0或T1上的负跳变脉冲进行计数,计数溢出时可申请中断,也可查询溢出标志位TFx。例4.假如一个用户系统已使用了二个外部中断源,即INT0和,INT1,用户系统要求从P1.0引脚上输出一个5KHz的方波,并要求采用定时器/计数器作为串行口的波特率发生器,另外还需要再增加一个外部中断源。 ⑴为了不增加其他硬件开销,可以把T0设置为方式3,这时可把单片微机的引脚T0作为外部中断源,TL0设置为计数器,但计数器的定时常数设为FFH,这样当T0引脚上出现从“1”至“0”的负跳变时,TL0计数溢出,申请中断,相当于一个边沿触发的外部中断源。6.5.2计数器的应用

第五十二页,共七十九页,编辑于2023年,星期四 在T0方式3下,TH0只能做8位定时器,用来产生5KHz方波的定时。TH0只能做8位定时器,用来产生5KHz方波的定时。当T0设置为方式3之后,T1就作为串行口的波特率发生器,设为方式2。 由P1.0引脚上输出5KH频率的方波,而方波周期为200μs,则要求定时时间为100μs,若采用12MHz的晶体振荡器,则机器周期为1μs。计算时间常数:(28-TC)×1μs=100μs ∴TC=256-100=156⑵编程: ORG 0000H SJMP MAIN ORG 000BH AJMP TL0INT ;TL0中断入口

第五十三页,共七十九页,编辑于2023年,星期四

ORG 001BH AJMP TH0INT ;TH0中断入口 ORG 0030HMAIN: MOV TMOD,#27H;设T0为方式3,TL0为计数 ;器方式,TH0为定时器方式,T1作波特率发生器,方式2。 MOV TH0,#156 ;TH0定时常数。 MOV TL0,#0FFH ;TL0计数常数 MOV TL1,#BAUD ;BAUD根据波特率算出 ;的时间常数。 MOV TH1,#BAUD ;BAUD MOV TCON,#55H;置TR0和TR1为“1”,启 ;动TL0和TH0。

第五十四页,共七十九页,编辑于2023年,星期四

SETB ET0 ;允许TR0中断 SETB ET1 ;允许TR1中断 SETB EA ;允许CPU中断 SJMP $ ;中断等待。 ORG 0100HTL0INT: MOV TL0,#0FFH ;重置计数长度 (中断处理) RETITH0INT: MOV TH0,#156 ;重置定时常数 CPL P1.0 ;P1.0引脚输出方波 RETI第五十五页,共七十九页,编辑于2023年,星期四

门控位GATE可用作对INTx引脚上的高电平持续时间进行计量。当GATE位设为“1”,并设定时器/计数器启动位TRx为“1”,这时定时器/计数器定时完全取决于INTx引脚,仅当INTx引脚电平为“1”时,定时器才工作,换另一角度看,定时器实际记录的时间就是相应INTx引脚上高电平的持续时间。通过反相器,则可测得相应INTx引脚上低电平的持续时间。二个时间的和即为INTx引脚上输入波形的周期,其倒数即为INTx引脚上输入波形的频率。还可算出占空比等参数。

例5.利用定时器/计数器测定图6-11(下页)所示波形的一个周期长度。 利用门控信号GATE启动定时器的方法。设如图示,T0为定时器,为高电平时,启动定时器;T1为计数器,T1的电平由1到0,计数器计数。6.5.3门控位GATE的应用第五十六页,共七十九页,编辑于2023年,星期四P3.3(INT1)TR1置1T1开始计时TR1清零图6–11波形脉冲宽度测试原理编程:⑴查询法 ORG 0000HSTART: MOV TMOD,#90H ;设置T1为定时器, ;方式1,GATA位置“1” MOV TL1,#00H ;置为最大定时值 MOV TH1,#00H LP1: JB P3.3,LP1 ;P3.3为高电平,等待第五十七页,共七十九页,编辑于2023年,星期四

SETB TR1 ;当P3.3为低电平时,置TR1位为“1”LP2: JNB P3.3,LP2 ;当P3.3为低电平时,再等待LP3: JB P3.3,LP3 ;当P3.3为高电平时,T1开始定时计数 CLR TR1 ;当P3.3为低电平时,高电平脉宽定 ;时计数结束 SJMP $ 当fosc=12MHz时,机器周期为1μs,本方案最大被测脉冲宽度为65536μs(65.536ms)。由于靠软件进行启动和停止计数,存在一定的测量误差。 若被测波形除了接至P3.3,另外同时通过一个反相器接至P3.2(INT0),则通过编程同时可以测得波形的高电平宽度和低电平宽度。第五十八页,共七十九页,编辑于2023年,星期四⑵中断法

对于脉冲宽度大于65.536ms的脉冲,可以采用对定时溢出次数进行计数的方法。这样,脉宽为(定时溢出时间×溢出次数)+定时时间。利用定时器/计数器来测定脉冲周期的方法参见图6-12。(1)设定晶体振荡器为6MHz,机器周期Tc为2μs,定时器/计数器T0为方式1,定时溢出时间为100ms,

则T0定时时间常数为:(TH0)=3CH,(TL0)=B0H 因为外部脉冲同时接至T1的输入引脚T1,所以T1脚上对下降沿计数二次,即为外部脉冲的一个周期时间。现设T1为计数器。计数值为2。当计数值为1时,启动定时器;当计数值为2时,中断计数器T1,并停止定时器T0的定时;第五十九页,共七十九页,编辑于2023年,星期四T1中断优先级设为高于定时器T0。计数初值为FFFEH:(TH1)=FFH,(TL0)=FEH。(2)编程 ORG 0000H SJMP MAIN ORG 000BH ;定时器T0中断入口 AJMP TIMEO

ORG 00IBH ;定时器T1中断入口 AJMPTIMEI

第六十页,共七十九页,编辑于2023年,星期四 ORG 0030HMAIN:MOVR0,#0 ;清除T0定时中断次数计数器MOV TMOD,#59H ;设T0为定时器、方式1, ;门控位GATE=1,设T1为计数器、方式1 MOV TH0,#3CH ;T0定时器初值 MOV TLO,#0B0H MOV TH1,#0FFH ;T1计数器初值 MOV TL1,#0FEH SETB TR0 ;启动T0定时器 SETB TR1 ;启动T1计数器 MOV IP,#08H ;T1中断优先级高于T0

第六十一页,共七十九页,编辑于2023年,星期四

SETB ET1 ;允许T1中断 SETB ET0 ;允许T0中断 SETB EA ;CPU开中断 SETB 20H ;设20H为T1计数中断标志LOOP

温馨提示

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

评论

0/150

提交评论