第6章 定时计数器_第1页
第6章 定时计数器_第2页
第6章 定时计数器_第3页
第6章 定时计数器_第4页
第6章 定时计数器_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

知识回顾:

6定时/计数器

定时器/计数器(Timer/Counter),是单片机内的重要部件,其作用主要包括产生各种时标间隔、记录外部事件的数量等。AT89S51单片机有2个16位的定时器/计数器、定时器/计数器0(T0)和定时器/计数器1(T1)。AT89S52包含3个16位的定时器/计数器:定时器/计数器0(T0),定时器/计数器1(T1)、定时器/计数器2(T2)。AT89S51单片机还包含有一个用作看门狗的14位定时器(T3)。

6.1AT89S51单片机的定时器/计数器的基本原理

定时器/计数器的核心是一个16位的加1计数器。作定时器时,其计数脉冲来源于时钟振荡器(经12分频后提供)。这个脉冲的周期称为单片机的机器周期,每一个机器周期定时寄存器自动加1,所以定时器也可看作是计算机器周期的计数器。作计数器时,其计数脉冲来源于单片机外部引脚T0(或T1)的脉冲。即Tx端口有从“1”到“0”的负跳变,计数器就自动加1。计算机是在每个机器周期S5P2状态时采样Tx端口,当前一个机器周期采样为1、后一个采样周期采样为0时,计数器即加一计数。计算机需用两个机器周期来识别1次计数,因而最大计数速率为振荡频率的1/24。

6.2定时器/计数器T0、T1的内部结构

AT89S51单片机的定时器/计数器和微处理器的关系,如图6-1所示,定时器/计数器T0由TH0、TL0构成,T1由TH1、TL1构成。TMOD用于控制和确定各定时器/计数器的功能和工作模式。TCON用于控制定时器/计数器T0、T1的启动和停止计数,同时包含定时/计数器的状态。它们属于特殊功能寄存器。这些寄存器的内容靠软件设置。系统复位时,寄存器的所有位都被清零。定时器/计数器的T0、T1的特殊功能寄存器有:方式寄存器TMOD、控制寄存器TCON、数据寄存器。

图6-1定时器/计数器的结构

AT89S51单片机有2个特殊功能寄存器TMOD和TCON:TMOD用于设置T/C的工作方式;TCON用于控制定时器T0、T1的启动与停止,并包含了定时器的状态。

1.定时/计数器T0、T1的方式寄存器-TMOD

定时器工作方式寄存器TMOD用于选择定时器的工作方式,它的高4位控制定时器T1,低4位控制定时器T0。TMOD中各位的定义如下:GATEC/TM1M0GATEC/TM1M0T1T0TMOD89H

其中::T/C功能选择位,当=1时为计数方式; 当=0时为定时方式。

M1M0:T/C工作方式定义位,其具体定义方式如表 6―1所示。表6―1定时/计数器工作方式

GATE:门控制位,用于控制定时器的启动是否受外部中断源信号的影响。GATE=0时,与外部中断无关,由TCON寄存器中的TRx位控制启动。GATE=1时,由控制位TRx和引脚共同控制启动,只有在没有外部中断请求信号的情况下(即外部中断引脚=1时),才允许定时器启动。

2.定时/计数器T0、T1的控制寄存器-TCONTCON控制寄存器各位的定义如下:

TF1TR1TF0TR0IE1IT1IE0IT0D7D6D5D4D3D2D1D0TCON88H

其中:

TF0(TF1):为T0(T1)定时器溢出中断标志位。当T0(T1)计数溢出时,由硬件置位,并在允许中断的情况下,发出中断请求信号。当CPU响应中断转向中断服务程序时,由硬件自动将该位清0。

TR0(TR1):为T0(T1)运行控制位。当TR0(TR1)=1时启动T0(T1);TR0(TR1)=0时关闭T0(T1)。该位由软件进行设置。

TCON的低4位与外部中断有关,可参阅中断一节的有关内容。

TCON寄存器在复位时也被清0。

6.3定时/计数器的工作方式

MCS-51单片机的T/C有4种工作方式,分别由TMOD寄存器中的M1、M0两位的二进制编码所决定。

1.方式0

