资源描述
5.1 定时器定时器/计数器的结构及功能计数器的结构及功能 定时和计数功能在控制系统中应用十分普遍。为此定时和计数功能在控制系统中应用十分普遍。为此,单片机内配单片机内配置了置了23个个16位的可编程定时位的可编程定时/计数器。计数器。它们的工作方式和工作模式它们的工作方式和工作模式可通过对特殊功能寄存器可通过对特殊功能寄存器TMOD和和TCON编程来设置编程来设置.一、定时器一、定时器/计数器的内部结构计数器的内部结构计数输脉冲入端计数输脉冲入端T0、T1、T2方式控制寄存器方式控制寄存器TMOD确确定定Ti的功能和工作模式的功能和工作模式控制寄存器控制寄存器TCON控制控制 Ti的启的启动和停止还包含了动和停止还包含了Ti的溢出标志的溢出标志定时定时/计数器由两个计数器由两个8位的计数器构成位的计数器构成定时器计数器的功能定时器计数器的功能:(1)(1)定时器计数器的核心是一个可预置的加定时器计数器的核心是一个可预置的加1 1计数器其基计数器其基本功能是计数加本功能是计数加1 1。若是若是对单片机的对单片机的T0T0或或T1T1引脚上输入的引脚上输入的1 1到到0 0的跳变进行数,的跳变进行数,即是即是计数功能计数功能。若是若是对单片机内部的机器周期(时对单片机内部的机器周期(时 钟钟 信号)进行计数信号)进行计数,即是即是定时定时 功能功能。(2)(2)计数器的计数器的计数初值可编程设定计数初值可编程设定。(3)(3)计数器的计数器的启动可由软件和硬件控制启动可由软件和硬件控制,其其工作方式可通过工作方式可通过 软件选择软件选择。(4)(4)计数器的长度计数器的长度(位数位数)可用软件设定可用软件设定 (5)(5)定时器计数器是定时器计数器是1616位,位,最大计数值为最大计数值为6553665536,超过最超过最大值后定时大值后定时 器计数器会溢出。器计数器会溢出。(6)(6)定时定时 器器/计数器除了可用作定时计数器除了可用作定时 器或计数器之外,器或计数器之外,还可还可用作串行接口的波特率发生器用作串行接口的波特率发生器。二、与定时二、与定时/计数器有关的控制寄存器计数器有关的控制寄存器作用:定义作用:定义T0、T1工作方式。格式如下:工作方式。格式如下:GATEM1M0b7b6b5b4GATEM1M0b3b2b1b0字节地址89HTMODT/CT/C定时/计数工作方式启动方式定时器T1工作方式字段定时/计数工作方式启动方式定时器T0工作方式字段 1.GATE定时定时/计数器启动方式控制位计数器启动方式控制位(又称门控位又称门控位)。GATE=1时时,Tx的计数受的计数受INTx 引脚引脚 输入电平控制,只有输入电平控制,只有INTx为高电平且为高电平且TRx置置 1 时时,TX才被选通工作才被选通工作。利用这种控。利用这种控制方式制方式,可测量在可测量在INTx端出现的正脉冲的宽度。端出现的正脉冲的宽度。1、T0、T1的方式控制寄存器的方式控制寄存器TMOD低低4位定义位定义T0工作方式工作方式高高4位定义位定义T1工作方式工作方式 GATE=0时时,TX的计数不受的计数不受INTX输入电平控制,只要输入电平控制,只要 TR0(或或 TR1)置置 1,定时器定时器 /计数器就被选通工作计数器就被选通工作.2.CT计数计数/定时功能选择位定时功能选择位C/T1时,时,作计数器用作计数器用,对引脚,对引脚T0(P3.4)或或T1(P3.5)上的输入上的输入脉冲脉冲(外部事件外部事件)计数计数,当检测到发生从高到低的负跳变时当检测到发生从高到低的负跳变时,计数计数器加器加1。加法计数溢出时可向。加法计数溢出时可向CPU发出中断请求信号。发出中断请求信号。计数器计数器在在每个机器周期的每个机器周期的S5P2期间采样期间采样Ti引脚引脚,故识别故识别引脚上的负跳变需要引脚上的负跳变需要2个机器周期个机器周期(24个振荡周期个振荡周期)。因此。因此,可可计数的外部脉冲最高频率为计数的外部脉冲最高频率为fosc/24,当当fosc为为12MHZ时时,最高计最高计数频率为数频率为500KHZ,超出此频率计数将出错超出此频率计数将出错MCS-51单片机的时序单片机的时序 51单片机的时序定时单位共有单片机的时序定时单位共有4个,从小到大依次是:振荡个,从小到大依次是:振荡周期(拍)、状态周期(时钟周期)、机器周期、指令周期周期(拍)、状态周期(时钟周期)、机器周期、指令周期 1)振荡周期(节拍)振荡周期(节拍P)振荡周期振荡周期又称为或拍(又称为或拍(P),它是晶体的振荡周期,或,它是晶体的振荡周期,或外部振荡脉冲的周期。外部振荡脉冲的周期。2)状态周期()状态周期(S)振荡信号经内部时钟电路二分频后成为单片机的时钟周振荡信号经内部时钟电路二分频后成为单片机的时钟周期也称为状态周期(期也称为状态周期(S)。一个状态周期包含)。一个状态周期包含2个拍,分别称个拍,分别称为为P1和和P2。3)机器周期)机器周期 通常把通常把CPU完成一个完成一个基本操作基本操作所需要的时间称为机器所需要的时间称为机器周期。周期。一个机器周期由一个机器周期由6个状态即个状态即12拍组成拍组成,依次表示为,依次表示为S1P1,S1P2,S2P1,S2P2S6P1,S6P2。1个机器周期个机器周期=12个个振荡周期振荡周期(fosc)=6个个状态周期。状态周期。4)指令周期)指令周期 指令周期就是执行一条指令所需要的时间,它是指令周期就是执行一条指令所需要的时间,它是MCS-51单片机中最大的时序单位,一条指令周期应在单片机中最大的时序单位,一条指令周期应在14个机器周期范围内。个机器周期范围内。振荡周期振荡周期=1/=1/晶振频率晶振频率若晶振频率为若晶振频率为12MHz12MHz,则有:,则有:机器周期机器周期=12=12振荡周期振荡周期=1s=1s 若晶振频率为若晶振频率为6MHz6MHz,则有:,则有:机器周期机器周期=12=12振荡周期振荡周期=2s=2s C/T0时时,作定时器用作定时器用,对内部机器周期计数对内部机器周期计数(采用晶振脉冲采用晶振脉冲的的12分频信号作为计数器的计数脉冲分频信号作为计数器的计数脉冲),由于机器周期是定值,由于机器周期是定值,所以所以,这种计数就是定时。这种计数就是定时。当当fosc为为12MHZ时时,则定时器的计数则定时器的计数频率为频率为1MHZ.3.工作方式选择位工作方式选择位 M1、M0定时器定时器/计数器工作方式选择计数器工作方式选择M1 M0 方式方式说说 明明0 00 13位定时器(TH的 8 位和TL的低 5 位)0 11 16 位定时器/计数器 1 02 自动重装入初值的 8 位计数器 1 13 T0 在方式3时分成两个独立的 8 位计数器,T1若设 为方式 3 将停止工作 TF0、TF1 分别是分别是T0、T1 的溢出标志位的溢出标志位,计数器溢出时置计数器溢出时置 1,申请中断申请中断,中断响应后自动清中断响应后自动清 0。TF产生的中断申请是否被接产生的中断申请是否被接受受,要由相应中断是否开放来决定要由相应中断是否开放来决定。8FHTF1位 地 址字 节 地 址 为 88H复 位 初 值 为 00H8EHTR18DHTF08CHTR08BHIE18AHIT189HIE088HIT0TCON与 外 中 断 有 关定 时 器 T0启 动 控 制定 时 器 T0溢 出 中 断定 时 器 T1启 动 控 制定 时 器 T1溢 出 中 断2)T0、T1的控制寄存器的控制寄存器TCONTR0、TR1分别是分别是T0、T1 的的运行控制位运行控制位,软件置软件置 1 后后,T0、T1 才开始工作才开始工作,在系统复位时被清在系统复位时被清 0。5.2 T0、T1 的工作方式与应用的工作方式与应用 51定时定时/计数器的四种工作方式中计数器的四种工作方式中,除方式除方式3外外,其它三其它三种工作方式的基本原理相同。种工作方式的基本原理相同。作计数器用作计数器用时,对芯片引脚时,对芯片引脚T0(P3.4)或或T1(P3.5)上的输入上的输入脉冲计数;脉冲计数;作定时器用作定时器用时,对内部机器周期脉冲计数。加法时,对内部机器周期脉冲计数。加法计数溢出时可向计数溢出时可向CPU发出中断请求信号。发出中断请求信号。定时器定时器/计数器计数器T0有四种不同的工作方式有四种不同的工作方式,而,而T1只有三只有三种工作方式种工作方式(即方式(即方式0、方式、方式1和方式和方式2)。)。、方式方式 0及其应用及其应用T1INT1TL1TH1TF1TR1方式方式0工作时工作时,是个是个13位定时器位定时器/计数器(计数器(TL的高的高3位未使用)位未使用)C/T位设定作定时器位设定作定时器还是计数器。还是计数器。GATE0时时,定时计数启、停仅由定时计数启、停仅由 TR1决定决定。GATE1时时,启、停由启、停由TR1和和INT1两者决定。两者决定。控制启动控制启动图图5-2 T1/T0方式0逻辑结构 X=213N=8192 N其中其中:N是实际要求计数值是实际要求计数值 X是写入是写入THx、TLx的计数初值的计数初值最小计数值为最小计数值为1,其对应应写入计数器的计数初值,其对应应写入计数器的计数初值 X=8191最大计数值最大计数值8192,其对应应写入计数器的计数初值,其对应应写入计数器的计数初值 X=0.即即方式方式0的计数范围的计数范围为为:1 8192定时时间定时时间T的确定公式:的确定公式:T=NT机器机器=(8192-X)x (12 xT震荡震荡)其中其中:N,X是的含义同上是的含义同上 若若fosc=12 MHz,则,则T机器机器=1 s,定时范围为定时范围为18192 s。方式方式0工作时,根据要求的计数值求应工作时,根据要求的计数值求应写入计数器的写入计数器的计数初值计数初值 X 的方法:的方法:方式方式0工作时,根据要求的计数值求定时时间工作时,根据要求的计数值求定时时间T的方法:的方法:5.2.2 方式方式 1及其应用及其应用图图 5-3 T1、T0方式方式 1逻辑结构逻辑结构T1TL1TH1TF1TR1INT1 方式方式1工作时为工作时为16位定时器位定时器/计数器计数器。此时,。此时,THx、TLx都是都是8位加法计数器,其它部分与工作方式位加法计数器,其它部分与工作方式0相同。相同。计数初值计数初值 X的确定公式:的确定公式:X=216-N=65536-N方式方式1工作时工作时计数范围为计数范围为 :165 536定时时间定时时间T的确定公式:的确定公式:T=NT机器机器=(65536-X)T机器机器 =(65536-X)x (12 x T振荡振荡)其中其中:X、N含义与前述相同含义与前述相同如果如果fosc=12 MHz,则,则T机器机器=1 s,定时范围为,定时范围为165 536 s方式方式1工作时的计数初值工作时的计数初值X、定时时间、定时时间T的确定的确定5.2.3 方式方式 2及其应用及其应用图图 5-4 T1方式方式 2逻辑结构图逻辑结构图 方式方式2是是8位自动重装入定时器位自动重装入定时器/计数器计数器。它它将将16位计数寄存位计数寄存器分为器分为两个两个8位寄存器,组成一个可重载的位寄存器,组成一个可重载的8位计数寄存器位计数寄存器,TLx作为计数器,作为计数器,THx作为计数常数寄存器作为计数常数寄存器。INT1T1TL1TH1TF1TR1计数溢出时计数溢出时,在将在将TFx置置1的同时的同时自动将自动将THx的内容装入的内容装入TLx中中,并重新开始从初值计数。并重新开始从初值计数。定时时间定时时间T确定公式:确定公式:T=NT机器机器=(256-X)x T机器机器 =(256-X)x(12 xT振荡振荡x12)如果如果fosc=12 MHz,则则T机器机器=1 s,定时范围为定时范围为1256 s。计数初值确定公式:计数初值确定公式:X=28-N=256-N计数范围为:计数范围为:1256其中其中:X、N含义与前述相同含义与前述相同 方式方式2能能自动重装,自动重装,省去了软件中重新写入计数初值省去了软件中重新写入计数初值的程序,可较精确定时,因而,方式的程序,可较精确定时,因而,方式2适用于做脉冲信号适用于做脉冲信号发生器和串行口波特率发生器发生器和串行口波特率发生器方式方式2工作时的计数初值工作时的计数初值X、定时时间、定时时间T的确定的确定 5.2.4 方式方式 3及其应用及其应用图 5-4 T0 方式 3逻辑结构图逻辑结构图方式方式3中中T0被分成两个独立分成两个独立的的8 位计数器位计数器 T0方式方式3适用于要增加一个额外的适用于要增加一个额外的8位位定时器的场合定时器的场合,由于,由于其其TH0占用占用T1的控制位,故此时的控制位,故此时T1只可设为方式只可设为方式02,并只能,并只能用在不需要中断控制的场合。用在不需要中断控制的场合。TH0占用占用T1的控制位的控制位T0工作在方式工作在方式3时时,T0和和T1的设置和使用是不同的。的设置和使用是不同的。工作方式工作方式3下的定时器下的定时器/计数器计数器T0 T0设置为方式设置为方式3时,使时,使TL0、TH0成为两个互相独立成为两个互相独立的的8位定时器计数器。位定时器计数器。其中,其中,TL0既可做计数又可做定时使用。既可做计数又可做定时使用。TL0使用了使用了T0本身的控制位和引脚,它的工作情况与方式本身的控制位和引脚,它的工作情况与方式0、方式、方式1类似。类似。但方式但方式3下的下的TH0 只能用作定时器只能用作定时器,它借用它借用T1的控制位的控制位TR1、TF1,也就是说,也就是说TH0控制了定时器控制了定时器T1的中断的中断,占用了占用了T1的中断矢量,它的启动、停止受的中断矢量,它的启动、停止受TR1状态控制。状态控制。但是它没但是它没有占用有占用GATE、C/T,而且它只能对内部时钟计数,所以,只,而且它只能对内部时钟计数,所以,只能做定时用。能做定时用。T0工作方式工作方式3下的定时器下的定时器/计数器计数器T1 T1选方式选方式0、1时时T1选方式选方式2时时作串行口波特率作串行口波特率发生器时,发生器时,T1的的计数输出直接去计数输出直接去串行口。因没有串行口。因没有启动控制,故设启动控制,故设置好工作方式后置好工作方式后串行口波特率发串行口波特率发生器即自动开始生器即自动开始运行。运行。要停止要停止T1,只需向只需向T1送一个将其设为送一个将其设为方式方式3的控制字即的控制字即可可,因因T1是不可在方是不可在方式式3下工作的下工作的 T0方式方式3时,时,T1的逻辑结构图的逻辑结构图在在T1用做波特率发生器时,应将用做波特率发生器时,应将T0设置为方式设置为方式3。由于由于T1的的GATE、C/T,没有被占用,故,没有被占用,故T0方式方式3下,下,T1既既可做定时也可做计数用,可选择工作方式可做定时也可做计数用,可选择工作方式0方式方式2。1.1.根据要求的计数值求写入计数器的根据要求的计数值求写入计数器的计数初值计数初值 X X=2=2L L-N N 式中:式中:N N为要求的计数值为要求的计数值,L,L为计数器的长度(位数)为计数器的长度(位数)方式方式0 0时时 L=13 2L=13 2131381928192 方式方式1 1时时 L L16 216 216166553665536 方式方式2 2时时 L L8 28 28 8256256 5.2.4 定时定时/计数计数器的计数初值器的计数初值X、定时时间、定时时间T的确定的确定方式方式0的计数范围为的计数范围为:1 8192方式方式1的计数范围为:的计数范围为:1 65 536方式方式2的计数范围为:的计数范围为:1 256定时时间定时时间T的确定公式:的确定公式:T=NT机器机器 =(2L-X)x T机器机器 =(2L-X)x (12 x T振荡振荡)=(2L-X)x (12 x 1/fosc)其中:其中:N为要求的计数值,为要求的计数值,X为写入计数器的计数初值,为写入计数器的计数初值,L为计为计数器的长度(位数)数器的长度(位数)2.定时时间定时时间T和溢出率计算和溢出率计算当当fosc=12 MHz时时,T机器机器=1 s,则:,则:方式方式0的定时范围为:的定时范围为:18192 s。方式方式1的定时范围为:的定时范围为:165 536 s方式方式2的定时范围为:的定时范围为:1256 s。X=2LTfOSC/12定时时间的倒数即为定时时间的倒数即为溢出率溢出率,XT根据要求的定时时间根据要求的定时时间T,确定应写入计数器的计数值确定应写入计数器的计数值X方式方式0时:时:X=XHXL,XH高高8位,位,XL低低5位位 (13位位)MOV THi,XH;送高;送高8位位 MOV TLi,XL;送;送低低5位位(高高3位设为位设为0)方式方式1时:时:X=XHXL,XH 高高8位,位,XL低低8位位 (16位位)MOV THi,XH;送高送高8位位 MOV TLi,XL;送送低低8位。位。方式方式2时:时:X8位重装载位重装载 (8位位)MOV THi,X;送高;送高8位位 MOV TLi,X;送;送低低8位。位。3.写计数初值的方法:写计数初值的方法:在应用单片机的定时器在应用单片机的定时器/计数器资源时,程序设计一般要按计数器资源时,程序设计一般要按照以下几个步骤进行:照以下几个步骤进行:(1)工作方式控制寄存器的初始化)工作方式控制寄存器的初始化 根据题目要求选定用根据题目要求选定用T0或或T1,并确定做定时还是计数并确定做定时还是计数,各计数器工作方式,确定方式控制字送各计数器工作方式,确定方式控制字送TMOD(2)装载)装载T0或或T1的初值的初值 根据题目要求达到的根据题目要求达到的定时时间定时时间T或或输出信号的周期输出信号的周期、频率频率以及所设定的以及所设定的工作方式工作方式(计数器位数计数器位数)及及晶振频率晶振频率fosc,计算要写入的计算要写入的计数初值计数初值X(十进制数十进制数),并并一定将其转换成一定将其转换成二进制二进制,分别送入,分别送入THi、TLi。4.使用定时使用定时/计数器时的程序设计计数器时的程序设计(3)开中断)开中断(4)启动定时器)启动定时器/计数器计数器 若确定定时若确定定时/计数器工作于中断方式,则在初始化时开计数器工作于中断方式,则在初始化时开放定时放定时/计数器的中断及总中断计数器的中断及总中断(如用汇编,还要在程序前面(如用汇编,还要在程序前面要要设好中断矢量设好中断矢量)。)。如有优先级别要求如有优先级别要求还要还要设定设定IP的的PTi位位.(5)设计中断服务子程序)设计中断服务子程序 根据题目的要求编制相应的中断服务程序根据题目的要求编制相应的中断服务程序。在合适的时候设置在合适的时候设置TRx,启动计数器开始计数,启动计数器开始计数.例:ET0=1;EA=1;void T0_srv(void)interrupt 1 using 1 TL0=X%256;TH0=X/256;.中断服务程序中断服务程序TR0(TR1)=1。5.4 定时定时/计数器的应用计数器的应用 在实时系统中,使用定时器定时与软件定时完全在实时系统中,使用定时器定时与软件定时完全不同,在定时器定时计数时,其他事件可以继续进行,不同,在定时器定时计数时,其他事件可以继续进行,而软件定时则不可能。而软件定时则不可能。例例1 1 设单片机的设单片机的fosc=12MHzfosc=12MHz,要求在脚上输出周期为要求在脚上输出周期为2ms2ms的的方波。方波。解解:周期为周期为2ms2ms的方波要求定时间隔的方波要求定时间隔1ms1ms,每次,每次 时间到时间到取反。取反。若采用若采用T0,选方式,选方式1,定时,则需要的计数初值为:,定时,则需要的计数初值为:X=216TfOSC/12X=64536TMOD:00000001B(1 1)用定时器)用定时器0 0方式方式1 1,采用查询方式。程序如下:,采用查询方式。程序如下:#include#include sbit P1_0=P10;sbit P1_0=P10;void main(void)void main(void)TMOD=0 x01;TMOD=0 x01;/定时器定时器0 0方式方式1 1 TR0=1;TR0=1;for(;)for(;)TH0=-(TH0=-(6453664536/256);/256);/装载计数初值装载计数初值 TL0=-(TL0=-(6453664536%256);%256);do do while(!TF0);while(!TF0);/查询等待查询等待TF0TF0为为1 1 P1_0=!P1_0;P1_0=!P1_0;/定时时间到反相定时时间到反相 TF0=0;TF0=0;/软件清软件清TF0TF0 (2 2)用定时器方式)用定时器方式1 1,采用中断方式,程序如下:,采用中断方式,程序如下:#include#include sbit P1_0=P10;sbit P1_0=P10;void timer 0(void)interrupt 1 using 1 void timer 0(void)interrupt 1 using 1/定定 /时器时器0 0中断处理程中断处理程序序 P1_0=!P1_0;P1_0=!P1_0;取反取反 TH0=-(64536/256);TH0=-(64536/256);/计数初值重装载计数初值重装载 TL0=-(64536%256);TL0=-(64536%256);void main(void)TMOD=0 x01;/设设T0方式方式1 P1_0=0;TH0=-(64536/256);/预置计数初值预置计数初值 TL0=-(64536%256);EA=1;/中断初始化中断初始化,开开CPU中断中断 ET0=1;/允许允许T0中断中断 TR0=1;/启动启动T0 do /利用永真循环等待利用永真循环等待T0中断中断 while(1);
展开阅读全文