收藏 分销(赏)

第五章定时器/计数器.doc

上传人:仙人****88 文档编号:12039597 上传时间:2025-09-01 格式:DOC 页数:12 大小:410KB 下载积分:10 金币
下载 相关 举报
第五章定时器/计数器.doc_第1页
第1页 / 共12页
第五章定时器/计数器.doc_第2页
第2页 / 共12页


点击查看更多>>
资源描述
第五章MCS-51定时器/计数器及其应用 5.1定时方法概述 在单片机的应用中,可供选择的定时方法主要有: 1.软件定时 软件定时是靠执行一个循环程序以进行时间延迟。软件定时的特点是时间较精确,且不需外加硬件电路。但软件定时要占用CPU的时间,增加CPU开销,因此软件定时的时间不宜太长。 当单片机时钟确定后,每条指令的指令周期是确定的,在指令表中用振荡周期表示出来了。因此,根据程序执行所用的总的振荡周期数和振荡频率,可以较准确的计算,程序执行完所用的时间。软件延时是实际经常采用的一种短时间定时方法。 例4-16 ORG 1000H TIME: MOV R1, #0FAH ;12个振荡周期 L1 : MOV R0, #0FFH ;12个振荡周期 W1 : DJNZ R0 , W1 ;24个振荡周期 DJNZ R1 , L1 ; 24个振荡周期 NOP ; 12个振荡周期 NOP ; 12个振荡周期 RET ; 24个振荡周期 计算延时时间: N=12+(12+24×255+24)×250+12+12+24 =1539060个振荡周期 如果ƒ=6MHz Tƒ=1/ƒ=1/6μs Tt=N×Tƒ=1539060×1/6μS=256510μS=0.25651S 调整R0和R1中的参数,可改变延时时间,如果需要加长延时间,可以增加循环嵌入。当延时时间较长、不便多占用CPU时间的情况下,一般采用定时器方法。 2.内部可编程定时器 这种定时方法是通过对系统时钟脉冲的计数来实现的。计数值通过程序设定,改变计数值,也就改变了定时时间,使用起来既灵活又方便。此外,由于采用计数方法实现定时,因此可编程定时器都兼有计数功能,可以对外来脉冲进行计数。 3.外部扩展专用定时器 对于时间较长的定时,常使用外部扩展专用定时器完成。这种方法定时全部由硬件电路完成,不占用CPU时间。例如:DALLAS 公司的DS1302低功耗时钟芯片.它可以对年月日时分秒计时,并且有闰年补偿功能,它可以很方便地和单片机接口. 5.2 51单片机内部的定时器/计数器 作为基本组成内容,8051单片机共有两个可编程的定时器/计数器,分别称定时器/计数器0和定时器/计数器1。它们都是十六位加法计数结构,分别由TH0和TL0及TH1和TL1两个8位计数器组成,它们具有计数和定时两种工作方式以及四种工作模式。两个特殊功能寄存器(定时器控制寄存器TCON和定时器方式寄存器TMOD)用于确定定时器/计数器的功能和操作方式。图5-1给出了定时器/计数器的结构框图,它反映了单片机中微处理器、寄存器TCON和TMOD与定时器T0、T1之间的关系。计数器的输入脉冲源可以是外部脉冲源或系统时钟振荡器,计数器对这两个输入脉冲之一进行递增计数。 顾名思义,MCS-51的每个定时器/计数器都具有定时和计数两种功能。 图5-1 定时器/计数器的结构框图 1.计数功能 所谓计数是指对外部事件进行计数。外部事件的发生以输入脉冲表示,因此计数功能的实质就是对外来脉冲进行计数。8051芯片有T。(P3.4)和T1(P3.5)两个信号引脚,分别是这两个计数器的计数输入端,外部输入的脉冲在负跳变时有效,进行计数器加1(加法计数)。 计数方式下,单片机在每个机器周期的S5P2拍节对外部计数脉冲进行采样。如果前一个机器周期采样为高电平,后一个机器周期采样为低电平,即为一个有效的计数脉冲。在下一机器周期的S3P1进行计数。可见采样计数脉冲是在二个机器周期进行的。鉴于此,计数脉冲的频率不能高于振荡脉冲频率的1/24。 2.定时功能 定时功能也是通过计数器的计数来实现的,不过这时的计数脉冲来自单片机的内部,即每个机器周期产生一个计数脉冲。也就是每个机器周期计数器加1。由于一个机器周期等于12个振荡脉冲周期,因此计数频率为振荡频率的1/12。如果单片机采用12MHZ晶体,则计数频率为1MHz。即每微秒计数器加1。这样不但可以根据计数值计算出定时时间,也可以反过来按定时时间的要求计算出计数器的预置值。 5.3 定时器/计数器的控制寄存器 与定时器/控制器有关的控制寄存器有: 1.定时器控制寄存器(TCON) TCON寄存器既参与中断控制又参与定时控制。有关中断的控制内容已在第六章中说明,此处只对其定时控制功能加以介绍。其中有关定时的控制位共有四位: ·TF0(TF1)--计数溢出标志位 当计数器从初值开始递增计数至计数溢出(计满)时,由单片机内部(硬件)自动对该位置1。使用查询方式时,此位作状态位供查询,但应注意查询有效后应以软件方法及时将该位清0;使用中断方式时,此位作中断标志位,在转向中断服务程序时,自动(硬件)清0。 ·TR0(TR1)--定时器运行控制位 定时器T0(T1)的运行控制位 该位根据需要以软件方法使其置1或清0,用来启动/关闭定时器T0(T1)。 2.工作方式控制寄存器(TMOD) TMOD寄存器是一个专用寄存器,用于控制两个定时器/计数器的工作方式。但TMOD寄存器不能位寻址,只能用字节传送指令设置其内容。各位定义如下: 位序 D7 D6 D5 D4 D3 D2 D1 D0 位符号 GATE C/T M1 M0 GATE C/T M1 M0 其中:高4位字段用于定时器T1的工作方式控制,低4位字段用于定时器T0的工作方式控制。TMOD各位的定义和功能如下: ·GATE--门控位 GATE=0以运行控制位TR0(TR1)启动定时器 GATE=l以外中断请求信号(INT0、INT1)启动定时器 以上说明:GATE为1时,定时器/计数器的计数受外部引脚输入电平的控制,具体来讲,INT0控制T0运行,INT1控制T1运行。GATE为0时,定时器/计数器的运行不受外部输入引脚的控制。因此,通常称前者为外部控制,后者为内部控制。 ·C/T--定时方式或计数方式选择位 C/T=0定时工作方式,计数脉冲是内部脉冲,其周期等于机器周期。 C/T=1计数工作方式,计数脉冲是从引脚T0或T1输入。 ·M1M0—工作方式选择位 M1M0=00 方式0 M1M0=01 方式1 MlM0=10 方式2 M1M0=11 方式3 3.中断允许寄存器(IE) IE寄存器的详细内容请见第六章。其中与定时器/计数器有关的位重复介绍如下。 ·EA--中断允许总控制位 ·ET。(ET1)--定时/计数中断允许控制位 ET。(ET1)=0禁止定时/计数中断 ET。(ET1)=1允许定时/计数中断 5.4 MCS-51的定时器/计数器工作方式 MCS-51的定时器/计数器共有四种工作方式,现从方式0开始逐个介绍。 5.4.1定时器/计数器工作方式0 1.电路逻辑结构 方式0是13位计数结构的工作方式,其计数器由TH0全部8位和TL0的低5位构成。TL0的高3位弃之不用。图5-2是定时器/计数器0在工作方式0的逻辑结构(定时器/计数器1与此完全相同)。 图5-2 定时器/计数器工作方式0逻辑结构 如图所示,当C/T=0时,多路开关接通振荡脉冲的十二分频输出,13位计数器以此进行计数,这就是所谓定时器工作方式。当C/T=1时,多路开关接通计数引脚(T0),外部计数脉冲由引脚T。输入。当计数脉冲发生负跳变时,计数器加1,这就是所谓计数工作方式。 不管是那种工作方式,当TL。的低5位计数溢出时,向TH。进位,而全部13位计数溢出时,则向计数溢出标志位TF。进位。 这里说明一下工作方式控制寄存器中门控位(GATE)的功能。当GATE=0时,由于GATE信号封锁了或门,使引脚INT0信号无效。而这时或门输出端的高电平状态却打开了与门。因此可以由TR0(TCON寄存器)的状态来控制计数脉冲的接通与断开。这时如果TR0=1,则接通模拟开关,使计数器进行加法计数,即定时器/计数器工作。如果TR。=0,则断开模拟开关,停止计数,定时器/计数器不能工作。因此在单片机的定时或计数应用中要注意GATE位的清0 当GATE=1,同时又TR0=1时,有关电路的或门和与门全都打开,计数脉冲的接通与断开由引脚信号INT。控制。当该信号为高电平时计数器工作;当该信号为低电平时计数器停止工作。这种情况可用于测量外信号的脉冲宽度。 2.定时和计数应用 在方式0下,当为计数工作方式时,计数值的范围是: 1~8192(213) 当为定时工作方式时,定时时间的计算公式为; (213-计数初值)×T ×12 或(213-计数初值)×机器周期 其时间单位分别与晶振周期或机器周期相同。 如晶振频率为6MHZ,则最小定时时间为: [213-(213-1)]×1/6 × 10-6 ×12 = 2 × 10-6=2(us) 最大定时时间为: (213-0)× 1/6 × 10-6X12=16384X10-6=16384(us) 定时器/计数器初始化程序设计的基本步骤如下: (1)确定工作方式,对寄存器TMOD和TCON等赋值; (2)预置定时或计数的初值X; (3)根据需要开放或关闭定时器/计数器的中断; (4)启动定时器/计数器工作。 [应用举例]设单片机晶振频率Fosc=6MHz,使用定时器1以方式0产生周期为500us的等宽正方波脉冲,并由P1.0输出。以查询方式完成。 ①计算计数初值 欲产生500us的等宽正方波脉冲,只需在P1.0端以250us为周期交替输出高低电平即可实现,为此定时时间应为250us。使用6MHZ晶振,则一个机器周期为2us。方式0为13位计数结构。 设待求的计数初值为X,则: (213-X) × 1/6 × 10-6× 12=250× 10-6 ,求解得: X=8067。二进制数表示为1111110000011。转换为十六进制数,高8位为FCH,低5位为03H。其中高8位放入TH1,即TH1=FCH;低5位放入TL1,即TL1=O3H。 ②TMOD寄存器初始化 为把定时器/计数器1设定为方式0,则M1M0=00;为实现定时功能,应使C/T=0;为实现定时器/计数器1的运行控制,则GATE=0。定时器/计数器0不用,有关位设定为0。因此TMOD寄存器应初始化为00H。 ③由定时器控制寄存器TCON中的TR1位控制定时的启动和停止,TR1=1启动,TR1=0停止。 ④程序设计 MOV TMOD,#00H ;设置T1工作方式0 MOV TH1,#OFCH ;设置计数初值 MOV TL1,#03H ; MOV IE,#00H ;禁止中断 SETB TR1 ;启动定时 LOOP:JBC TF1,LOOP1 ;查询计数溢出 AJMP LOOP LOOP1:MOV TH1,#0FCH ;重新设置计数初值。N MOV TL1,#03H ; CPL P1。0 ;输出取反 AJMP LOOP ;重复循环 5.4.2定时器/计数器工作方式1 方式1是16位计数结构的工作方式,计数器由TH全部8位和TL全部8位构成。其逻辑电路和工作情况与方式0完全相同。所不同的只是组成计数器的位数。 图5-3 定时器/计数器工作方式1逻辑结构 当为计数工作方式时,计数值的范围是: 1~65536(216) 当为定时工作方式时,定时时间计算公式为: (216-计数初值)X晶振周期X12 或(216-计数初值)X机器周期 其时间单位与晶振周期或机器周期相同。 如晶振频率为6MHZ,则最小定时时间为: [216-(216-1)]X1/6X10-6X12=2X10-6=2(us) 最大定时时间为: (216-0)X1/6X10-6X12=131072X10-6=131072(us)»131ms [应用举例]:题目同方式0的应用举例,但以中断方式完成。即单片机晶振频率FOSC=6MHZ,使用定时器1以工作方式1产生周期为500us的等宽正方波脉冲,并在P1。0端输出。 ①计算计数初值 TH1=FFH TL1=A1H ②TMOD寄存器初始化 TMOD=10H ③程序设计 主程序: MOV TMOD,#1OH ;定时器 1工作方式1 MOV TH1,#0FFH ;设置计数初值 MOV TL1,#0A1H ; SETB EA ;开中断 SETB ET1 ;定时器1允许中断 LOOP:SETB TR1 ;定时开始 HERE:SJMP $ ;等待中断 SJMP HERE 中断服务程序: ORG 001BH MOV TH1,#0FFH ;重新设置计数初值 MOV TL1,#0A1H ; CPL P1.0 ;输出取反 RETI ;中断返回 5.4.3定时器/计数器工作方式2 工作方式0和工作方式1的最大特点是计数溢出后,计数器为全0。因此循环定时或循环计数应用时就存在反复设置计数初值的问题。这不但影响定时精度,而且也给程序设计带来不便。方式2就是针对此问题而设置的,它具有自动重新加载功能,即自动加载计数初值,因此也可以说方式2是自动重新加载工作方式。在这种工作方式下,把16位计数器分为两部分,即以TL作计数器,以TH作预置寄存器,初始化时把计数初值分别装入TL和TH中。当计数溢出后,不是像前两种工作方式那样通过软件方法,而是由预置寄存器TH以硬件方法自动给计数器TL重新加载。 1.电路逻辑结构 图5-3是定时器/计数器0在工作方式2的逻辑结构。 图5-4 定时器/计数器工作方式2逻辑结构 初始化时:8位计数初值同时装入TL和TH中。当TL计数溢出时,置位TF,同时把保存在预置寄存器TH中的计数初值自动加载TL,然后TL重新计数。如此重复不止。这不但省去了用户程序中的重装指令,而且也有利于提高定时精度。但这种工作方式下是8位计数结构,计数值有限,最大只能到255。 这种自动重新加载工作方式非常适用于循环定时或循环计数应用,例如用于产生固定脉宽的脉冲,此外还可以作串行数据通信的波特率发送器使用。 2.循环定时和循环计数应用 [应用举例]使用定时器0以工作方式2产生100us定时,在P1.0输出周期为200us的连续方波。已知晶振频率Fosc=6MHZ。 ①计算计数初值。 6MHZ晶振下,一个机器周期为2us,以TH0作重新装载的预置寄存器,TL0作8位计数器,假设计数初值为X。则: (28-X)X2X10-6=100X10-6 求解得: X=206D=11001110B=CEH 把CEH分别装入TH-0和TL0中: TH0=CEH,TL0=CEH ②TMOD寄存器初始化 定时器/计数器0为工式方式2,M1M0=10;为实现定时功能C/T=0;为实现定时器/计数器0的运行GATE=0;定时器/计数器1不用,有关位设定为0。 综上情况TMOD寄存器的状态应为02H。 ③程序设计(查询方式) MOV IE,#00H ;禁止中断 MOV TMOD,#02H ;设置定时器0为方式2 MOV TH0,#0CEH ;设置计数初值 MOV TL0,#0CEH ;保存计数初值 SETB TR0 ;启动定时 LOOP: JBC TF0,LOOPI ;查询计数溢出 AJMP LOOP ;输出方波 LOOP1:AJMP LOOP ;重复循环 由于方式2具有自动重装载功能,因此计数初值只需设置一次,以后不再需要软件重置。 ④程序设计(中断方式) 主程序: MOV TMOD,#02H ;定时器O为方式2 MOV TH0,#0CEH ;设置计数初值 MOV TL0,#0CEH ;保存计数初值 SETB EA ;开中断 SETB ET0 ;定时器0允许中断 LOOP: SETB TR0 ;启动定时 HERE: SJMP $ ;等待中断 SJMP HERE 中断服务程序: ORG 000BH CPL P1.0 ;输出方波 RETI ;中断返回。 [应用举例]用定时器1以工作方式2计数,每计100次进行累加器加1操作。 ①计算计数初值 28-100=156D=9CH 则TH1=9CH,TL1=9CH @TMOD寄存器初始化 M1M0=10,C/T=1,GATE=0 因此TMOD=60H ③程序设计 MOV IE,#00H ;禁止中断 MOV TMOD,#60H ;设置计数器1为方式2 MOV TH1,#9CH ;计数初值 MOV TL1,#9CH ;设置计数初值 SETB TR1 ;启动计数 DEL:JBC TF1,LOOP ;查询计数溢出 AJMP DEL LOOP:INC A ;累加器加1 AJMP DEL ;循环返回 5.4.4定时器/计数器工作方式3 前三种工作方式下,对两个定时器/计数器的设置和使用是完全相同的。但是在工作方式3下,两个定时器/计数器的设置和使用却是不同的,因此要分开介绍。 1.工作方式3下的定时器/计数器0 在工作方式3下,定时器/计数器0被拆成两个独立的8位计数器TL0和TH0。其中TL0既可以计数使用,又可以定时使用,定时器/计数器0的各控制位和引脚信号全归它使用。其功能和操作与方式0或方式1完全相同。而且逻辑电路结构也极其类似,如图5-4所示。 图5-5 定时器/计数器0工作方式3逻辑结构 与TL0的情况相反,对于定时器/计数器0的另一半TH0,则只能作为简单的定时器使用。而且由于定时器/计数器0的控制位已被TL0独占,因此只好借用定时器/计数器1的控制位TR1和TF1。即以计数溢出去置位TF1,而定时的启动和停止则受TR1的状态控制。 由于TL0既能作定时器使用也能作计数器使用,而TH0只能作定时器使用却不能作计数器使用,因此在工作方式3下,定时器/计数器0可以构成二个定时器或一个定时器一个计数器。 2.工作方式3定时器/计数器1 如果定时器/计数器0已工作在工作方式3,则定时器/计数器1只能工作在方式0、方式1或方式2下,因为它的运行控制位TR1及计数溢出标志位TF1;已被定时器/计数器0借用,如图8-5所示。 图5-6 定时器/计数器0工作方式3下的使用 在这种情况下,定时器/计数器1通常是作为串行口的波特率发生器使用,以确定串行通信的速率。因为已没有计数溢出标志位TF1可供使用,因此只能把计数溢出直接送给串行口。当作为波特率发生器使用时,只需设置好工作方式,便可自动运行。如要停止工作,只需送入一个把它设置为方式3的方式控制字就可以了。因为定时器/计数器1不能在方式3下使用,如果硬把它设置为方式3,就停止工作。 5.5门控位GATE的功能和使用方法 当TMOD中的门控位GATE0=1时,定时器T0的启动受INT0上的电平控制,只有当INT0和TR0同时为1时,定时器T0才启动。利用这个功能,可以测试INT0上输入的正脉冲宽度。其具体程序如下: ORG 8000H MOV TMOD,#09H MOV TL0,#00H MOV TH0,#00H CLR OAFH ;关中断 HERE1:JB INT0,HERE1 ;等INT0为低电平 SETB TR0 HERE2:JNB INT0,HERE2 ;等INT0为高电平,启动定时器T0 HERE3:JB INT0,HERE3 ;等INT0低电平到来 CLR TR0 ;停止定时器T0工作 LCALL DIR ;显示子程序,显示TH0、TL0计数,即 ;显示脉宽有多少个机器周期 5.6用定时器/计数器进行外部中断扩展 MCS-51为用户提供了两个外部中断请求输入线INT0和INT1。在实际应用中,外部中断源可能多于两个,这时就需要对外部中断源进行扩展连接。 在这种情况下若定时器/计数器尚有富余的话,则可利用定时器/计数器以计数工作方式实现外部中断扩展。 在计数工作方式下,如果把计数器预置为全1,则只要在计数输入端(T1或T0)输入一个脉冲,就可以使计数器溢出,产生计数溢出中断。如果以一个外部中断请求作为计数脉冲输入,则可以借“计数中断”之名行“外部中断服务”之实,这就是所谓的以定时器/计数器实现外部中断扩展。具体实现方法为: ①置定时器/计数器为工作方式2,即自动装载式8位计数,以便在一次中断响应后,为下一次中断请求作好准备。 ②高低8位计数器(TH和TL)均预置为FFH。 ③扩展的外部中断请求信号接计数输入端(T0或T1)。 ④把扩展外中断服务程序按所用的定时器/计数器中断入口地址存放。 例如以定时器/计数器0扩展一个外部中断,其初始化程序段为: MOV TMOD,#06H ;置计数器0为工作方式2 MOV TH0,#0FFH ;置计数初值 MOV TL0,#0FFH ; SETB EA ;开中断 SETB ET0 ;计数器0允许中断 SETB TR0 ;计数启动 思考及练习题 1. 8051单片机内部设有几个定时器/计数器?它们是由哪些专用寄存器组成? 2. MCS-51单片机定时器/计数器有哪几种工作方式?各有什么特点? 3. 8051单片机定时器/计数器作定时和计数时其计数脉冲分别由谁提供? 4. 8051单片机定时器/计数器的门控信号GATE设置为1时,定时器如何启动? 5. 8051的T0、T1用作定时时,其定时时间与哪些因素有关? 6. 当8051的T0用作方式3时,由于TR1已被T0占用,此时如何控制定时器T1的开启和关闭? 7. 已知8051单片机的FOSC=6MHZ,请利用T0和P1.0输出矩形波,其矩形波高电平宽度50us,低电平宽度300us。请编程实现。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服