nullnull普通高等教育“十一五”国家级
规划
污水管网监理规划下载职业规划大学生职业规划个人职业规划职业规划论文
教材
单片微型计算机原理与接口技术
(第二版)
高锋 编著
科学出版社
北京第六章
单片微机的定时器/计数器
原理及应用第六章
单片微机的定时器/计数器
原理及应用6-1 概述
定时或计数:
1.硬件法
定时功能完全由硬件电路完成,不占用CPU时间。
2.软件法
软件定时是执行一段循环程序来进行时间延时。
牺牲了CPU的时间6-1 概述
null 3.可编程定时器/计数器
通过软件编程来实现定时时间的改变,通过中断或查询方法来完成定时功能或计数功能。
80C51包含有两个16位的定时器/计数器:T0和T1;80C52包含有三个16位的定时器/计数器:T0、T1和T2;在80C51系列的部分产品(如Philips公司的80C552)中,还包含有作看门狗的8位定时器T3。
◆定时器/计数器的核心是一个加1计数器.其基本功能是计数加1。
null ◆计数:是对单片微机的T0、T1 或T2引脚上输入的一个1到0的跳变进行计数增l。
◆定时:是对单片微机内部的机器周期进行计数,从而得到定时。
◆波特率发生器:80C51的定时器/计数器还可用作串行接口的波特率发生器。
6.2 定时器/计数器T0、T1T0、T1 的内部结构简图示于图6-1中。
T0、T1由以下几部分组成:
计数器TH0、TL0和TH1、TL1;
特殊功能寄存器TMOD、TCON;
时钟分频器;
输入引脚T0、T1。6.2 定时器/计数器T0、T16.2.1 与定时器/计数器T0、T1有关的
特殊功能寄存器
⒈ T0、T1 的方式寄存器——TMOD
TMOD的格式如下:
低4位定义T0
高4位定义T1
6.2.1 与定时器/计数器T0、T1有关的
特殊功能寄存器
nullD7 D6 D5 D4 D3 D2 D1 D0T1T0◆ GATE 门控位
●GATE=1时,由外部中断引脚INT0、INT1和TR0、TR1共同来启动定时器。当INT0引脚为高电平时,TR0置位启动定时器T0;当引脚INT1为高电平时,TR1置位,启动定时器T1。
●GATE=0时,仅由TR0和TR1置位来启动定时器T0和T1。
null◆C/T:功能选择位
●C/T=1时,选择计数功能;
●C/T=0时,选择定时功能。
① 定时器,设置C/T=0
计数输入信号是内部时钟脉冲,每个机器周期使计数器的值增1。计数速率为振荡周期的1/12。当采用12MHz的晶体时,计数速率为1MHz。
定时器的定时时间,与系统的振荡频率fosc、计数器的长度和初始值等有关。
null② 计数器,设置C/T=1
通过引脚T0和T1对外部信号进行计数。在每个机器周期的S5P2期间,CPU采样引脚的输入电平。若前一机器周期采样值为1,下一机器周期采样值为0,则计数器增1。
null ◆M1、M0:工作方式选择位。
有4种工作方式,如
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
6-1所示。
⒉ 定时器/计数器T0、T1 的控制寄存器——TCON
null TF1:T1的溢出标志。
T1溢出时,该位由内部硬件置位。若中断开放,即响应中断,进入中断服务程序后,由硬件自动清0;若中断禁止,可用于判跳,用软件清0。
TR1:T1的运行控制位。
用软件控制,置 l时,启动 T1;清0时,停止 T1。
null TF0:T0的溢出标志。
T0溢出时,该位由内部硬件置位。
中断开放,即响应中断,进入中断服务程序后,由硬件自动清0;
中断禁止,可用于判跳,用软件清0。
TR0:T0的运行控制位。
用软件控制,置1时,启动T0;清 0时,停止 T0。
null IE1:外部中断1下降沿触发标志位。
IE0:外部中断0下降沿触发标志位。
IT1:外部中断1触发类型选择位。
IT0:外部中断0触发类型选择位。
复位后,TCON的所有位均清0。T0和T1均是关中断的。
⒊ T0、T1 的数据寄存器
由TH1、TL1和TH0、TL0寄存器所组成。
复位后,这4个寄存器全部清零。
null⒋ 定时器/计数器中断
⑴ 中断允许寄存器IE
EA:中断允许总控制位
ET0、ET1、ET2:T0、T1和T2的中断允许控制位。
某位=0,则禁止对应定时器/计数器的中断。
某位=1,则允许对应定时器/计数器的中断。
⑵ 中断矢量
定时器T0:000BH
定时器T1:001BH
定时器T2:002BH
null⑶ 中断优先级寄存器IP
PT0位、PT1位、PT2位--T0、T1和T2中断优先级控制位。
某位为0,则相应的定时器/计数器的中断为低优先级;
某位为1,则相应的定时器/计数器的中断为高优先级。
6.2.2 定时器/计数器T0、T1 的工作方式
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 的工作方式
null 门控位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也可以由程序查询和清零。
null⒉ 方式1 16位定时器/计数器
TMOD中的M1=0、M0=l。
方式1时,T0、T1的逻辑结构如图6-3所示。
计数时,TLx溢出后向THx进位,THx溢出后将TFx置位,如果中断允许,CPU响应中断并转入中断服务程序,由内部硬件清TFx。TFx也可以由程序查询和清零。
null⒊ 方式2 定时常数自动重装载的8位定时器/计数器
TMOD中的M1=1、M0=0。
将16位计数寄存器分为两个8位寄存器,组成一个可重载的8位计数寄存器。
方式2时定时器/计数器T0、T1的逻辑结构如图6-4所示。
在方式2中,TLx作为8位计数寄存器,THx作为8位计数常数寄存器。
null当TLx计数溢出时,将TFx置位,并向CPU申请中断;将THx的内容重新装入TLx中,继续计数。
重新装入不影响THx的内容。
方式2适合于作为串行口波特率发生器使用。
null ⒋ 方式3
TMOD中的M1=l、M0=1。
将T0分为一个8位定时器/计数器TL0和一个 8位定时器TH0 。T1停止计数。
方式3时T0、T1逻辑结构分别如图6–5、图6–6 。
null⑴ 工作方式3下的定时器/计数器T0
方式3时,T0的结构见图6–5 所示。
TL0:8位定时器/计数器,它占用了T0的GATE、INT0、启动/停止控制位TR0、T0引脚 以及计数溢出标志位TF0和T0的中断矢量等。
TH0:作为8位定时器用,此时的外部引脚T0已为定时器/计数器TL0所占用。这时它占用了定时器/计数器T1的启动/停止控制位TR1、计数溢出标志位TF1及T1中断矢量(地址为001BH) 。
null ⑵工作方式3下的定时器/计数器T1
T1的结构如图6–6所示, T1只可选方式0、1或2。作串行口波特率发生器时,T1的计数输出直接去串行口,只需设置好工作方式,串行口波特率发生器自动开始运行,如要停止工作,只需向T1送一个设为工作方式3的控制字即可。
6.3 定时器/计数器T2 80C52中的T2是一个16位的、具有自动重装载和捕获能力的定时器/计数器。在T2的内部,除了两个8位计数器TL2、TH2和控制寄存器T2CON及T2MOD之外,还设置有捕获寄存器RCAP2L(低字节)和RCAP2H(高字节)。
T2的计数脉冲源可以有两个:一个是内部机器周期,另一个是由T2(P1.0)端输入的外部计数脉冲。
T2有3种工作方式:自动重装载、搏获和波特率发生器方式,由T2CON中有关位决定。
输入引脚T2是外部计数脉冲输入端;输入引脚T2EX是外部控制信号输入端。
6.3 定时器/计数器T26.3.1 T2中的
特殊功能寄存器
⒈ 控制寄存器 T2CON
6.3.1 T2中的
特殊功能寄存器
nullTF2——T2 溢出标志
定时器T2溢出时置位,并申请中断。只能靠软件清除。但在波特率发生器方式下,也即RCLK=1或TCLK=1时,定时器溢出不对TF2置位。
EXF2——T2外部标志
当EXEN2=1,且T2EX引脚上出现负跳变而造成捕获或重装载时EXF2置位,申请中断。若已允许T2中断,CPU将响应中断,转向中断服务程序。EXF2要靠软件来清除。
null RCLK:接收时钟标志。
软件置位或清除,用以选择T2或T1作串行口接收波特率发生器。RCLK=1时,用T2溢出脉冲作为串行口的接收时钟;RCLK=0时,用T1的溢出脉冲作接收时钟。
TCLK:发送时钟标志。
软件置位或清除,用以选择T2或T1作串行口发送波特率发生器。TCLK=l时,用T2溢出脉冲作为串行口的发送时钟;TCLK=0时,用T1的溢出脉冲作发送时钟。
EXEN2:T2外部允许标志。 null 软件设置或清除,以允许或禁止用外部信号来触发捕获或重装载操作。
当EXEN2=l时,若T2未用作串行口的波特率发生器,则在T2EX端出现的信号负跳变时,将造成T2捕获或重装载,并置EXF2标志为 1,请求中断。
EXEN2=0时,T2EX端的外部信号不起作用。
TR2——T2运行控制位。
软件设置或清除,TR2=1,启动T2,否则停止。
nullC/T2:T2的定时器方式或计数器方式选择位。
C/T2=0时,选择定时器工作方式。TH2和TL2对机器周期进行计数。每个机器周期使TL2寄存器的值增1。计数脉冲的频率为1/12振荡器频率。
C/T2=1时,选择计数器工作方式,下降沿触发。计数脉冲自T2引脚输入,TH2和TL2作外部信号脉冲计数器用,每当外部脉冲负跳变时,计数器值增1。
nullCP/RL2:捕获/重装载标志。
CP/RL2=l选择捕获功能,这时若EXEN2=1,且T2EX端的信号负跳变时,发生捕获操作。
CP/RL2=0,选择重装载功能,这时若T2溢出或在EXEN2=1条件下 T2EX端信号负跳变,都会造成自动重装载操作。当RCLK=l或TCLK=l时,CP/RL2控制位不起作用,T2 被强制工作于重装载方式。重装载发生于T2溢出时,常用来作波特率发生器。
null⒉ 方式控制寄存器——T2MOD
T2OE:T2输出允许位。
当T2OE=1时,允许时钟输出至T2引脚。
仅对80C54/80C58有定义。
DCEN:向下计数允许位
DCEN=1, T2向下(减)计数
DCEN=0, T2向上(加)计数null⒊ 数据寄存器:TH2、TL2
T2有一个16位的数据寄存器,是由高8位寄存器TH2和低8位寄存器TL2所组成。它们都只能字节寻址,相应的字节地址为CDH和CCH。
复位后,这两个寄存器全部清零。 null⒋ 捕获寄存器:RCAP2H、RCAP2L
T2中的捕获寄存器是一个16位的数据寄存器,由高8位寄存器RCAP2H和低8 位寄存器RCAP2L所组成,相应的字节地址为CBH和CAH。
捕获寄存器RCAP2H和RCAP2L,用于捕获计数器TL2、TH2的计数状态,或用来预置计数初值的。TH2、TL2和 RCAP2H、RCAP2L之间接有双向缓冲器(三态门)。
复位后,两个寄存器全部清零。
6.3.2 定时器/计数器T2的工作方式
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的工作方式
null捕获操作发生于下述两种情况下:
(1)寄存器TH2和TL2溢出时,打开重装载三态缓冲器,把TH2和TL2的内容自动读入到捕获寄存器RCAP2H和RCAP2L中。同时,溢出标志TF2置1,申请中断。
⑵ 当 EXEN2=l且 T2EX(P1.1)端的信号有负跳变时,将发生捕获操作。同时标志EXF2置1,申请中断。
若T2的中断是被允许的,则无论发生TF2=l还是EXF2=l,CPU都会响应中断。响应中断后,应用软件清除中断申请。null ⒉ 自动重装载方式
在一定条件下,自动地将捕获寄存器RCAP2H和RCAP2L的数据装入计数器TH2和TL2中。
捕获寄存器RCAP2H和RCAP2L在这里起预置计数初值的功能。对8XC52,其工作原理可参见图6-8。
当CP/RL2=0时,选择自动重装载方式。
若T2的中断是被允许的,则无论发生TF2=1还是EXF2=1,CPU都会响应中断,此中断向量的地址为002BH。响应中断后,应用软件撤除中断申请。TF2 和EXF2都是直接可寻址位,可采用CLR TF2和CLR EXF2指令实现撤除中断申请的功能。
null⒊ 波特率发生器方式
当 T2CON中 RCLK十TCLK= 1,其溢出脉冲用做串行口的时钟。
T2的波特率发生器方式下的结构图示于图6-9中。
RCLK选择串行通信接收波特率发生器,TCLK选择发送波特率发生器,发送和接收的波特率可以不同。
T2的输入时钟可由内部时钟决定,也可由外部脉冲决定。
若C/T2=0,选用内部时钟,对机器周期计数,计数脉冲的频率为1/12振荡器频率.
若C/T2=1,选用外部脉冲,该脉冲由T2端输入,每当外部脉冲负跳变时,计数器值增l。外部脉冲频率不超过振荡器频率的l/24。
null 由于脉冲溢出时,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可以作为一个附加的外部中断源。
6.4 监视定时器(看门狗)T3
T3俗称看门狗(watchdog),它的作用是强迫单片微机进入复位状态,使之从硬件或软件故障中解脱出来。在实际应用中,由于现场的各种干扰或者程序设计错误,可能使单片微机的程序进入了“ 死循环” 或“ 非程序区”(如
表格
关于规范使用各类表格的通知入职表格免费下载关于主播时间做一个表格详细英语字母大小写表格下载简历表格模板下载
数据区) 之后,在一个设定的时间内,假如用户程序没有重装T3,监视电路将产生一个系统复位信号,强迫单片微机退出“ 死循环” 或“ 非程序区” ,重新进行“ 冷启动” 或“ 热启动” 。
在飞利浦80C552中,T3由一个11位的分频器和8位定时器T3组成,如图6一10所示。
6.4 监视定时器(看门狗)T3
null预分频器输入为晶振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时.禁止看门狗定时器,允许掉电方式。
null WLE :看门狗定时器允许重装标志。
若WLE置位,定时器T3只能被软件装入,装入后WLE自动清除。
T3的重装和溢出,产生复位的时间间隔,由装入T3的值决定,对于8×C552,其监视间隔可编程为2.048ms~2.048×255ms。
T3的工作过程:在T3溢出时,复位8XC552,并产生复位脉冲输出至复位引脚RST。为防止系统复位,必须在定时器T3溢出前,通过软件对其进行重装。如果发生软件或硬件故障,将使软件对定时器T3重装失败,从而T3溢出导致复位信号的产生。null 首先要确定系统能在不正常状态下维持多久,这段时间就设定为监视定时器的最大间隔时间。
T3是加1计数器,T3中装入0,则监视时间间隔最长,装入值为FFH时,监视时间间隔最短。
null例:watchdog使用的一段程序如下:
T3 EQU 0FFH ;定时器T3的地址
PCON EQU 87H ;电源控制寄存器PCON的地址
WATCH_INTV EQU 156 ;看门狗的时间间隔(2.048×100ms)
在用户程序中对看门狗需要重新装入的地方,插入:
LCALL WATCHDOG;调用看门狗服务子程序
WATCHDOG:ORL PCON,#10H ;允许定时器T3重装
MOV T3,#WATCH_INTV ;装载定时器T3
RET
6.5 定时器/计数器的应用编程
6.5.1 定时器的应用
⒈ 定时器/计数器溢出率的计算
定时器/计数器运行前,在数据寄存器中预先置入的常数,称为定时常数或计数常数TC。由于计数器是加 1(向上)计数的,故而预先置入的常数均应为补码。
其中:
t:定时时间。
Tc:机器周期。
Fosc:晶体振荡器频率。
L:计数器的长度。
6.5 定时器/计数器的应用编程
6.5.1 定时器的应用
null T0及T1:
方式0 L=13 213=8 192
方式1 L=16 216=65 536
方式2 L=8 28=256
TC:定时器/计数器初值,即定时常数或计数常数。
定时时间的倒数即为溢出率,即:
null 根据
要求
对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗
的定时时间t、设定的定时器工作方式(确定L) 及晶体振荡频率fosc,可计算出TC值(十进制数),再将其转换成二进制数TCB,然后再分别送入THi、TLi。
null对于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位重装载
MOV THi,#TCB ;送高8位
MOV TLi,#TCB;送低8位。
例 .要求在 P1.0引脚上产生周期为2 ms的方波输出 已知晶体振荡器的频率为fosc=6MHz。可使用T0作定时器,设为方式0,设定1ms的定时,每隔1ms使P1.0引脚上的电平变反。
(1) 解:定时常数计算
振荡器的频率fosc=6MHz,机器周期为2μs,方式0计数器长度L=13(213=8 192),定时时间 t=1ms=0.001s
定时常数:
例 .要求在 P1.0引脚上产生周期为2 ms的方波输出nullTC为7692=1E0CH,
二进制数TCB=0 0 0 1 1 1 1 0 0 0 0 0 1 1 0 0 B,取低13位,其中高8位TCH=F0H,低5位为TCL=0CH.计数长度为1E0CH=7692,定时为(8192—7692)×2μs=0.001S
TMOD的设定
null( 2) 编 程 ORG 0000H
AJMP MAIN
ORG 000BH ;T0中断矢量
AJMP INQP
ORG 0030H
MAIN: MOV TMOD,#00H ;设T0为定时器方式0 MOV TH0,#0F0H ;写定时常数(定时1ms)
MOV TL0,#0CH
null SETB TR0 ;启动 T0
SETB ET0 ;允许T0中断
SETB EA ;开放CPU中断
AJMP $ ;定时中断等待
ORG 2000 H ;T0中断服务程序
INQP:MOV TH0,#0F0H ;重写定时常数
MOV TL0,#0CH
CPL P1.0 ;P1.0变反输出
RETI ;中断返回
例 使用T1的方式1,设定1ms的定时。在P1.0引脚上产生周期为2 ms的方波输出。晶体振荡器的频率为fosc=6 MHz。
⑴ 解:
定时常数计算
振荡器的频率fosc=6MHz=6×106Hz,方式1计数器长度
L=16,2L=216=65536 定时时间 t=1ms=0.001s
例null定时常数TC转换成二进制TCB=1 1 1 1 1 1 1 0 0 0 0 0 1 1 0 0 B=F E 0 CH
TCH=FEH,TCL=0CH
TMOD的设定定时常数null⑵ ORG 0000H
AJMP MAIN
ORG 001BH ;T1中断矢量
AJMP INQP
ORG 100H ;主程序入口
MAIN:MOV TMOD,#10H ;T1为定时器方式1
MOV TH1,#0FEH ;写定时常数 ,定时1ms
MOV TL1,#0CH
SETB TR1 ;启动T1
null SETB ET1 ;允许T1中断
SETB EA ;开放CPU中断
AJMP $
ORG 2000 H ;T1中断服务程序
INQP:MOV TH1,#0FEH ;重写定时常数
MOV TL1,#0CH
CPL P1.0 ;P1.0变反输出
RETI ;中断返回例3 欲用80C51产生两个方波,一个方波周期为200μs,另一个方波周期为400μs,该80C51同时使用串行口,用定时器/计数器作为波特率发生器。
⑴ 这时T0采用方式3工作,其中,TL0产生100μs定时,由 P1.0输出方波1;TH0产生200μs定时,由Pl.1输出方波2;T1设置为方式2,作波特率发生器用。fOCC=9.216 MHz。
例3null 定时常数计算
•TL0定时常数为 TCL0:TL0=100μs单位μs,为十进数制数值。十六进制数值为TL0=B3H。
•TH0定时常数为TCH0:定时时间为TH0=200μs单位μs,为十进制数值。十六进制的值为TH0=66 H。•TH1的波特率(详细计算见串行口部分)设波特率为2400,则定时常数为TC2=F6Hnull⑵ 编 程 ORG 0000H
AJMP MAIN
ORG 000BH ;TL0的中断入口
AJMP ITL0
ORG 00lBH ;TH0的中断入口
AJMP ITH0
ORG 0100H
MAIN: MOV SP,# 60H ;设栈指针
MOV TMOD,# 23H ;设T0为方式3,TI为2
null 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 $
null ORG 0200H
ITL0:MOV TL0,# 0B3H ;重装定时常数
CPL P1.0 ;输出方波1(200μs)
RETI
ITH0:MOV TH0,#66H ;重装定时常数
CPL P1.1 ;输出方波2(400μs)
RETI
6.5.2 计数器的应用
当TMOD寄存器中C/T位设置为“1”时,作为计数器使用,可对来自单片微机引脚T0或T1上的负跳变脉冲进行计数,计数溢出时可申请中断,也可查询溢出标志位TFx。
例.假如一个用户系统已使用了两个外部中断源,即INT0和INT1,用户系统要求从P1.0引脚上输出一个5kHz的方波,并要求采用定时器/计数器作为串行口的波特率发生器,另外还需要再增加一个外部中断源。 6.5.2 计数器的应用
null⑴把T0设置为方式3,
把T0作为外部中断源,TL0设置为计数器,计数器的定时常数设为FFH,相当于一个边沿触发的外部中断源。
而在T0方式3下,TH0只能做8位定时器,用来产生5KHz方波的定时。
当T0设置为方式3之后,T1就作为串行口的波特率发生器,设为方式2。
由P1.0引脚上输出5kHz频率的方波,而方波周期为200μs,则要求定时时间为100μs,若采用12MHz的晶体振荡器,则机器周期为1μs。 null
计算时间常数: (28-TC)×1μs=100μs
∴TC=256-100=156
⑵ 编程: ORG 0000H
SJMP MAIN
ORG 000BH
AJMP TL0INT ;TL0中断入口
ORG 001BH
AJMP TH0INT ;TH0中断入口
null ORG 0030H
MAIN: 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和TH0null SETB ET0 ;允许TL0中断
SETB ET1 ;允许TH0中断
SETB EA ;允许CPU中断
SJMP $ ;中断等待
ORG 0100H
TL0INT: MOV TL0,#0FFH ;重置计数长度
(中断处理)
RETI
TH0INT: MOV TH0,#156 ;重置定时常数
CPL P1.0 ;P1.0引脚输出方波
RETI
6.5.3 门控位GATE的应用 门控位GATE可用作对INTx引脚上的高电平持续时间进行计量。当GATE位设为“1”,并设定时器/计数器启动位TRx为“1”,这时定时器/计数器定时完全取决于INTx引脚,仅当INTx引脚电平为“1”时,定时器才工作,换另一角度看,定时器实际
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
的时间就是相应INTx引脚上高电平的持续时间。6.5.3 门控位GATE的应用null通过反相器,则可测得相应INTx引脚上低电平的持续时间。二个时间的和即为INTx引脚上输入波形的周期,其倒数即为INTx引脚上输入波形的频率。还可算出占空比等参数。
例.利用定时器/计数器测定图6-11所示波形的一个周期长度。
利用门控信号GATE启动定时器的方法。T1为定时器时,当TR1=1且为高电平时,才启动定时器;而定时器/计数器 T1为计数器时,T1的电平由 1到 0,计数器计数。TR1清零 图6–11 波形脉冲宽度测试原理null⑴ 查询法 ORG 0000H
START: MOV TMOD,#90H ;设置T1为定时器, ;方式1,GATE位置1
MOV TL1,#00H ;置为最大定时值
MOV TH1,#00H
LP1: JB P3.3,LP1 ;P3.3为高电平,等待
SETB TR1 ;当P3.3为低电平时,
;置TR1位为1
LP2: JNB P3.3,LP2 ;当P3.3为低电平时,再等待null 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) ,则通过编程同时可以测得波形的高电平宽度和低电平宽度。
null ⑵ 中断法
对于脉冲宽度大于65.536ms的脉冲,可以采用对定时溢出次数进行计数的方法。这样,脉宽为 (定时溢出时间×溢出次数)+定时时间。利用定时器/计数器来测定脉冲周期的方法参见图6-12。
(1) 设定晶体振荡器为 6 MHz,机器周期Tc为2μs,定时器/计数器T0为方式1,定时溢出时间为 100 ms,则T0定时时间常数为:(TH0)=3CH,(TL0)=B0H
因为外部脉冲同时接至T1的输入引脚T1,所以T1脚上对下降沿计数二次,即为外部脉冲的一个周期时间。现设T1为计数器。计数值为2。null当计数值为1时,启动定时器;当计数值为2时,中断计数器T1,并停止定时器T0的定时。T1中断优先级设为高于定时器T0。
计数初值为 FFFEH:(TH1)=FFH,(TL0)=FEH。
(2) ORG 0000H
SJMP MAIN
ORG 000BH ;定时器T0中断入口
AJMP TIMEO
ORG 00IBH ;定时器 T1中断入口
AJMP TIMEI
null ORG 0030H
MAIN:MOV R0,#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
null 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: SETB F0 ;设F0为T0定时中断标志
JB F0,$ ;T0定时未溢出,等待
JB 20H,LOOP ;判T1若未溢出则循环 SJMP $
null ORG 0100H
TIMEO: MOV TL0,#0B0H;重置T0定时器初值
MOV TH0,# 3CH
INC R0 ;T0定时溢出计数器加 1
CPL F0 ;T0定时中断标志变反
RETInull ORG 0200H
TIMEI:CLR F0 ;清除T0定时中断标志
CLR 20H ;清除T1计数中断标志
CLR ET0 ;禁止T0、T1 中断
CLR ET1
CLR EA ;关中断
RETI
可测的最大周期长度为256×100ms=25.6s。若周期大于25.6S,则不用R0作计数器,改用16位计数器即可。
6.5.4 运行中读定时器/计数器 6.5.4 运行中读定时器/计数器 80C51可以随时读写计数寄存器TLx和THx (x为0或1) ,用于实时显示计数值等。
办法是:先读THx,后读TLx,再重读THx,若两次读得的THx值是一样的,则可以确定读入的数据是正确的;若两次读得的THx值不一致,则必须重读。 null 例. 飞读
RDTIME: MOV A,TH0 ;读TH0
MOV R0,TL0 ;读TL0并存入R0
CJNE A,TH0,RDTIME ;再读TH0,与上次 ;读入的TH0比较,若不等,重读
MOV R1,A ;存TH0在R1中
RET
END
END
图6–1 定时器/计数器T0、T1的内部结构框图
图6–1 定时器/计数器T0、T1的内部结构框图
图6–2 方式0时,定时器/计数器T0、T1的逻辑结构图
图6–2 方式0时,定时器/计数器T0、T1的逻辑结构图
图6–3 方式1时,定时器/计数器T0、T1的逻辑结构图
图6–3 方式1时,定时器/计数器T0、T1的逻辑结构图
图6–4 方式2时定时器/计数器T0、T1的结构图
图6–4 方式2时定时器/计数器T0、T1的结构图
图6–5 定时器/计数器T0方式3时的逻辑结构图
图6–5 定时器/计数器T0方式3时的逻辑结构图
图6–6 定时器/计数器T0方式3时,T1的逻辑结构图
图6–6 定时器/计数器T0方式3时,T1的逻辑结构图
图6–7 定时器/计数器T2的捕获方式逻辑结构阁
图6–7 定时器/计数器T2的捕获方式逻辑结构阁
图6–8 定时器/计数器T2的自动重装载方式逻辑结构阁
图6–8 定时器/计数器T2的自动重装载方式逻辑结构阁
图6–9 定时器/计数器T2的波特率发生器方式下的结构图
图6–9 定时器/计数器T2的波特率发生器方式下的结构图
图6–10 监视定时器T3
图6–10 监视定时器T3
图6–12 利用定时器/计数器测脉冲周期
图6–12 利用定时器/计数器测脉冲周期
表6–1定时器/计数器的工作方式
表6–1定时器/计数器的工作方式
表6–2 定时器/计数器T2的工作方式
表6–2 定时器/计数器T2的工作方式