1 / 28

第 6 章 定时 / 计数器及应用

第 6 章 定时 / 计数器及应用. ● 教学目标 介绍定时 / 计数器的结构和原理 介绍定时 / 计数器的四种工作方式的应用 介绍定时 / 计数器时应注意的几个问题 ● 学习要求 了解定时 / 计数器的结构 熟悉定时 / 计数器的工作原理 掌握定时 / 计数器的初始化及应用程序设计 掌握定时 / 计数器精确定时要采取的相应措施. 6.1 MCS-51 定时 / 计数器概述.

thane-beck
Download Presentation

第 6 章 定时 / 计数器及应用

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第6章 定时/计数器及应用 ● 教学目标介绍定时/计数器的结构和原理介绍定时/计数器的四种工作方式的应用介绍定时/计数器时应注意的几个问题 ● 学习要求了解定时/计数器的结构 熟悉定时/计数器的工作原理 掌握定时/计数器的初始化及应用程序设计 掌握定时/计数器精确定时要采取的相应措施

  2. 6.1 MCS-51定时/计数器概述 在测控技术中,往往需要定时检测某个物理参数,或按一定的时间间隔来进行某种控制。这种定时的获得,可用软件来实现,即编制一段延时程序,但会降低CPU的工作效率。为此,在微机测控系统中,常采用硬件来实现定时,即使用定时/计数器,它还可以对某种事件进行计数,然后根据计数结果来进行控制。 在MCS-51单片机内部含有两个16位定时/计数器:T0和T1,它们既可以用于定时,也可用于对外部计数脉冲的计数,还可作为串行接口的波特率发生器,这些功能都可通过软件来设定与修改。

  3. 加1计数器 TFX ÷12 振荡器 6.1.1 定时器/计数器的结构 MCS-51定时/计数器由振荡器分频输入电路、外部计数脉冲输入电路、计数脉冲选择电路、计数启停电路、加1计数器和中断标志等组成。图6-1所示其结构框图,图中X=0或1,代表定时/计数器T0或T1相应的信号或寄存器的相应位。 C/T=0 中断 TXC/T=1控制 TRX GATE INTX 图6-1 定时/计数器T0或T1的结构原理图

  4. 6.1.2定时器/计数器的工作原理 由图6-1可见,定时/计数器的核心是一个加1计数器,每输入一个脉冲,计数值加1,当计数到计数器全为1时,再输入一个脉冲就使计数值回零,同时从最高位溢出一个脉冲使控制寄存器TCON的TFX(X=0或1)位置1,作为计数器的溢出中断标志。加1计数器由两个8位特殊功能寄存器TH X和TL X(X=0或1)组成,它们可以被程控为不同的组合状态(13位、16位、两个分开的8位等),从而形成定时/计数器的四种工作方式。 加1计数器计数工作的启动和停止由相应的电路控制,方式寄存器TMOD的GATE位为0时,由寄存器TCON的TR X(X=0或1)位启动(这时TR X=1)或停止(这时TR X=0);GATE位为1,且TR X(X=0或1)为1时,由中断引脚INT X(X=0或1)的外部信号电平启动(这时INT X=1)或停止(这时INT X=0)。

  5. 通过方式寄存器TMOD的C/T位来选择加1计数器计数脉冲的来源:当C/T=1时,计数脉冲来自系统外部的脉冲源,这时定时/计数器成为外部事件计数器,工作于计数器状态;当C/T=0时,计数脉冲来自系统的时钟振荡器的12分频,由于这时的计数脉冲为一时间基准,脉冲数乘以脉冲间隔时间就是定时时间,这时定时/计数器工作于定时器状态。 作为定时器用时,加1计数器的值每过一个机器周期增1。 作为计数器用时,外部输入脉冲加在定时/计数器的外部输入端T0(P3.4)或T1(P3.5),每出现一次从1到0的跳变,加1计数器便加1。

  6. 6.2定时器/计数器的控制 6.2.1定时器/计数器的方式寄存器TMOD 定时器方式字TMOD的格式如下: ⑴ M1和M0:方式选择位,定义如表6-1所示: ⑵C/T:功能选择位。C/T=0为定时器方式;C/T=1为计数器方式。 ⑶GATE:门控位。GATE=0,允许软件控制位TR 0或TR 1启动定时器。T0或T1;GATE=1,且TR 0(或TR 1)=1,允许外部中断引脚电平启动定时器,即由INT 0 (P3.2)和INT 1 (P3..3)引脚分别控制T0和T1。

  7. TMOD的地址为89H,不可按位寻址,只能用字节指令设置定时器工作方式。低半字节定义定时器T0,高半字节定义定时器T1。复位时,TMOD所有位均为零。 表6-1 方式选择位意义

  8. 6.2.2定时器/计数器的控制寄存器 定时器控制字TCON的格式如下: ⑴ TF1(TCON.7):定时器1溢出标志。定时器1溢出时由硬件置1,定时器1以其作为标志去申请中断,当此中断获得响应时由硬件自动清零。 ⑵ TR1 (TCON.6):定时器运行控制位。由软件对其置1或清0来启动或关闭定时器1的运行。 ⑶ TF0 (TCON.5):定时器0溢出标志。其意义同TF1。 ⑷ TR0 (TCON.4):定时器0运行控制位。其意义同TR1。 TCON的其余四位与中断有关,在第5章有关章节已论述。TCON的位地址位88H,可按位寻址。复位时,TCON所有位均为零。

  9. 6.3定时器/计数器的四种工作方式及应用 6.3.1方式0及其应用 一、方式0介绍 当M1M0两位为00时,定时/计数器被选为工作方式0。在这种方式下,16位寄存器(TH0和TL0)只用13位,由TH0的8位和TL0的低5位构成。TL0的高3位是不定的,可以不必理会。因此方式0是一个13位的定时/计数器。当TL0的低5位计数溢出时,即向TH0进位,而TH0计数溢出时向中断标志位TF0进位(称为硬件置位TF0),并请求中断。若这时定时/计数器中断被开放,并且没有其他中断请求或其他中断请求的优先级较低,CPU会自动相应中断,进入相应的中断服务程序;也可以在定时/计数器中断被禁止的情况下,通过查询TF0是否置位来判断定时/计数器的操作完成与否。

  10. C/T=0时,作为定时器方式工作,T0对机器周期计数,其定时时间为:C/T=0时,作为定时器方式工作,T0对机器周期计数,其定时时间为: (213- T0初值)×时钟周期×12 当GATE=1,且TR0=1时,外部信号通过INT0引脚直接开启或关断定时/计数器的计数。当输入高电平时允许计数,否则停止计数。这种操作方法可用于测量加到INT0的外部信号脉冲宽度。 作为计数器方式工作时,T0对外部事件计数。 以上的说明同样适合于定时器T1。 二、应用举例 由前面的论述可知,MCS-51单片机的定时/计数器是可编程的,因此,在使用定时/计数器进行定时或计数之前,首先要通过软件对它进行初始化。初始化包括下述几个步骤: 1.确定工作方式:对TMOD寄存器赋值; 2.置定时/计数器初值:对TH0、TL0或TH1、TL1寄存器赋值; 设加1计数器的最大值为N(方式0,N=213;方式1,N=216;方式2、3,N=28),由于采用加法计数,则初值X的计算方法如下: 计数方式时:X=N-M 定时方式时:X=N-t/T

  11. 在上两式中,M为计数模值,即从计数器启动到溢出时所需计数值;t为定时值;T为计数周期,单片机时钟周期的12倍。在上两式中,M为计数模值,即从计数器启动到溢出时所需计数值;t为定时值;T为计数周期,单片机时钟周期的12倍。 3.根据需要,开放定时器中断:对IE寄存器赋值; 4.启动定时/计数器:使TCON寄存器的TR0或TR1置位,或由加到引脚INTX上的外部信号电平启动。 之后,定时/计数器即按规定的工作方式和初值进行定时或开始计数。 例6-1利用T0方式0产生宽度为2μs,周期为2ms的定时负脉冲,由P1.7送出,系统采用12MHz的晶振。 解由于晶振为12MHz,机器周期为1μs,这样利用T0方式0产生周期为2ms定时的初值X为: X =N-t/T =213-2×10-3/(1×10-6) =8192-2000 =6192 =1830H =1100000110000B 则TH0=11000001B=0C1H,TL0=00010000B=10H

  12. 由于CLR bit和NOP指令的执行时间为1个机器周期,当晶振为12MHz时,这两条指令的执行时间都为1μs。这样,每当定时时间到时,利用T0产生中断,在中断服务程序中,先执行CLR P1.7和NOP两条指令,然后执行SETB P1.7,最后重装TH0和TL0的初值,就可以产生题目所要求的定时脉冲。 置T0为定时方式0,GATE=0,C/T=0, M1M0=00H, T1不用,可任意,一般取0,故TMOD=00H,并由TR0启停T0。

  13. 初始化程序:MOV TMOD,#00H MOV TH0,#0C1H MOV TL0,#10H ;初始化T0 MOV IE,#82H ;开T0中断SETB TR0 ;启动T0………T0溢出中断服务程序: T0INT:CLR P1.7 NOP SETB P1.7 MOV TH0,#0C1H;T0重置初值MOV TL0,#10H RETI

  14. 6.3.2方式1及其应用 一、方式1介绍 当M1M0两位为01时,定时/计数器被选为工作方式1。它与方式0基本相同,只是方式1改用了16位寄存器(TH0和TL0)全部16位。要求定时周期较长时,13位计数器不够用时,可改用16位计数器。 当C/T=0时,作为定时器方式工作,T0对机器周期计数,其定时时间为: (216- T0初值)×时钟周期×12 当GATE=1,同时TR0=1时,外部信号通过INT0引脚直接开启或关断定时/计数器的计数。当输入高电平时允许计数,否则停止计数。这种操作方法可用于测量加到INT0的外部信号脉冲宽度。 作为计数器方式工作时,T0对外部事件计数。 以上的说明同样适合于定时器T1。

  15. 二、应用举例 例6-2利用T0方式1产生一个50Hz的方波,由P1.7送出。系统采用12MHz的晶振,并假定CPU不作其它工作。 解由于周期为1/50Hz=20ms,则这种方波的正负脉冲宽度都为10ms。只要利用T0方式1产生10ms定时,每次定时时间到时,使P1.7取反一次,并让T0的重装初值,即可得到50Hz的方波。 由于晶振为12MHz,机器周期为1μs,这样利用T0方式1产生10ms定时的初值X为: X =N-t/T =216-10×10-3/(1×10-6) =65536-10000 =55536 =D8F0H =1101100011110000B 则TH0=11011000B=0D8H,TL0=11110000B=0F0H

  16. 置T0为定时方式1,GATE=0,C/T=0,M1M0=01H, T1不用,可任意,一般取0,故TMOD=01H,并由TR0启停T0。由于 CPU不作其它工作,则可采用查询方式进行控制。 程序清单: MOV TMOD,#01H MOV TH0,#0D8H MOV TL0,#0F0H ;初始化T0 SETB TR0 ;启动T0 LOOP:JBC TF0,AGN ;查询定时时间到否? AJMP LOOP ;定时时间未到,则继续查询等待AGN: MOV TH0,#0D8H ;定时时间到,T0重置初值 MOV TL0,#0F0H CPL P1.7 ;输出取反 NOP AJMP LOOP ;重复循环

  17. 6.3.3方式2及其应用 一、方式2介绍 当M1M0两位为10时,定时/计数器被选为工作方式2。这种方式使定时/计数器成为能重置初值的8位定时/计数器。 在这种方式下,16位计数器分作两个8位计数器:TL0作为8位计数器,TH0用作保存计数初值。一旦TL0计数溢出,便置位TF0,并将TH0的内容重新装入TL0中进行新的一轮计数,如此循环重复不止。 因此,这种方式特别适合用作较精确的脉冲信号发生器,脉冲信号的周期计算如下: (28- TH0初值)×时钟周期×12 以上的说明同样适合于定时器T1。

  18. 二、应用举例 由于方式2可省去用户软件重装初值的操作,可获得相当精确的定时时间,因此T1常用作串行口波特率发生器。在程序初始化时,要对TH0和TL0赋同样的初值。 例6-3采用11.059MHz晶振,将T1用作串行口波特率发生器,按方式2产生1200的波特率. 解 参9.1节可以知道,波特率的计算如下: 波特率= 若SMOD=0,则可以算得重装载值: (TH1)=256- 232=E8H 置T1为定时方式2,GATE=0,C/T=0, M1M0=02H, T0不用,可任意,一般取0,故TMOD=20H,并由TR1启停T1。 程序清单: MOV TMOD,#20H MOV TH1,#0E8H MOV TL1,#0E8H ;初始化T1 SETB TR1 ;启动T1

  19. 6.3.4方式3及其应用 当M1M0两位为11时,定时/计数器被选为工作方式3。在方式3下,定时器T1将停止计数,只是保持其计数值,与置TR1为0等效。定时器T0在方式3下分成两个独立的计数器TL0和TH0,见图6-5所示。其中,TL0可用作定时或计数器,并占用定时器T0的所有控制位:GATE,C/T,TR0,INT0和TF0;而TH0固定作为定时器用,并借用定时器T1的TR1和TF1,这时TH0控制着定时器的T1中断。 当定时器T0在方式3时,定时器T1仍可按方式0、1、2工作,只是不能使用其溢出标志TF1和请求中断而已。

  20. TH0(8位) TF1 ÷12 ÷12 振荡器 振荡器 TL0(8位) TF0 图6-2定时/计数器T0方式3的结构图 C/T=0 中断 T0 C/T=1 控制 TR0 GATE INT0 中断 TR1

  21. 二、应用举例 当按方式2将定时器T1用作串行口波特率时,为增加一个额外的定时器,可将定时器T0设置成方式3工作。 例6-4假设某用户系统中,采用12MHz晶振,已将T1按方式2工作,用作串行口波特率发生器,并且已使用了2个外部中断。现要求再增加一个外部中断源,并由P1.7口输出一个5KHz的方波。 解为了不增加其它硬件的开销,可把定时器T0置于计数工作方式3,利用T0端作为附加的外部中断输入端,把TL0预置为0FFH,这样当T0输入端出现由1至0的负跳变时,TL0立即溢出,申请中断,相当于边沿触发的外部中断源。在方式3下,TH0总是作为8位定时器用,可以用它来控制P1.7口输出的方波频率。 由P1.7输出5KHz的方波,即每隔100μs使P1.7口的电平变化一次,TH0初值X为: X=N-t/T=28-100×10-6/(1×10-6)=256-100=156=9CH 置T1为定时方式2,GATE=0,C/T=0, M1M0=02H, T0为计数方式3,GATE=0,C/T=1, M1M0=03H,,故TMOD=27H,并由TR0启停T0。采用中断方式来判断TH0的定时时间到否,每次时间到时,在定时器T0中断服务程序中将P1.7口取反一次。

  22. 初始化程序: MOV TMOD,#27H MOV TH0,#9CH MOV TL0,#0FFH ;初始化T0 MOV TCON,#55H;置外部中断边沿触发方式,并启 动T0和T1 MOV IE,#9FH ;开放全部中断 … … … TL0溢出中断服务程序: TL0INT:MOV TL0,#0FFH (相关中断处理) RETI TH0溢出中断服务程序: TH0INT:MOV TH0,#9CH CPL P1.7 RETI

  23. 6.3.5定时器/计数器应用的其它问题 一、定时器溢出和中断的同步 定时器溢出时,自动产生内部中断请求,若此时中断已经开放,该中断会被响应。但真正进入中断服务程序要经过的时间并非固定不变,而取决于其它中断服务程序是否正在运行,或取决于正在执行什么样的指令。 若定时器溢出中断是唯一的中断源,则延时时间取决于正在执行什么样的指令,可能在3至8个机器周期内变化,在这种情况下,相邻2次定时中断响应的间隔的变化不大,在对定时精度要求不高的场合,可以忽略。但在对定时精度要求高的场合,需要对由此引起的误差进行补偿,可采用以下方法:在定时器溢出中断得到相应时,停止定时器计数,读出计数值(它反映了中断响应的延迟时间),根据此数值计算出到下一次中断所需的时间,并修改相应的定时器初值和重新启动定时器。

  24. 二、读运行中定时/计数器 为了对定时时间进行补偿,需要读出和改变定时/计数器的计数值。采用先停定时器,后读出并改变计数值的方法。在某些场合,希望不间断定时过程的情况下,读出定时器某刻的瞬时计数值,但如不注意,读出的计数值可能出错,因为THX和TLX不可能同时读出。 解决办法:先读THX,后读TLX,再读THX。若2次读得的THX没有变化,则读得的内容是正确的;若前后2次读得的THX有变化,则重复上述过程,直到2次读得的THX没有变化。 三、定时器门控位GATE的应用 前面讲过,门控位GATE用于选择控制定时/计数器启停的信号,当GATE=0时,定时/计数器的运行由TRX控制;当GATE=1,且TR X=1时,外部信号通过INTX引脚直接开启或关断定时/计数器的计数。当输入1电平时允许计数,否则停止计数。这一特点可极为方便地用于测量加到INTX的外部信号脉冲宽度。

  25. 小结 在MCS-51单片机内部含有两个16位定时/计数器:T0和T1,它们由振荡器分频输入电路、外部计数脉冲输入电路、计数脉冲选择电路、计数启停电路、加1计数器和中断标志等组成。其核心是一个加1计数器,每输入一个脉冲,计数值加1,当计数到计数器全为1时,再输入一个脉冲就使计数值回零,同时从最高位溢出一个脉冲使控制寄存器TCON的TFX(X=0或1)位置1,作为计数器的溢出中断标志。 T0和T1的启动和停止由方式寄存器TMOD的GATE位控制:GATE为0时,由寄存器TCON的TR X(X=0或1)位启动(这时TR X=1)或停止(这时TR X=0);GATE位为1,且TR X(X=0或1)为1时,由中断引脚INT X(X=0或1)的外部信号电平启动(这时INT X=1)或停止(这时INT X=0)。

  26. 通过方式寄存器TMOD的C/T位来选择加1计数器计数脉冲的来源:当C/T=1时,计数脉冲来自系统外部的脉冲源,这时定时/计数器成为外部事件计数器,工作于计数器状态;当C/T=0时,计数脉冲来自系统的时钟振荡器的12分频,由于这时的计数脉冲为一时间基准,脉冲数乘以脉冲间隔时间就是定时时间,这时定时/计数器工作于定时器状态。通过方式寄存器TMOD的C/T位来选择加1计数器计数脉冲的来源:当C/T=1时,计数脉冲来自系统外部的脉冲源,这时定时/计数器成为外部事件计数器,工作于计数器状态;当C/T=0时,计数脉冲来自系统的时钟振荡器的12分频,由于这时的计数脉冲为一时间基准,脉冲数乘以脉冲间隔时间就是定时时间,这时定时/计数器工作于定时器状态。

  27. 通过方式寄存器TMOD的M1M0位来设定T0和T1的工作方式:当M1M0两位为00时,定时/计数器被选为工作方式0,16位寄存器(TH0和TL0)只用13位,由TH0的8位和TL0的低5位构成,因此方式0是一个13位的定时/计数器;当M1M0两位为01时,定时/计数器被选为工作方式1,它与方式0基本相同,只是方式1改用了16位寄存器(TH0和TL0)的全部16位;当M1M0两位为10时,定时/计数器被选为工作方式2,16位计数器分作两个8位计数器,TL0作为8位计数器,TH0用作保存计数初值,一旦TL0计数溢出,便置位TF0,并将TH0的内容重新装入TL0中进行新的一轮计数,如此循环重复不止,常将T1设定为方式2用作串行接口的波特率发生器;当M1M0两位为11时,定时/计数器被选为工作方式3,定时器T0在方式3下分成两个独立的计数器TL0和TH0, 其中,TL0可用作定时或计数器,并占用定时器T0的所有控制位(GATE,C/T,TR0,INT0和TF0),而TH0固定作为定时器用,并借用定时器T1的TR1和TF1,这时TH0控制着定时器的T1中断,在方式3下,定时器T1将停止计数,只是保持其计数值,与置TR1为0等效。

  28. 思考题与习题六 1.8051单片机内部设有几个定时/计数器?它们是由哪些专用寄存器组成?定时、计数的速率(即计数频率)各为多少? 2.简述定时/计数器的四种工作方式及其特点,并说明如何选择和设定? 3.选用T1方式0产生500µs的定时,在P1.0,输出周期为1ms的方波,晶振fosc=6MHz。 4.已知8051单片机系统时钟频率为6MHz,试用定时器T0方式2和P1口输出周期性矩形脉冲,其周期为400µs,正脉冲宽度为400µs。 5.试用定时器T1设计外部事件计数器。要求每计数1万个脉冲,就将T1转为10ms定时方式,当定时到后,又转为计数方式,如此反复循环不止。当系统的时钟频率为6MHz时,编写相应程序。 6. 已知8051单片机系统时钟频率为6MHz,利用其定时器方式1测量某正脉冲宽度时,能测量的最大脉宽是多少?若脉宽大于此极限值时,采用何种办法测量?

More Related