第六章单片微机的定时器计数器原理及应用_第1页
第六章单片微机的定时器计数器原理及应用_第2页
第六章单片微机的定时器计数器原理及应用_第3页
第六章单片微机的定时器计数器原理及应用_第4页
第六章单片微机的定时器计数器原理及应用_第5页
已阅读5页,还剩87页未读 继续免费阅读

下载本文档

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

文档简介

第六章单片微机的定时器计数器原理及应用第一页,共九十二页,2022年,8月28日第六章

单片微机的定时器/计数器

原理及应用第二页,共九十二页,2022年,8月28日

定时或计数:

1.硬件法 定时功能完全由硬件电路完成,不占用CPU时间。 2.软件法 软件定时是执行一段循环程序来进行时间延时。牺牲了CPU的时间6-1概述

第三页,共九十二页,2022年,8月28日

3.可编程定时器/计数器 通过软件编程来实现定时时间的改变,通过中断或查询方法来完成定时功能或计数功能。 80C51包含有两个16位的定时器/计数器:T0和T1;80C52包含有三个16位的定时器/计数器:T0、T1和T2;在80C51系列的部分产品(如Philips公司的80C552)中,还包含有作看门狗的8位定时器T3。 ◆定时器/计数器的核心是一个加1计数器.其基本功能是计数加1。第四页,共九十二页,2022年,8月28日

◆计数:是对单片微机的T0、T1或T2引脚上输入的一个1到0的跳变进行计数增l。 ◆定时:是对单片微机内部的机器周期进行计数,从而得到定时。 ◆波特率发生器:80C51的定时器/计数器还可用作串行接口的波特率发生器。第五页,共九十二页,2022年,8月28日T0、T1的内部结构简图示于图6-1中。T0、T1由以下几部分组成:

计数器TH0、TL0和TH1、TL1;

特殊功能寄存器TMOD、TCON;

时钟分频器;

输入引脚T0、T1。6.2定时器/计数器T0、T1第六页,共九十二页,2022年,8月28日

⒈T0、T1的方式寄存器——TMOD

TMOD的格式如下:低4位定义T0高4位定义T16.2.1与定时器/计数器T0、T1有关的

特殊功能寄存器

第七页,共九十二页,2022年,8月28日D7 D6 D5D4 D3D2D1D0GATEC/TM1M0GATEC/TM1M0T1T0◆GATE 门控位

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

第八页,共九十二页,2022年,8月28日◆C/T:功能选择位 ●C/T=1时,选择计数功能; ●C/T=0时,选择定时功能。①定时器,设置C/T=0计数输入信号是内部时钟脉冲,每个机器周期使计数器的值增1。计数速率为振荡周期的1/12。当采用12MHz的晶体时,计数速率为1MHz。 定时器的定时时间,与系统的振荡频率fosc、计数器的长度和初始值等有关。

第九页,共九十二页,2022年,8月28日②计数器,设置C/T=1 通过引脚T0和T1对外部信号进行计数。在每个机器周期的S5P2期间,CPU采样引脚的输入电平。若前一机器周期采样值为1,下一机器周期采样值为0,则计数器增1。第十页,共九十二页,2022年,8月28日

◆M1、M0:工作方式选择位。有4种工作方式,如表6-1所示。⒉定时器/计数器T0、T1的控制寄存器——TCON

位地址

8FH8EH8DH8CH8BH8AH89H88H位功能

TF1TR1TF0TR0IE1IT1IE0IT0第十一页,共九十二页,2022年,8月28日

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

TR1:T1的运行控制位。 用软件控制,置l时,启动T1;清0时,停止T1。

第十二页,共九十二页,2022年,8月28日

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

TR0:T0的运行控制位。 用软件控制,置1时,启动T0;清0时,停止T0。第十三页,共九十二页,2022年,8月28日

IE1:外部中断1下降沿触发标志位。

IE0:外部中断0下降沿触发标志位。