当M1M0=00时,T/C设定为工作方式0,构成13位的T/C。其逻辑结构如图6―3所示。在此工作方式下,T/C构成一个13位的计数器,由THx的8位和TLx的低5位组成,TLx的高3位未用,满计数值为213。T/C启动后立即加1计数,当TLx的低5位计数溢出时向THx进位,THx计数溢出则对相应的溢出标志位TFx置位,以此作为定时器溢出中断标志。当单片机进入中断服务程序时,由内部硬件自动清除该标志。

图6―3T/C方式0的逻辑结构图

2.方式1

当M1M0=01时,T/C设定为工作方式1,构成16位定时/计数器,其中THx作为高8位,TLx作为低8位,满计数值为216,其余同方式0类似。其逻辑结构如图6―4所示。图6―4T/C方式1的逻辑结构图

3.方式2

当M1M0=10时,T/C工作在方式2,构成1个自动重装载的T/C,满计数值为28。在方式0和方式1中,当计数满后,若要进行下一次定时/计数,需用软件向THx和TLx重新予置计数初值。在方式2中THx和TLx被当作两个8位计数器,计数过程中,THx寄存8位初值并保持不变,由TLx进行8位计数。计数溢出时,除产生溢出中断请求外,还自动将THx中的初值重新装到TLx中去,即重装载。除此之外,方式2也同方式0类似。其逻辑结构如图6―5所示。

图6―5T/C方式2的逻辑结构图

4.方式3

方式3只适用于定时器T0。当定时器T1处于方式3时相当于TR1=0,停止计数。当T0工作在方式3时,TH0和TL0被拆成2个独立的8位计数器。这时,TL0既可作为定时器使用,也可作为计数器使用,它占用了定时器T0所使用的控制位(C/、GATE、TR0、TF0),其功能和操作与方式0或方式1完全相同;而TH0只能作定时器用,并且占据了定时器T1的两个控制信号TR1和TF1。在这种情况下,定时器T1虽仍可用于方式0、1、2,但不能使用中断方式。图6―6T/C方式3的逻辑结构图

作业P1072、3、4、5知识回顾:

定时/计数器1的方式1的逻辑结构图6.5AT89S51单片机的定时器/计数器编程和应用6.5.1定时器/计数器溢出率的计算定时器/计数器运行前,在其中预先置入的常数,称为定时常数或计数常数(TC)。由于计数器是加1(向上)计数的,故而预先置入的常数均应为补码。其中:t—定时时间。 Tc—机器周期。

fosc—晶体振荡器频率。L—计数器的长度。

对于T0及T1:方式0L=13213=8192

方式1L=16216=65536

方式2L=828=256

对于T2:

L=16216=65536TC—定时器/计数器初值,即定时常数或计数常数。定时时间的倒数即为溢出率,即根据时间的定时时间t,计算出TC值,并将其转换成二进制数TCB,然后再分别送入THi、TLi(对于T0,i=0;对于T1,i=1)。对于定时器/计数器T0/T1:方式0时:TCB=TCH+TCL,TCH—高8位,TCL—低5位

MOVTHi,#TCH

;送高8位

MOVTLi,#TCL

;送低5位方式1时:TCB=TCH+TCL,TCH—高8位,TCL—低8位

MOVTHi,#TCH ;送高8位

MOVTLi,#TCL ;送低8位方式2时:TC—8位

MOVTHi,#TCBMOVTLi,#TCB6.5.2定时器/计数器的编程

定时器/计数器的编程可分为以下几步:1)写TMOD,只能用字节寻址。设置定时器/计数器的工作方式(M1,M0)、功能选择()及是否使用门控(GATE)。2)将时间常数或计数常数写入THi及TLi,也只能用字节寻址。根据上面的计算结果写入THi及TLi。3)启动定时或计数,即写TCON,用字节寻址或用位寻址。如:

SETBTRi ;启动定时器

CLRTRi ;停止定时器4)定时器中断开放和禁止,即写IE。如:

SETBETi ;允许中断ETiSETBEA ;开放中断

CLRETi ;禁止中断ETiCLREA ;关闭中断

[例6-1]使用定时器/计数器T1的方式1,设定1ms定时。在P1.0引脚上产生周期为2ms的方波输出。晶体振荡器的频率为fosc=6MHz。解:(1)定时常数计算振荡器的频率fosc=6MHz=6×106Hz,计数器长度L=16,2L=216=65536。定时时间t=1ms=1﹡10-3s。定时常数TC转换成二进制TCB=1111111000001100B=0FE0CH所以TCH=0FEH(高8位),TCL=0CH(低8位)。(2)TMOD的设定(即控制字)(3)编程

