zoukankan      html  css  js  c++  java
  • MCS-51单片机的定时器/计数器

    定时/计数器的结构

    单片机为了能够精确地控制时间,定时器是不可缺少的。MCS-51芯片内部具有两个16位的定时器。

    定时/计数器的结构如图6-1所示,定时/计数器T0由特殊功能寄存器TH0、TL0构成,定时/计数器T1由特殊功能寄存器TH1、TL1构成。

    定时/计数器具有两种工作模式、4种工作方式(方式0、方式1、方式2和方式3),属于增计数器。

    TMOD用于选择定时/计数器T0、T1的工作模式和工作方式。

    TCON用于控制T0、T1的启动和停止计数,同时包含了 T0、T1的状态。

    T0、T1不论是工作在定时器模式还是计数器模式,都是对脉冲信号进行计数,只是计数信号的来源不同。

    计数器模式是对加在T0 (P3.4)和T1 (P3.5)两个引脚上的外部脉冲进行计数(见图6-1 )。定时器工作模式是对单片机的时钟振荡器信号经片内12分频后的内部脉冲信号计数。由于时钟频率是定值,所以可根据计数值计算出定时时间。

    计数器的起始计数都是从计数器初值开始的。单片机复位时计数器的初值为0,也可通过指令给计数器装入一个新的初值。

    工作方式控制寄存器TMOD

    用于选择定时/计数器的工作模式和工作方式,字节地址为89H,不能位寻址,格式如图6-2所示。

    8位分为两组,高4位控制T1,低4位控制T0。

    TMOD各位的功能如表6-1所示。

    image-20200602000111363

    定时/计数器控制寄存器TCON

    字节地址为88H,可位寻址,位地址为88H〜8FH,格式如图6-3所示。

    1. TF1、TF0——计数溢出标志位
      当计数器计数溢出时,该位置“1”。使用査询方式时,此位作为状态位供CPU查询,但应注意查询有效后,应使用软件及时将该位清“0”。使用中断方式时,此位作为中断请求标志位,;进入中断服务程序后由硬件自动清“0” O
    2. TR1、TR0—— 计数运行控制位
      TR1位(或TR0位)=1,启动定时/计数器工作的必要条件。
      TR1位(或TR0位)=0,停止定时/计数器工作

      该位可由软件置“1"或清“0” 。

    定时/计数器的4种工作方式

    方式0及应用

    方式0的工作原理

    M1、M0=00时,被设置为工作方式0,等效逻辑结构框图如图6-4所示(以定时/计数器T1 为例,TMOD.5、TMOD.4=00)。

    image-20200602000320065

    方式0是13位计数器,由TLx (x=O,l)低5位和THx高8位构成。TLx低5位溢出则向THx进位,THx计数溢出则把TCON中的溢出标志位TFx置“ 1 ”。

    图6-2电C/〒位控制的电子开关决定了定时/计数器的两种工作模式。

    1. C/〒=0,电子开关打在上面位置,T1 (或T0)为定时器工作模式,把时钟振荡器12分频后的脉塑乍为计数信号
    2. C/〒=1,电子开关打在下面位置,T1 (或T0)为计数器工作模式,计数脉冲为P3.4(或P3.5)引脚上的外部输入脉冲,当引脚上发生负跳变时,计数器加1。

    GATE位状态决定定时/计数器的运行控制取决于TRx 一个条件还是TRx和INTx(x=0,l)引脚状态两个条件。

    1. GATE=0, A点(见图6-4)电位恒为1,B点电位仅取决于TRx状态。TRx=1, B点为高电平,控制端控制电子开关闭合,允许T1 (或T0)对脉冲计数。TRx=0,B点为低电平,电子开关断开,禁止T1 (或T0)计数。
    2. GATE=1, B点电位由INTx(x=0,l)的输入电平和TRx的状态这两个条件来确定。当TRx=1,且INTx = 1时,B点才为1,控制端控制电子开关闭合,允许T1 (或TO)计数。故这种情况下计数器是否计数是由TRx和函肢两个条件来共同控制的。

    方式0的应用

    方式0与方式1基本相同,只是计数位数不同。方式0初值计算复杂,一般不用方式0,而用方式1。

    方式1及应用

    方式1的工作原理

    当Ml、M0=01时,定时/计数器工作于方式1,这时定时/计数器的等效电路逻辑结构如图6-5所示。

    方式1和方式0的差别仅仅在于计数器的位数不同,方式1为16位计数器,由THx高8位和TLx低8位构成(x=0,1),方式0则为13位计数器,有关控制状态位的含义(GATE、C/〒、TFx、TRx)与方式0相同。

    方式1的应用

    image-20200602000657977

    image-20200602000815036

    image-20200602001140986

    方式2及应用

    方式2的工作原理

    方式0和方式1的最大特点是计数溢出后,计数器为全0。因此在循环定时或循环计数应用时就存在用指令反复装入计数初值的问题。这不仅影响定时精度,也给程序设计带来麻烦。方式2就是针对此问题而设置的。

    当Ml、M0为10时,定时/计数器处于工作方式2,这时定时/计数器的等效逻辑结构如图6-7所示(以定时器T1为例,x=1) 。

    定时/计数器的方式2为自动恢复初值(初值自动装入)的8位定时/计数器。TLx (x=0,1)作为常数缓冲器,当TLx计数溢出时,在溢出标志TFx置“1"的同时,还自动将THx中的初值送至TLx,使TLx从初值开始重新计数。该方式可省去用户软件中重装初值的指令执行时间,简化定时初值的计算方法,可以相当准确地确定定时时间。

    方式2的应用

    方式2是一个可以自动重新装载初值的8位计数/定时器,可省去重装初值指令。当某个定时/计数器不使用时,可扩展一个负跳沿触发的外中断源。

    image-20200602001747267

    方式3及应用

    方式3的工作原理

    方式3是为了增加一个8位定时/计数器而设的,使MCS-51单片机具有3个定时/计数器方式3只适用于T0, T1不能工作在方式3。T1处于方式3时相当于TR1=0,停止计数(此时T1可用来作为串行口波特率产生器)。

    工作方式3下的T0

    TMOD的低2位为11时,T0的工作方式被选为方式3,各引脚与T0的逻辑关系如图6-9所示。

    定时/计数器T0分为两个独立的8位计数器TL0和TH0, TL0使用TO的状态控制位C/T、GATE、TR0、TF0,而TH0被固定为一个8位定时器(不能作为外部计数模式),并使用定时器T1的状态控制位TR1和TF1,同时占用定时器T1的中断请求源TF1。

    T0工作在方式3时T1的各种工作方式

    一般情况下,当T1用作串行口的波特率发生器时,T0才工作在方式3。T0处于工作方式3时,T1可定为方式0、方式1和方式2,用来作为串行口的波特率发生器,或不需要中断的场合。

    T1工作在方式0。T1的控制字中M1、M0 = 00时,T1工作在方式0,工作示意图如图6-10所示。

    T1工作在方式1。当T1的控制字中M1、M0 = 01时,T1工作在方式1,工作示意图如图6-11所示。

    T1工作在方式2。当T1的控制字中M1、M0 =10时,T1的工作方式为方式2,工作示意图如图6-12所示。

    T1设置在方式3。当T0设置在方式3,再把T1也设成方式3,此时T1停止计数。

    方式3的应用

    方式3下的T0和T1大不相同。T0工作在方式3, TL0和TH0被分成两个独立的8位定时/计数器。其中,TL0可作为8位的定时/计数器,而TH0只能作为8位的定时器。此时T1只能工作在方式0、1或2。

    一般情况下,当T1用作串行口波特率发生器时,T0才设置为方式3。此时,常把定时器T1设置为方式2,用作波特率发生器。

    image-20200602002820063

    image-20200602002844722

  • 相关阅读:
    matlab cell
    matlab linux 快捷键设置——有问题还是要解决
    latex 小结
    TOJ 1258 Very Simple Counting
    TOJ 2888 Pearls
    HDU 1248 寒冰王座
    TOJ 3486 Divisibility
    TOJ 3635 过山车
    TOJ 1840 Jack Straws
    HDU 4460 Friend Chains
  • 原文地址:https://www.cnblogs.com/lihello/p/12941822.html
Copyright © 2011-2022 走看看