IT1:外部中断1触发类型选择位。

IT0:外部中断0触发类型选择位。

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

⒊T0、T1的数据寄存器 由TH1、TL1和TH0、TL0寄存器所组成。复位后,这4个寄存器全部清零。第十四页,共九十二页,2022年,8月28日⒋定时器/计数器中断⑴中断允许寄存器IE

EA:中断允许总控制位

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

第十五页,共九十二页,2022年,8月28日⑶中断优先级寄存器IP

PT0位、PT1位、PT2位--T0、T1和T2中断优先级控制位。 某位为0,则相应的定时器/计数器的中断为低优先级; 某位为1,则相应的定时器/计数器的中断为高优先级。第十六页,共九十二页,2022年,8月28日

T0可选择4种不同的工作方式,而T1只具有3种工作方式(即方式0、方式1和方式2)。⒈方式0 13位定时器/计数器 TMOD中的M1=0、M0=0。方式0时的结构如图6-2所示。计数寄存器由13位组成,即THx高8位(作计数器)和TLx的低5位(32分频的定标器)构成。计数时,TLx的低5位溢出后向THx进位,THx溢出后将TFx置位,并向CPU申请中断。从图6–2中可看到: C/T位的电平为0或1,用来设定是作定时器或计数器。6.2.2定时器/计数器T0、T1的工作方式

第十七页,共九十二页,2022年,8月28日 门控位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也可以由程序查询和清零。

第十八页,共九十二页,2022年,8月28日⒉方式1 16位定时器/计数器

TMOD中的M1=0、M0=l。方式1时,T0、T1的逻辑结构如图6-3所示。 计数时,TLx溢出后向THx进位,THx溢出后将TFx置位,如果中断允许,CPU响应中断并转入中断服务程序,由内部硬件清TFx。TFx也可以由程序查询和清零。

第十九页,共九十二页,2022年,8月28日⒊方式2 定时常数自动重装载的8位定时器/计数器

TMOD中的M1=1、M0=0。将16位计数寄存器分为两个8位寄存器,组成一个可重载的8位计数寄存器。方式2时定时器/计数器T0、T1的逻辑结构如图6-4所示。在方式2中,TLx作为8位计数寄存器,THx作为8位计数常数寄存器。第二十页,共九十二页,2022年,8月28日当TLx计数溢出时,将TFx置位,并向CPU申请中断;将THx的内容重新装入TLx中,继续计数。重新装入不影响THx的内容。方式2适合于作为串行口波特率发生器使用。第二十一页,共九十二页,2022年,8月28日⒋方式3TMOD中的M1=l、M0=1。将T0分为一个8位定时器/计数器TL0和一个8位定时器TH0。T1停止计数。方式3时T0、T1逻辑结构分别如图6–5、图6–6。第二十二页,共九十二页,2022年,8月28日⑴工作方式3下的定时器/计数器T0方式3时,T0的结构见图6–5所示。TL0:8位定时器/计数器,它占用了T0的GATE、INT0、启动/停止控制位TR0、T0引脚以及计数溢出标志位TF0和T0的中断矢量等。TH0:作为8位定时器用,此时的外部引脚T0已为定时器/计数器TL0所占用。这时它占用了定时器/计数器T1的启动/停止控制位TR1、计数溢出标志位TF1及T1中断矢量(地址为001BH)。第二十三页,共九十二页,2022年,8月28日

⑵工作方式3下的定时器/计数器T1T1的结构如图6–6所示,T1只可选方式0、1或2。作串行口波特率发生器时,T1的计数输出直接去串行口,只需设置好工作方式,串行口波特率发生器自动开始运行,如要停止工作,只需向T1送一个设为工作方式3的控制字即可。

第二十四页,共九十二页,2022年,8月28日

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

6.3定时器/计数器T2第二十五页,共九十二页,2022年,8月28日

⒈控制寄存器T2CON

位地址

CFHCEHCDHCCHCBHCAHC9HC8H位功能

