第六章定时计数器 教学目的和要求 本章介绍定时器/计数器的结构原理、工作方式及应用。要求理 解定时器/计数器的工作原理,熟悉定时器/计数器T0、T1的控制寄 存器,掌握定时器/计数器的各种工作方式、程序设计方法以及在系 统设计中的应用,了解定时器/计数器T2的控制寄存器、各种工作方 式和程序设计方法。 重点:定时器/计数器的结构原理、工作方式及应用 难点:定时器/计数器工作方式及应用 学时:2 定时器/计数器简称定时器,8051系列单片机有2个16位的定 时器/计数器:定时器0(T0)和定时器1(T1)。8052系列单片机增 加了一个16位定时器T2。它们都有定时和计数的功能,可用于定时 控制、延时、对外部事件计数等场合。 一、定时方式 1.硬件法 硬件定时功能完全由硬件电路完成,不占用CPU时间。但当要求 改变定时时间时,只能通过改变电路中的元件参数来实现,很不灵活。 2.软件法 软件定时是执行一段循环程序来进行时间延时,优点是无额外的 硬件开销,时间比较精确。但牺牲了CU的时间。 3.可编程定时器/计数器 MCS-51系列单片机内部提供2个可编程的定时器/计数器T0和 1
T1,它们可以用于定时或者对外部脉冲计数,还可以作为串口的波特 率发生器。定时器达到预定定时时间或者计数器计满数时,给出溢出 标志,还可以发出内部中断。 二、定时/计数器的结构及工作原理 定时/计数器的逻辑框图如下:(P91:图5一1) 品振—÷12 计数器一一中断 T端」 控制信号 1、工作原理 定时器/计数器的核心器件是一个加1计数器,它对晶振12分 频后的脉冲或外部脉冲源的脉冲计数,每来一个脉冲计数器加1,当 计数器计到全1时,再来一次脉冲,计数器的值回到0,同时计数器 最高位产生溢出,使得定时控制寄存器TCON的TF0或TF1置1,作 为计数器的溢出中断标志。 2、功能 1)定时功能:当加1计数器接内部晶振时为定时功能,每个机 器周期(等于12个晶体振荡周期)计数器加1,所以计数频率是晶 振频率的1/12。例:当品振为频率为12Mz时,计数频率为1Mz, 计数周期为1Mh1x10s=l 2)计数功能:当加1计数器接外部脉冲源时为计数功能,外部 脉冲源接在芯片的T0(P3.4)或T1(P3.5)引脚上,当T0(P3.4) 或T1(P3.5)来一个下降沿计数器加1。由于单片机对外部事件的检 2
测需要两个机器周期,所以最高的计数频率为晶振频率的1/24。例: 当晶振为频率为12NHz时,计数频率最高为0.5MHz,即最小的计数 周期为05Mm510:=05,即外部脉冲的最小周期为0,5us,最 高频率为0.5MIz, 说明:不论是定时或是计数方式,定时器T0或T1都不占用CPU 时间,除非定时器/计数器溢出,才可能中断CPU的当前操作。所以 定时器是单片机中效率高而且工作灵活的部件。 3、开关的作用 第一个模拟开关控制定时器/计数器是工作于定时还是计数方 式: 第二个模拟开关控制定时器/计数器的开启与关闭。 4、组成 定时器/计数器T0、T1和T2均为16位的特殊功能寄存器,均 由TH(高8位)和TL(低8位)组成。即:THO、TL0、TH1、TL1、TH2、 TL2 6.2、定时/计数方式和控制寄存器 一、工作方式控制寄存器TMOD TMOD的高四位用于选择T1的工作方式,低四位用于选择T0的 工作方式,TMOD控制寄存器各标志位定义如下图所示:(P94)端口 地址: 3
89H GATE C/T MI GATE C/T MI MO 定时/计数器1 定时/计数器0 各位的功能如下: 1、GATE:门控位,用于控制定时/计数器的启动是否受外部中断 控制信号的控制: (1)当GATE=0时,定时/计数器的启动与外部中断请求信号引 脚NTO(P3.2)或NTI(P3.3)无关,只要定时控制寄存器TCON的TR0或 TR1为1,则启动内部定时或外部计数器: (2)当GATE=1时,定时/计数器的启动还受外部中断请求信号 引脚NT0(P3.2)或NTI(P3.3)的影响,TR0或TR1为1,同时外部中断输 入端口NT0(P3.2)或N7(P3.3)为高电平时才肩动定时器/计数器工作。 般GATE=O。 2、C/T:定时器/计时器选择位。当C/T=1时,工作在计数器方 式:C/T=0时,工作在定时器方式。 3、M1、M0:定时器/计时器工作方式选择位,意义如下: (1)M1、M0=00:工作方式0(13位方式) (2)M1、M0=01;工作方式1(16位方式) (3)M1、M0=10:工作方式2(8位常数自动安装方式) (4)M1、M0=11:工作方式3(T0为2个8位方式,T1无此 方式) 说明:定时器初始化编程包括: 1.功能选择(定时/计数)2.位数选择(8/13/16位)
3.启动方式选择(内部启动/外部启动) 4.启动控制(启动/停止) 二、定时器控制寄存器(前一章已讲) TCON用于控制定时器/计数器的启、停、溢出标志和外部中断信 号触发方式。 其格式如下:(P85)端口地址:88 各位功能如下: TFi:T0、T1溢出位。当计数溢出时,由硬件自动使T下i置1, 并向CPU申请中断。进入中断服务程序后,TF1又被硬件自动清0。 TFi也可作为程序查询的标志位,在查询方式下由软件清0。 TRi:T0、T1运行控制位。TRi=1启动计数,TRi=O,停止工作。 IE1:外部中断1请求标志位。当检测到外部中断引脚(P3.3引 脚)上有中断请求信号时,由硬件置1:待CU响应中断后,由硬件 清0。 IT1:外部中断1方式控制标志。IT1=0,当P3.3引脚为低电平 时触发外部中断1:IT1=1,当P3.3引脚检测到下降沿信号时,触发 外部中断1。 IE0:外部中断0请求标志位。当检测到P3.2引脚上有中断请求 信号时,由硬件置1:待CPU响应后,由硬件清0。 IT0:外部中断0方式控制标志。IT0=0,当P3.2引脚为低电平 时触发外部中断0:IT0=1,当P3.2引脚检测到下降沿信号时,触发 外部中断0
三、定时/计数器的工作方式 定时/计数器有4中工作方式,分别如下。(计T0、T1的高位THx, 低位TLx:x=0/1) 1、方式0(13bit的加1计数器) M1M0=00,定时/计数器工作于方式0,此时由THx8位和TLx 低5位组成13位加1计数器,TLx的高3位没用(其值不定,不用 理睬),当TLx的低5位产生溢出时,则向THx进位,THx溢出时, 则将相应的定时/计数器溢出标志位TF0或TF1置位(TCON的 TFO/T下1),形成定时/计数器溢出中断标志。 注意 ①、若工作于计数方式,则允许的最大计数值为2=812个机器 周期,若需要的计数值为N,则置入的初值为:X=8192-N。 ②、若工作在定时方式,则定时公式为:t=(⑧192-计数初值X) ×12×晶振周期(s) 或t=(⑧192-计数初值X)×机器周期(s) 106 例:晶振为6Mz,则最大定时时间为:t=(8192-0)×12×6 16384us 最小定时时间为:t=8192-819)×12×石0 =2us 2、方式1(16位加1计数器) M1M0=01时,定时/计数器工作在方式1,此时由8位的TLx和8 位的Tx构成一个16位加1计数器,当TLx溢出时,THx自动加“1”, Tx溢出时,则将相应的定时/计数器溢出标志位TFO或TF1置位, 6
形成定时/计数器溢出中断标志。最大计数值为216=65536个机器周 期,其工作原理同方式0。 3、工作方式2(8位计数器) M1M0=10时,定时器/计数器工作在方式2,此时16位计数器只 用低8位TLx,高8位THx用于保存初值。当TLx计数溢出时,一方 面将相应的定时/计数器溢出标志位TFO或T℉1置位,形成定时/计数 器溢出中断标志:另一方面将THx的内容重新装入TLx继续开始计数。 THx的内容始终不变,因此也称为8位常数自动装载方式。 最大计数值2-256,实际计数值=256一初值,在单片机的 串行通信中,常用于波特率发生器使用。 4、工作方式3(只有T0有,两个独立的8位计数器TL0、TH0) M1、M0=11时,定时器/计数器T0工作在方式3,这种方式仅对 T0有效。 此时,TL0和TH0是两个独立的8位计数器,TL0用于8位定时 器/计数器,TH0只能用于8位定时器。其中TL0占用T0的中断源及 控制位:GATE、C/T、TRO、TFO、NTO:THO占用T1的运行控制TR1、 溢出标志TF1。 6.3定时/计数的初始化编程及应用 一、初始化编程的步骤:(定时器/计数器简称为T/C) 在使用8051的定时器/计数器()前,应对它进行初始化编程, 主要是对TCON和TMOD编程,计算和装载计数初值(也称做时间常数)。 一般完成以下几个步骤: 1)确定T/C的工作方式:计数或定时—编程TMOD寄存器的
C/T位; 2)计算T/C中的计数初值,并装载到THx和TLx: 3)T/C在中断方式工作时,须开CPU中断和源中断一编程IE 寄存器; 4)启动定时器/计数器一编程TCON中TR1或TRO位。 二、定时、计数初值(定时常数)的计算: 1、工作于计数方式时 设:计数器所需要的计数值(或脉冲个数)设定为C,计数初值设 定为TC,由此便可得到如下的计算公式:TCM-C 其中:M为计数器模值,该值和计数器工作方式有关。在方式0 时M为2:在方式1时M为2:在方式2和方式3时M为2。 例:工作在模式0下,需要计100个数, 则计数初值为:TC=8192-100=8092=1F9CH,所以TH=1FH, TL=9CH 2、工作于定时方式时 定时公式为:t=(M-TC)×12×晶振周期(s)或t=(M-TC)×机器 周期(s) 例:晶振频率6MHz,采用定时方式1,求定时1Oms时的定时常 数 t 解:因为:TC= -2*品两霸M-苔-2-100610 12 60536=EC78H 所以:TL=78H,TH=ECH
三、编程格式 1、初始化编程格式:(X=0,1) B7 B6 B5 B4 B3 B2 B1 BO GATEC /T M1 MO GATEC/T MI MO TMOD 2.溢出处理编程格式:TCON 8F8E8D8C8B8A8988 TF1 TR1 TFO TRO IE1 IT1 IEO ITO 1)查询方式:先查询定时器溢出标志,再进行溢出处理。 2)中断方式:初始化后执行其他任务,中断服务程序处理溢出。 例:P99:—例5-2 3、c51编程 例:若单片机时钟频率为12MZ,用定时/计数器T0编程从P1.0 引脚输出周期为500us的方波。 分析:P1.0输出周期为5001s的方波,则只需每250usP1.0口 取反一次即可。 单片机时钟12Mz,若工作在方式2则最大定时为: 1=2x12x-256 >250us,满足定时要求 1=(2*-7C)x12×}=250s 解:因为: 所以初值TC=6=06H 即:TH0=TL0=06H #include 18051系列的寄存器头文件 sbit P1 0=P10; void main(void)
TM0D=0x02; /定时器0方式2 TH0=0x06; TL0=0x06: /装入时间常数 EA=1; /开中断总开关EA ET0=1: /开定时器溢出中断T0 TR0=1: /启动定时器 i1e(1):/无循环体,总成立,死循环,一直等到有中 断发生,去执行中断 } void time(void)interrupt1/定时器中断To P11=P11;/P1.1取反 说明:while(1):=while(1)(),但while(1):≠while(1) whi1e(1):为一条语句(因为带:),循环语句的判断条件恒为真, 因此一直执行循环体,无法跳出,但循环体}为空语句,什么也没有 处理,一直无限期的等待,这就是死循环。这个死循环放在程序中, 表示程序一直等待下去,直到有任何中断产生,程序会跳到中断程序 执行。其他时间都在等待中断的触发。 上例中:若采用工作方式0,分析如下: 解1=2-70x12x250 所以TC=8192-250=7942=