1、定时定时/计数器原理及应用计数器原理及应用 在实时控制系统中,常常需要有实时时钟以实现定时或延时控制,也常需要有计数功能以实现对外界事件进行计数。MCS-51单片机内有两个定时器计数器(Timer/Counter)T0和T1;MCS-52子系统中除这两个定时器外,还有一个定时器计数器T2。本章主要介绍MCS-51的两个定时器结构、原理、工作方式及其应用。1.定时定时/计数器的结构和工作原理计数器的结构和工作原理2.定时定时/计数器工作原理计数器工作原理3.定时定时/计数器的工作方式计数器的工作方式4.定时定时/计数器的编程和应用计数器的编程和应用定时定时/计数器原理及应用计数器原理及应用1 定
2、时定时/计数器的结构和工作原理计数器的结构和工作原理 1.1 单片机定时单片机定时/计数器的结构计数器的结构 8051单片机内部有两个16位的可编程定时/计数器,称为定时器0(用T0表示)和定时器1(用T1表示)。T0和T1可以作为定时器用或作为计数器用。T0和T1的工作方式、定时时间、计数值、启动、中断请求等都可以由程序设定。8051定时/计数器由四个部件组成:u定时器0u定时器1u定时器方式寄存器TMODu定时器控制寄存器TCON TMOD用于设置定时器的工作方式 TCON用于控制定时器的启动与停止。1.1 单片机定时单片机定时/计数器的结构计数器的结构 T0和T1是16位加法计数器,分别
3、由两个8位专用寄存器组成:定时器0由TH0和TL0组成;定时器1由TH1和TL1组成。TL0、TL1、TH0、TH1的访问地址依次为8AH8DH,每个寄存器均可单独访问。1.1 单片机定时单片机定时/计数器的结构计数器的结构 定时器0或定时器1用作计数器时,对芯片引脚T0(P3.4)或T1(P3.5)上输入的脉冲计数,每输入一个脉冲,加法计数器加1;定时器0或定时器1用作定时器时,对内部机器周期脉冲计数,由于机器周期是定值,故计数值确定时,时间也随之确定。1.1 单片机定时单片机定时/计数器的结构计数器的结构1.2定时定时/计数器工作原理计数器工作原理 MCS-51单片机的两个定时器/计数器均
4、有两种工作方式,即定时方式或计数方式。这两种工作方式由TMOD的D6位和D2位选择,其中D6位选择T1的工作方式,D2位选择T0的工作方式。1.2定时定时/计数器工作原理计数器工作原理控制信号由TMOD的D6位和D2位产生D6位选择T1的工作方式D2位选择T0工作方式1.定时工作方式 计数器对内部机器周期计数,每过一个机器周期,计数器增1,直至计满溢出。机器周期与系统的振荡频率紧密相关,因MCS-51单片机的一个机器周期由12个振荡脉冲组成,所以,计数器的计数频率为振荡器频率的1/12。如果单片机系统采12MHz晶振(fosc=12MHz),则计数器的计数频率fcont=fosc1/12=1M
5、Hz。周期为:Tcont=1fcont1.2定时定时/计数器工作原理计数器工作原理2.计数工作方式 计数器对来自输入引脚T0(P3.4)和T1(P3.5)的外部信号计数,外部脉冲的下降沿将触发计数。检测一个由1到0的负跳变需要两个机器周期,所以,最高检测频率为振荡频率的1/24。计数器对外部输入信号的占空比没有特别的限制,但必须保证输入信号的高电平与低电平的持续时间在一个机器周期以上。1.2定时定时/计数器工作原理计数器工作原理 当设置了定时器的工作方式并启动定时器工作后,定时器就按被设定的工作方式独立工作,不再占用CPU的操作时间,只有在计数器计满溢出时才可能中断CPU当前的操作。1.2定时
6、定时/计数器工作原理计数器工作原理 2 定时器定时器/计数器的控制计数器的控制 在启动定时/计数器工作之前,CPU必须将一些命令(称为控制字)写入定时/计数器中,这个过程称为定时/计数器的初始化。定时/计数器的初始化通过定时/计数器的方式寄存器TMOD和控制寄存器TCON完成。2.1定时定时/计数器方式寄存器计数器方式寄存器TMODTMOD为定时器0、定时器1的工作方式寄存器,其格式如下:TMOD的低4位为定时器0的方式字段,高4位为定时器1的方式字段,它们的含义完全相同。(1)M1和M0:方式选择位。2位可形成4种编码,对应于4种操作方式。2.1定时定时/计数器方式寄存器计数器方式寄存器TM
7、ODMl M0操作模式功 能 筒 述0 0模式0l3位计数器,TLi只用低5位。0 1模式116位计数器。1 0模式28位自动重装计数器。仅TLi作为计数器,而THi的值在计数中不变。T1i溢出时,THi中的值自动装入T1i中。1 1模式3TO分成2个独立的8位计数器。2.1定时定时/计数器方式寄存器计数器方式寄存器TMOD(2)C/T功能选择位。当C/T=0时,定时器/计数器被设置为定时器工作方式;当C/T=1时,定时器/计数器设置为计数器工作方式.2.1定时定时/计数器方式寄存器计数器方式寄存器TMOD(3)GATE:门控位。用来控制定时器/计数器的启动操作方式。当GATE=0时,只能利用
8、TR0或TR1来控制定时器计数器的启停。TRi位置1时,启动;TRi位为0时,停止。当GATE=1时,定时器/计数器的启动要由外部中断引脚和TRi位共同控制。只有当外部中断引脚或为高时,软件控制位TR0或TR1置1才允许外中断启动对应的定时器工作。2.1定时定时/计数器方式寄存器计数器方式寄存器TMOD(3)TMOD不能位寻址 只能用字节指令设置。系统复位时TMOD所有位均置0。2.1定时定时/计数器方式寄存器计数器方式寄存器TMOD TCON的作用是控制定时器的启动、停止,标志定时器的溢出和中断情况。定时器控制字TCON的格式如下:2.2定时器定时器/计数器控制寄存器计数器控制寄存器TCON
9、各位含义如下:(1)TFx:定时器x溢出标志位。当定时器x计满数产生溢出时,由硬件自动置TFx=1。在中断允许时,向CPU发出定时器1的中断请求,进入中断服务程序后,由硬件自动清0。在中断屏蔽时,TFx可作查询测试用,此时只能由软件清0。(2)TRx:定时器x运行控制位。由软件置1或清0来启动或关闭定时器1。当由软件将TRx清0时,则停止定时器/计数器1的工作。定时器/计数器1启动时该位应置“1”。D7(TCON.7)D6(TCON.6)D5(TCON.5)D4(TCON.4)D3(TCON.3)D2(TCON.2)D1(TCON.1)D0(TCON.0)TFlTRlTF0TR0IElIT1I
10、E0IT02.2定时器定时器/计数器控制寄存器计数器控制寄存器TCON (5)TCON.3 IE1:外部中断1请求标志位。(6)TCON.2 IT1:外部中断1触发方式选择位。(7)TCON.1 IE0:外部中断0请求标志位。(8)TCON.0 IT0:外部中断0触发方式选择位。TCON中的低4位用于控制外部中断,与定时/计数器无关。D7(TCON.7)D6(TCON.6)D5(TCON.5)D4(TCON.4)D3(TCON.3)D2(TCON.2)D1(TCON.1)D0(TCON.0)TFlTRlTF0TR0IElIT1IE0IT02.2定时器定时器/计数器控制寄存器计数器控制寄存器TC
11、ONu定时器/计数器的启动与门控位(GATE)、外部中断引脚上的电平有关。l当GATE=0时,定时器/计数器的启动仅由TRi=1控制;l当GATE=1时,除要求TRi=1外,还要求外部中断引脚=1。u 当系统复位时,TCON的所有位均清0。u TCON可以位寻址,清溢出标志位或启动定时器都可以用位操作指令。2.2定时器定时器/计数器控制寄存器计数器控制寄存器TCON2.3 定时定时/计数器的初始化计数器的初始化 由于定时/计数器的功能是由软件编程确定的,所以,一般在使用定时器/计数前都要对其进行初始化,初始化程序应放在主程序的开始处。初始化骤如下:(1)确定工作方式对TMOD,TCON赋值。(
12、2)预置定时器/计数器的初值对TH,TL赋值(1)确定工作方式对TMOD赋值。根据需求确定工作方式、操作模式、启动控制方式。用传送指令将其写入TMOD寄存器。例如,MOV TMOD#10H,表明定时器1工作在方式1,且工作在定时器方式。2.3 定时定时/计数器的初始化计数器的初始化(1)确定工作方式对TMOD赋值。不同的工作方式、不同的操作模式下,最大计数值(溢出值),的M值为:模式0:M=213=8192模式1:M=216=65536模式2:M=28=256模式3:M=28=256,定时器T0分成2个独立的8位计数器,所以TH0、T10的M均为256。(2)预置定时器/计数器的初值。2.3
13、定时定时/计数器的初始化计数器的初始化 MCS-51的两个定时器均为加1计数器,当计数器从计数器初值X加到溢出值M时产生溢出,将TFi位置1,可发出溢出中断。中间经历的计数个数为M-X 所以:计数器初值X:X=M-计数值(2)预置定时器/计数器的初值 2.3 定时定时/计数器的初始化计数器的初始化计数器方式 工作于计数器方式时,计数脉冲由外部引入,对外部脉冲进行计数。计数值应根据实际要求来确定。计数初值的计算公式为:X=M-计数值 例如:某工序要求对外部脉冲信号计录100次后,才需要处理,则计数初值为X=M-100。(2)预置定时器/计数器的初值 2.3 定时定时/计数器的初始化计数器的初始化
14、定时器方式 定时器方式时,由于是对机器周期进行计数,故计数值机器周期的个数。首先将定时时间转换为所需要记录的机器周期个数,然后再计算初值。设所需时间间隔为T,则T段时间对应的机器周期为:T/(fosc12)计数初值的计算公式为:M-T/(fosc12)。fosc为机器时钟(振荡器)的振荡频率。(2)预置定时器/计数器的初值 2.3 定时定时/计数器的初始化计数器的初始化(3)是否使用中断 根据要求考虑是否采用中断方式,直接对IE位赋值。开放中断时,对应位置1;不使用中断时,可采用程序查询方式,IE中对应位应清0进行中断屏蔽。2.3 定时定时/计数器的初始化计数器的初始化 (4)启动定时/计数器
15、工作。使用SETB TRi指令。GATE设置为0时(即设置为软启动)以上指令执行后,定时器/计数器即可开始工作。GATE设置为1时,还必须由外部中断源共同控制,只有当引脚电平为高时,以上指令执行后定时器/计数器方可启动工作。2.3 定时定时/计数器的初始化计数器的初始化 通过对TMOD寄存器中M0、M1位进行设置,可选择4种工作方式。3 定时定时/计数器的工作方式计数器的工作方式Ml M0操作模式功 能 筒 述0 0模式0l3位计数器,TLi只用低5位。0 1模式116位计数器。1 0模式28位自动重装计数器。仅TLi作为计数器,而THi的值在计数中不变。T1i溢出时,THi中的值自动装入T1
16、i中。1 1模式3TO分成2个独立的8位计数器。1方式方式0 方式0构成一个13位定时/计数器。图5-3是定时器0在方式0时的逻辑电路结构。1方式方式0 由图可知16位加法计数器(TH0和TL0)只用了13位。其中,TH0占高8位,TL0占低5位(只用低5位,高3位未用)。当TL0低5位溢出时自动向TH0进位,而TH0溢出时向中断位TF0进位(硬件自动置位),并申请中断。1方式方式0 装入和读取数据时,应注意13位数据与16位数据之间的转换。例如:将X=1F06H的16位数据装入13位定时器计数器。方法是:16位数据低5位作为TLi的低5位;由于TLi的高3位未用,应补填0;16位数据的D12
17、D5送入Thi中(高8位)。所以13位工作寄存器中存放的实际数值为1111100000000110B,即F806H。1方式方式0例1 用定时器1,方式0实现1 s的延时。解:因方式0采用13位计数器,其最大定时时间为:81921 s=8.192 ms,因此,定时时间可设为5ms,再循环200次。定时时间选定后,再确定计数值为5000,则定时器1的初值为 X=M 计数值=8192 5000=3192=C78H=0110001111000B因13位计数器中T11的高3位未用,应填写0,TH1占高8位,所以,X的实际填写值应为X=0110001100011000B=6318H即:TH1=63H,T1
18、1=18H,又因采用方式0定时,故TMOD=00H。C51演示演示2方式方式1 方式1构成一个16位定时/计数器,其结构与操作几乎完全与方式0相同。惟一差别是二者计数位数不同。作定时器用时其定时时间为(M 定时器0初值)时钟周期12=(65536 定时器0初值)时钟周期12。例2用定时器1,方式1 s的延时。解:因方式1采用16位计数器,其最大定时时间为:655361 s=63536ms,因此可选择定时时间为50ms,再循环20次。定时时间选定后,再确定计数值为50000,则定时器1的初值为 X=M 计数值=65536 50000=15536=3CB0H 即:TH1=3CH,T11=0B0H,
19、又因采用方式1定时,故TMOD=10H。C51演示演示 3方式方式2 定时/计数器工作于方式2时,其逻辑结构图如图5-5 3方式方式2 方式2中,16位加法计数器的TH0和TL0具有不同功能,其中,TL0是8位计数器,TH0是重置初值的8位缓冲器。方式0和方式1用于循环计数,在每次计满溢出后,计数器都复0,要进行新一轮计数还须重置计数初值。这不仅导致编程麻烦,而且影响定时时间精度。3方式方式2 方式2中16位加法计数器被分割为两个,TL0用作8位计数器,TH0用以保持初值。在程序初始化时,TL0和TH0由软件赋予相同的初值。一旦TL0计数溢出,TF0将被置位,同时,TH0中的初值装入T10,从
20、而进入新一轮计数,如此循环不止。方式2具有初值自动装入功能,方式0方式1的缺点,适合用作较精确的定时脉冲信号发生器。3方式方式2 其定时时间=(M 定时器0初值)时钟周期12=(256 定时器0初值)时钟周期12 3方式方式2 例3 试用定时器1,方式2实现1 s的延时。解:方式2是8位计数器,其最大定时时间为:2561 s=256 s,为实现1 s延时,可选择定时时间为250 s,再循环4000次。定时时间选定后,可确定计数值为250,则定时器1的初值为:X=M 计数值=256 250=6=6H。采用定时器1,方式2工作,因此,TMOD=20H。3方式方式2 C51演示演示4方式方式3 定时
21、/计数器工作于方式3时,其逻辑结构图如图5-6所示。4方式方式3定时器0被分解成两个独立的8位计数器TL0和TH0。TL0占用原定时器0的控制位、引脚和中断源(GATE、TR0、TF0和T0引脚、INT0引脚)。u 功能、操作与方式0、方式1完全相同,u 可定时亦可计数u 计数字长为8位。定时时间:(M-T10初值)时钟周期12=(256-TL0初值)时钟周期124方式方式3u TH0占用原定时器1的控制位TF1和TR1u 占用了定时器1的中断源u 启动和关闭仅受TR1置1或清0控制u TH0只能对机器周期进行计数,即只能内部定时,不能用作对外部脉冲进行计数 定时时间为:(M-TH0初值)时钟
22、周期12=(256-TH0初值)时钟周期124方式方式3 定时器1仍可设置为方式0、方式1或方式2。由于TR1、TF1及T1的中断源已被定时器0占用,定时器1仅由控制位切换其定时或计数功能,当计数器计满溢出时,只能将输出送往串行口。即定时器1用作串行口波特率发生器。因定时器1的TR1被占用,因此其启动和关闭较为特殊,当设置好工作方式时,定时器1即自动开始运行。若要停止操作,只需送入一个设置定时器1为方式3的方式字即可。4方式方式3 4 定时定时/计数器的编程和应用计数器的编程和应用 定时/计数器是单片机应用系统中的重要部件,灵活应用定时/计数器可提高编程技巧,减轻CPU的负担,简化外围电路。例1:用T1模式一产生一个50Hz的方波,由P1.1输出,fosc=12MHz。解:方波周期T=1/50=0.02s=20ms,用T1定时10ms,计数初值为:X1=216-1010-31210612=65536-10000=55536=D8F0H看C51演示 4 定时定时/计数器的编程和应用计数器的编程和应用答疑及讨论答疑及讨论