TF2EXF2RCLKTCLKEXEN2TR2C/T2CP/RL2

6.3.1T2中的

特殊功能寄存器

第二十六页,共九十二页,2022年,8月28日TF2——T2溢出标志定时器T2溢出时置位,并申请中断。只能靠软件清除。但在波特率发生器方式下,也即RCLK=1或TCLK=1时,定时器溢出不对TF2置位。

EXF2——T2外部标志当EXEN2=1,且T2EX引脚上出现负跳变而造成捕获或重装载时EXF2置位,申请中断。若已允许T2中断,CPU将响应中断,转向中断服务程序。EXF2要靠软件来清除。第二十七页,共九十二页,2022年,8月28日

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

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

EXEN2:T2外部允许标志。 第二十八页,共九十二页,2022年,8月28日

软件设置或清除,以允许或禁止用外部信号来触发捕获或重装载操作。当EXEN2=l时,若T2未用作串行口的波特率发生器,则在T2EX端出现的信号负跳变时,将造成T2捕获或重装载,并置EXF2标志为1,请求中断。EXEN2=0时,T2EX端的外部信号不起作用。TR2——T2运行控制位。软件设置或清除,TR2=1,启动T2,否则停止。

第二十九页,共九十二页,2022年,8月28日C/T2:T2的定时器方式或计数器方式选择位。C/T2=0时,选择定时器工作方式。TH2和TL2对机器周期进行计数。每个机器周期使TL2寄存器的值增1。计数脉冲的频率为1/12振荡器频率。

C/T2=1时,选择计数器工作方式,下降沿触发。计数脉冲自T2引脚输入,TH2和TL2作外部信号脉冲计数器用,每当外部脉冲负跳变时,计数器值增1。

第三十页,共九十二页,2022年,8月28日CP/RL2:捕获/重装载标志。

CP/RL2=l选择捕获功能,这时若EXEN2=1,且T2EX端的信号负跳变时,发生捕获操作。CP/RL2=0,选择重装载功能,这时若T2溢出或在EXEN2=1条件下T2EX端信号负跳变,都会造成自动重装载操作。当RCLK=l或TCLK=l时,CP/RL2控制位不起作用,T2被强制工作于重装载方式。重装载发生于T2溢出时,常用来作波特率发生器。第三十一页,共九十二页,2022年,8月28日⒉方式控制寄存器——T2MOD

D7D6D5D4D3D2D1D0------T2OEDCEN

T2OE:T2输出允许位。 当T2OE=1时,允许时钟输出至T2引脚。 仅对80C54/80C58有定义。DCEN:向下计数允许位 DCEN=1,T2向下(减)计数 DCEN=0,T2向上(加)计数第三十二页,共九十二页,2022年,8月28日⒊

数据寄存器:TH2、TL2

T2有一个16位的数据寄存器,是由高8位寄存器TH2和低8位寄存器TL2所组成。它们都只能字节寻址,相应的字节地址为CDH和CCH。复位后,这两个寄存器全部清零。第三十三页,共九十二页,2022年,8月28日⒋

捕获寄存器:RCAP2H、RCAP2L

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

捕获方式

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

第三十五页,共九十二页,2022年,8月28日捕获操作发生于下述两种情况下:(1)寄存器TH2和TL2溢出时,打开重装载三态缓冲器,把TH2和TL2的内容自动读入到捕获寄存器RCAP2H和RCAP2L中。同时,溢出标志TF2置1,申请中断。⑵当EXEN2=l且T2EX(P1.1)端的信号有负跳变时,将发生捕获操作。同时标志EXF2置1,申请中断。若T2的中断是被允许的,则无论发生TF2=l还是EXF2=l,CPU都会响应中断。响应中断后,应用软件清除中断申请。第三十六页,共九十二页,2022年,8月28日

⒉自动重装载方式