ORG 000BH ;T0中断矢量地址

AJMP INQP ORG 0100H ;主程序入口

MOV SP,#60H ;堆栈设置

MOV TMOD,#10H ;写控制字

MOV TH1,#0FEH ;写定时常数

MOV TL1,#0CH SETB TR1 ;启动T1 SETB ET1 ;允许T1中断

SETB EA ;开放CPU中断

SJMP $ ORG 00XXH ;中断服务程序INQP: MOV TH1,#0F0H ;重写定时常数

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

RETI ;中断返回[例6-2]借助于单片机内的定时器/计数器,测量人体心率。假设单片机的晶振频率为6MHz。[测量频率]:由单片机T0实现1分钟的定时,T1负责对外计数,1分钟定时时间到,读出T1计数器中的数值就是心率。具体做法:

T0和T1都选方式1,这样最大定时时间 t=65536x2=131.072ms便于计算让计数器定时100ms,选30H,31H分别为秒和分存储单元。30H单元计数10次满1秒,31H单元计数60次满1分。分析:两种方法:频率测量法和周期测量法。预置:(TH0)=3CH,(TL0)=0B0HTMOD设置:MOVTMOD,#51H

时间常数计算:晶体振荡器为6MHz,基本定时时间为100ms,机器周期Tc为:

设置初值为xx=216—50000=15536=3CB0H[测周期]:(1)定时器T0设置利用定时器/计数器测定周期a)波形图案b)连接示意图

为高电平时,启动定时器;定时器/计数器T1为计数器,T1的电平由1到0,计数器计数。

定时器T0的TMOD的设置:GATEM1M01001门控定时器方式1控制字为9H。

时间常数计算:晶体振荡器为6MHz,基本定时时间为100ms,机器周期Tc为设置初值为xx=216—50000=15536=3CB0H预置:

(TH0)=3CH,(TL0)=0B0H(2)计数器设置定时器/计数器T1为计数器。计数值为2,当计数1时,启动定时器;当计数2时,中断计数器T1,并停止定时器T0的定时;中断方式,其优先级高于定时器T0。计数器T1的TMOD的设置:

C/GATEM1M00101

计数器方式1控制字为5H。计数初值为:FFFEH,预置:(TH1)=0FFH,(TL0)=0FEH。MOVTMOD,#59H注:课本上其余例子作为课堂练习小结:测量低频信号,为了快速测量又保证测量精度,一般采用测周法。高频信号采用测频法。问题1:频率测量和周期测量的界线如何确定?问题2:如何保证测量结果的准确性?总结要正确使用定时器/计数器,首先要根据要求确定选用那个定时器/计数器,工作在什么方式;如何启动定时器/计数器,如何停止定时器/计数器、如何利用定时器/计数器的中断来进行信号测量,都是需要考虑的问题。

测频程序:

MOV TMOD,#51H;写控制字

MOV TH0,#3CH ;写定时常数

MOV TL0,#0B0H MOV TH1,#00H;对心脏电信号脉冲进行计数

MOV TL1,#00H MOV 30H,#00H;秒存放单元

MOV 31H,#00H ;分存放单元

MOV 32H,#00H;心率存放单元

SETB TR0;启动T0定时

SETB TR1;启动T1计数

ACALLTEST

;调用心率测量程序

MOV 32H,TL1;将测量结果存放在32H单元

SJMP $TEST: JNB TF0,$ CLR TF0INC30H CLR C MOV A,30H CJNE A,#0AH,SECOND;判断是否到1秒钟

MOV 30H,#00H

;到1秒钟,清秒单元

INC 31H CLR C MOV A,31H CJNE A,#3CH,SECOND

;判断是否到1分钟

CLR TR0 CLR TR1 RETSECOND:MOV TH0,#3BH ;重写定时常数

MOV TL0,#0F0HAJMP TEST

测周期程序: ORG 0000H AJMP MAIN ORG 000BH ;T0的中断入口

AJMP TIME0 ORG 001BH ;T1的中断入口

AJMP TIME1 ORG 0033H

MAIN:MOV SP,#60H MOV R3,#0 ;清除软件计数器

SETB P3.2 ;置P3.2,P3.5为输入状态

SETB P3.5 MOV TMOD,#59H MOV TH0,#3CH ;定时器初值

温馨提示

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

评论

0/150

提交评论