在一定条件下,自动地将捕获寄存器RCAP2H和RCAP2L的数据装入计数器TH2和TL2中。 捕获寄存器RCAP2H和RCAP2L在这里起预置计数初值的功能。对8XC52,其工作原理可参见图6-8。当CP/RL2=0时,选择自动重装载方式。 若T2的中断是被允许的,则无论发生TF2=1还是EXF2=1,CPU都会响应中断,此中断向量的地址为002BH。响应中断后,应用软件撤除中断申请。TF2和EXF2都是直接可寻址位,可采用CLRTF2和CLREXF2指令实现撤除中断申请的功能。

第三十七页,共九十二页,2022年,8月28日⒊波特率发生器方式

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

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

第三十八页,共九十二页,2022年,8月28日

由于脉冲溢出时,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可以作为一个附加的外部中断源。

第三十九页,共九十二页,2022年,8月28日

T3俗称看门狗(watchdog),它的作用是强迫单片微机进入复位状态,使之从硬件或软件故障中解脱出来。在实际应用中,由于现场的各种干扰或者程序设计错误,可能使单片微机的程序进入了“

死循环”

或“

非程序区”(如表格数据区)之后,在一个设定的时间内,假如用户程序没有重装T3,监视电路将产生一个系统复位信号,强迫单片微机退出“

死循环”

或“

非程序区”

,重新进行“

冷启动”

或“

热启动”

在飞利浦80C552中,T3由一个11位的分频器和8位定时器T3组成,如图6一10所示。6.4监视定时器(看门狗)T3

第四十页,共九十二页,2022年,8月28日预分频器输入为晶振1/12的信号,晶振为12MHz时,输入为1MHz,而8位定时器T3每隔时间t加1: t=12×2048/fosc 当晶振为12MHz时,t为2.048ms。若8位定时器溢出,则产生一个尖脉冲,它将复位8×C552,同时在RST引脚上也将产生1个正的复位尖脉冲。T3由外部引脚EW和电源控制寄存器中的PCON.4(WLE)和PCON.l(PD)控制。

EW:看门狗定时器允许,低电平有效。EW=0时,允许看门狗定时器,禁止掉电方式;EW=1时.禁止看门狗定时器,允许掉电方式。第四十一页,共九十二页,2022年,8月28日

WLE:看门狗定时器允许重装标志。若WLE置位,定时器T3只能被软件装入,装入后WLE自动清除。 T3的重装和溢出,产生复位的时间间隔,由装入T3的值决定,对于8×C552,其监视间隔可编程为2.048ms~2.048×255ms。 T3的工作过程:在T3溢出时,复位8XC552,并产生复位脉冲输出至复位引脚RST。为防止系统复位,必须在定时器T3溢出前,通过软件对其进行重装。如果发生软件或硬件故障,将使软件对定时器T3重装失败,从而T3溢出导致复位信号的产生。第四十二页,共九十二页,2022年,8月28日

首先要确定系统能在不正常状态下维持多久,这段时间就设定为监视定时器的最大间隔时间。T3是加1计数器,T3中装入0,则监视时间间隔最长,装入值为FFH时,监视时间间隔最短。

第四十三页,共九十二页,2022年,8月28日例:watchdog使用的一段程序如下: T3 EQU 0FFH;定时器T3的地址PCONEQU 87H;电源控制寄存器PCON的地址WATCH_INTVEQU156;看门狗的时间间隔(2.048×100ms)

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

第四十四页,共九十二页,2022年,8月28日

⒈定时器/计数器溢出率的计算 定时器/计数器运行前,在数据寄存器中预先置入的常数,称为定时常数或计数常数TC。由于计数器是加1(向上)计数的,故而预先置入的常数均应为补码。其中: t:定时时间。 Tc:机器周期。Fosc:晶体振荡器频率。 L:计数器的长度。

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

6.5.1定时器的应用

第四十五页,共九十二页,2022年,8月28日T0及T1: 方式0 L=13213=8192 方式1 L=16216=65536 方式2 L=828=256 TC:定时器/计数器初值,即定时常数或计数常数。 定时时间的倒数即为溢出率,即:

第四十六页,共九十二页,2022年,8月28日根据要求的定时时间t、设定的定时器工作方式(确定L)及晶体振荡频率fosc,可计算出TC值(十进制数),再将其转换成二进制数TCB,然后再分别送入THi、TLi。

第四十七页,共九十二页,2022年,8月28日对于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位 MOVTLi,#TCB;送低8位。

第四十八页,共九十二页,2022年,8月28日 已知晶体振荡器的频率为fosc=6MHz。可使用T0作定时器,设为方式0,设定1ms的定时,每隔1ms使P1.0引脚上的电平变反。(1)解:定时常数计算振荡器的频率fosc=6MHz,机器周期为2μs,方式0计数器长度L=13(213=8192),定时时间t=1ms=0.001s定时常数:例.要求在P1.0引脚上产生周期为2ms的方波输出第四十九页,共九十二页,2022年,8月28日TC为7692=1E0CH,二进制数TCB=00011110000

01100B,取低13位,其中高8位TCH=F0H,低5位为TCL=0CH.计数长度为1E0CH=7692,定时为(8192—7692)×2μs=0.001STMOD的设定

第五十页,共九十二页,2022年,8月28日(2)编程 ORG 0000H AJMP MAIN ORG 000BH ;T0中断矢量 AJMPINQP ORG 0030HMAIN: MOVTMOD,#00H;设T0为定时器方式0 MOV TH0,#0F0H;写定时常数(定时1ms)

MOV TL0,#0CH

第五十一页,共九十二页,2022年,8月28日

SETB TR0 ;启动T0

SETB ET0 ;允许T0中断

SETB EA ;开放CPU中断

AJMP$ ;定时中断等待

ORG 2000H ;T0中断服务程序

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

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

RETI ;中断返回

第五十二页,共九十二页,2022年,8月28日 使用T1的方式1,设定1ms的定时。在P1.0引脚上产生周期为2ms的方波输出。晶体振荡器的频率为fosc=6MHz。⑴解:

定时常数计算振荡器的频率fosc=6MHz=6×106Hz,方式1计数器长度L=16,2L=216=65536定时时间t=1ms=0.001s例第五十三页,共九十二页,2022年,8月28日定时常数TC转换成二进制TCB=1111111000001100B=FE0CHTCH=FEH,TCL=0CHTMOD的设定定时常数第五十四页,共九十二页,2022年,8月28日⑵

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

第五十五页,共九十二页,2022年,8月28日

SETB ET1 ;允许T1中断

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

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

第五十九页,共九十二页,2022年,8月28日 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 $

第六十页,共九十二页,2022年,8月28日 ORG 0200HITL0:MOVTL0,#0B3H ;重装定时常数 CPL P1.0 ;输出方波1(200μs) RETIITH0:MOVTH0,#66H ;重装定时常数 CPL P1.1 ;输出方波2(400μs) RETI第六十一页,共九十二页,2022年,8月28日

当TMOD寄存器中C/T位设置为“1”时,作为计数器使用,可对来自单片微机引脚T0或T1上的负跳变脉冲进行计数,计数溢出时可申请中断,也可查询溢出标志位TFx。例.假如一个用户系统已使用了两个外部中断源,即INT0和INT1,用户系统要求从P1.0引脚上输出一个5kHz的方波,并要求采用定时器/计数器作为串行口的波特率发生器,另外还需要再增加一个外部中断源。 6.5.2计数器的应用

第六十二页,共九十二页,2022年,8月28日⑴把T0设置为方式3,把T0作为外部中断源,TL0设置为计数器,计数器的定时常数设为FFH,相当于一个边沿触发的外部中断源。而在T0方式3下,TH0只能做8位定时器,用来产生5KHz方波的定时。当T0设置为方式3之后,T1就作为串行口的波特率发生器,设为方式2。

由P1.0引脚上输出5kHz频率的方波,而方波周期为200μs,则要求定时时间为100μs,若采用12MHz的晶体振荡器,则机器周期为1μs。

第六十三页,共九十二页,2022年,8月28日计算时间常数:(28-TC)×1μs=100μs ∴TC=256-100=156⑵编程: ORG 0000H SJMP MAIN ORG 000BH AJMP TL0INT ;TL0中断入口

ORG 001BH AJMP TH0INT ;TH0中断入口

第六十四页,共九十二页,2022年,8月28日

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 MOV TCON,#55H;置TR0和TR1为“1”,启 ;动TL0和TH0第六十五页,共九十二页,2022年,8月28日

SETB ET0 ;允许TL0中断 SETB ET1 ;允许TH0中断 SETB EA ;允许CPU中断 SJMP $ ;中断等待 ORG 0100HTL0INT: MOV TL0,#0FFH ;重置计数长度 (中断处理) RETITH0INT: MOV TH0,#156 ;重置定时常数 CPL P1.0 ;P1.0引脚输出方波 RETI第六十六页,共九十二页,2022年,8月28日

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

例.利用定时器/计数器测定图6-11所示波形的一个周期长度。 利用门控信号GATE启动定时器的方法。T1为定时器时,当TR1=1且为高电平时,才启动定时器;而定时器/计数器T1为计数器时,T1的电平由1到0,计数器计数。INT1(P3.3)TR1置1T1开始计时TR1清零图6–11波形脉冲宽度测试原理第六十八页,共九十二页,2022年,8月28日⑴查询法 ORG 0000HSTART: MOV TMOD,#90H ;设置T1为定时器, ;方式1,GATE位置1 MOV TL1,#00H ;置为最大定时值 MOV TH1,#00H LP1: JB P3.3,LP1 ;P3.3为高电平,等待SETBTR1 ;当P3.3为低电平时,;置TR1位为1LP2: JNB P3.3,LP2 ;当P3.3为低电平时,再等待第六十九页,共九十二页,2022年,8月28日

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),则通过编程同时可以测得波形的高电平宽度和低电平宽度。第七十页,共九十二页,2022年,8月28日⑵中断法

对于脉冲宽度大于65.536ms的脉冲,可以采用对定时溢出次数进行计数的方法。这样,脉宽为(定时溢出时间×溢出次数)+定时时间。利用定时器/计数器来测定脉冲周期的方法参见图6-12。(1)设定晶体振荡器为6MHz,机器周期Tc为2μs,定时器/计数器T0为方式1,定时溢出时间为100ms,则T0定时时间常数为:(TH0)=3CH,(TL0)=B0H 因为外部脉冲同时接至T1的输入引脚T1,所以T1脚上对下降沿计数二次,即为外部脉冲的一个周期时间。现设T1为计数器。计数值为2。第七十一页,共九十二页,2022年,8月28日当计数值为1时,启动定时器;当计数值为2时,中断计数器T1,并停止定时器T0的定时。T1中断优先级设为高于定时器T0。计数初值为FFFEH:(TH1)=FFH,(TL0)=FEH。(2)ORG 0000H SJMP MAIN ORG 000BH ;定时器T0中断入口 AJMP TIMEO

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

第七十二页,共九十二页,2022年,8月28日 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

第七十三页,共九十二页,2022年,8月28日

SETB TR0 ;启动T0定时器 SETB TR1 ;启动T1计数器 MOV IP,#08H;T1中断优先级高于T0 SETB ET1 ;允许T1中断 SETB ET0 ;允许T0中断 SETB EA ;CPU开中断 SETB 20H ;设20H为T1计数中断标志LOOP: SETBF0 ;设F0为T0定时中断标志

JB F0,$ ;T0定时未溢出,等待 JB 20H,LOOP ;判T1若未溢出则循环

温馨提示

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

评论

0/150

提交评论