单片机_第6章 单片机的定时/计数器

建议配合本专栏的文章“单片机_第6章 实验”一起使用

目录

6.1 定时/计数器的结构与工作原理

定时/计数的三种方式(不重要)

6.1.1 定时/计数器的基本原理

6.1.2 定时/计数器的结构

6.2 定时器的控制

6.2.1 TMOD寄存器

6.2.2 TCON寄存器

6.3 定时/计数器的工作方式

工作方式​

6.3.1 方式1

6.3.2 方式2

6.3.3 方式0

6.3.4 方式3(仅T0有此方式)

6.4 定时/计数器的编程和应用

本章小结


6.1 定时/计数器的结构与工作原理

    定时/计数的三种方式(不重要)

        纯软件定时/计数方法
            定时——空循环预定周次,等待预定时间
            计数——读取I/O口电平,统计变化次数
            表示(左边的图是通过delay函数来实现软件定时/计数的,右边的图示通过main函数里面的if语句来进行定时/计数的。)
            3d0fdf44853146e3925934c5c3439faa.png
            基本思路:由CPU统计状态变化次数,待预定结果出现后结束统计。
            存在问题:占用过多CPU机时(因此时间不能很长,且在做这个的时候,CPU不能做其他的事情,也十分消耗CPU)

        纯硬件定时方法(没有计数)
            利用CD4060芯片,定时时长可以达到2.1~6小时,通过改变外面的电阻来改变定时的时间
5e37c7d294cd4ae18a925564442974a0.png
            AD8445B
5d8b737c2e13443fbbd4912c27ad7a0e.png
            XLT437定时器芯片
4e7de459660e4aff9044ba82b2482ec1.png

        单片机软硬件联合定时/计数方法
            图示
ababef15a8624692a2de2f850280c12d.png
定时/计数器的基本原理

            定时器的本质是计数器(对时钟脉冲计数),计数器则是对外来脉冲计数。
            通过上图,可以看出定时器是反应内部系统时钟脉冲,而计数器是反应外部信号脉冲的。

        几种定时方法比较
            (1)软件定时:时间精确,且不需要外加硬件电路;占用CPU开销,因此软件定时的时间不宜太长。 
            (2)硬件定时:定时功能全部由硬件电路完成,不占CPU时间,但需通过改变电路的元件参数来调节定时时间,在使用上不够灵活方便。
            (3)可编程定时器定时:通过对系统时钟脉冲的计数来实现的。计数值通过程序设定,改变计数值,也就改变了定时时间,使用起来既灵活有方便。


    6.1.1 定时/计数器的基本原理

        逻辑开关闭合后,脉冲信号将对加1计数器充值。
        若计数器的容量为2^n(n为整数),则当数值达到满计数值后将产生溢出,使中断请求标志TFx进位为1,同时加1计数器清零;如果在启动计数之前将TFx清零,并将一个称为计数初值a的整数先置入加1计数器,则当观察到TFx为1时表明已经加入了(2^n-a)个脉冲,如此便能计算出脉冲的到达数量了。
        定时器和计数器的实质都是计数器,差别仅在于脉冲信号的来源不同(定时器是反应内部系统时钟脉冲,而计数器是反应外部信号脉冲的)。

        基本工作原理
                (12分频 = 1个机器周期→1个计数脉冲) 
b91a6cb01b9244b19a3faa90c0e34b9c.png

3aeac9b56b964352ac5e17bfb26fd657.png

         计数器溢出空间 = 计数器最大空间 - 计数初值
88a7a1b2a3674f43960dc4f1b390e5d1.png

        定时时间计算(tnafosc三个因素有关)
                定时时间 t = (计数器最大空间 - 计数初值)×机器周期=(2^n-a)×12/fosc  (us)

        计数计算(Nna两个因素有关)
                定时计数值 N = (计数器最大空间 - 计数初值)  =  (2^n – a ) 

    6.1.2 定时/计数器的结构

        51单片机定时/计数器的结构
ba26f367fe664fcda608d160848155ef.png

        引脚
43ca087e94d64644a9b1126a5ea4bebe.png

        2个16位计数器T0 (TH0<字节地址8CH>、TL0<字节地址8AH>)T1 (TH1<字节地址8DH>、TL1<字节地址8BH>)——加1计数器
        2个8位控制寄存器TCONTMOD——管理、控制定时/计数器的运行
        2个外部引脚T0(P3.4)T1(P3.5)——接入外部脉冲


6.2 定时器的控制

    定时/计数器的控制关系(以T1为例)
4a16e040fbba4441a7326db55706696c.png

    6.2.1 TMOD寄存器

        介绍
        TMOD是定时方式控制寄存器(Timer/Counter Mode Control),字节地址为89H不能位寻址),其定义格式如图。

TMOD的低4位为T0的方式字,高4位为T1的方式字。
TMOD不能位寻址,必须整体赋值
M1和M0:工作方式选择位
        两位可形成4种编码,对应4中工作方式(可以见下图)
C/T:定时和外部事件计数方式选择位*(C<counter,计数器>是高电平有效,T<timer,定时器>(上面有个横杠,电脑上打不出来)是低电平有效)
        0定时器方式。定时器以振荡器输出时钟脉冲的12分频信号(即机器周期)作为计数信号。定时器从初值开始在每个机器周期内自动加1,直至溢出。
        1外部事件计数器方式,以外部引脚的输入脉冲作为计数信号。计数器在外部脉冲信号的负跳变时使计数器加1,直至溢出。
GATE:门控位(具体介绍下面有)
        0:定时器计数不受外部引脚输入电平的控制,只受定时器运行控制器(TR0、TR1)控制
        1:定时器的计数受定时器运行控制位(TR0、TR1)和外部引脚输入电平(INT0、INT1)的控制。其中TR0和INT0控制T0的运行,TR1和INT1控制T1的运行。
        故通常令GATE=0,且无论GATE取何值时,都与TRx有关。

        结构图与方式选择位

        门控位的介绍
        GATE为0时,T1的技术仅由TR1控制,TR1为1时允许T1技术,TR1为0时禁止T1计数;GATE为1时,仅当TR1为1且INT1输入为高电平时才允许T1技术,TR1为0或INT1输入低电平都将禁止T1计数。

        工作方式T04种工作方式,T13种工作方式,每种工作方式都有定时和计数2种方式,故共有14种组合关系。(因为T0的方式3借用了T1)

 

举例
例1:设置T0为定时方式1,允许TR0启动,T1为计数方式0,允许INT1启动,则   TMOD = 1100 0001B =0xc1

解析:根据TMOD的每一位的含义,有:
 T0为定时方式1:D2=0,M1M0=01

 T0允许TR0启动:D3=0

 T1为计数方式0:D6=1,M1M0=00

 T1允许INT1启动:D7=1
因此,TMOD为1100 0001,即TMOD=0xC1。

(注意TMOD只能以字节的形式给出,它不可以位寻址)

例2:系统上电默认值为TMOD = 0,则默认状态应为:T0和TI均为定时方式0,允许TR0、TR1启动。

    6.2.2 TCON寄存器

        部分可见“5.2.2 中断系统”里面的“TCON寄存器

        介绍
        TCON为定时/计数寄存器(Timer/Counter Control Register),字节地址为88H,可位寻址。
        TCON的定义结构图

        位7(TF1):定时器T1溢出标志位
                T1溢出时,硬件自动使TF1置1,并向CPU申请中断。当进入中断服务程序时,硬件自动将TF1清0。TF1也可以用软件清0。
        位6(TR1):定时器T1运行控制位
                由软件置位和清0
                GATE为0时,T1的技术仅由TR1控制,TR1为1时允许T1技术,TR1为0时禁止T1计数;GATE为1时,仅当TR1为1且INT1输入为高电平时才允许T1技术,TR1为0或INT1输入低电平都将禁止T1计数。
        位5(TF0):定时器T0溢出标志位。其功能和操作情况同位7
        位4(TR0):定时器T0运行控制位。其功能和操作情况同位6
        位3~0:外部中断INT1和INT0请求及请求方式控制位,其功能见第5章

        注意:系统上电默认值为TCON = 0,则默认状态应为:TR0和TR1均为关闭状态、电平触发方式、没有0# ~3#中断请求


6.3 定时/计数器的工作方式

    工作方式

     6.3.1 方式1

        原理
            使用16位定时/计数器(n=16,THx+TLx),满计数值为2^16M1 M001组合时)
            逻辑结构图

            定时器工作(定时时间、计数初值、最大定时时间、定时范围)
                定时时间t = (2^16- a)×12/fosc  (μs)
                计数初值:a = 2^16- t×fosc/12
                最大定时时间(a=0,fosc =12MHz):t = 2^16(μs) = 65536 (μs)
                定时范围为1~65,536 μs(≈65ms)。 

            计数器工作(定时计数值、最大计数值、最高计数频率)
                定数计数值:  N =   (2^16 – a ) 
                最大计数值:N = 65536 (脉冲)

           由于检测一个负跳变需要2个机器周期,即24个振荡周期→最高计数频率=1/24*fosc。
                当fosc=12MHz时,外部脉冲的最大允许频率为0.5MHz 。

实例1 设单片机的fosc=12MHz,采用T1定时方式1在P2.0脚上输出周期为2ms的方波。

            方法一:查询方式
            方法二:中断方式

                (具体的例题解析将单独发送)

         小结
                (1)设置TMOD——确定定时/计数器的工作状态
                        使用T0还是T1?
                        采用定时模式还是计数模式?
                        采用工作方式0、方式1、方式2、方式3?
                        强调TMOD的设置只能以字节形式给出
                (2)计算计数初值——产生期望的定时/定数间隔
                        定时计数初值 a = 2^16- t×fosc/12
                          (t ≤65536μs, fosc=12MHz时)
                        定数计数初值 a = 2^16- N  
                          (N≤65536, 脉冲频率≤0.5MHz,fosc=12MHz时)
                        装载计数初值:
                             THx =  a  / 256         TLx =  a  / % 256 
                (3)确定采用何种方式处理溢出结果
                        若是中断方式→中断初始化设置和中断服务程序:

                        若是查询方式——采用条件判断语句

                (4)启动定时器:TR0 = 1 或 TR1= 1
                (5)进行定时或计数结束后的其它工作
                (6)为下次定时/计数做准备(清TFx标志+重装载计数初值)
                    若是中断方式,则无需软件清TFx标志位;
                    若是查询方式,需要软件清除TFx标志位。

计数实例 用单片机实现一个频率计功能,用于测量接在P3.4引脚的脉冲波频率(<10KHz),并将测量结果显示在数码管上。

     6.3.2 方式2

        图示

        采用8位计数器,TLx
        可自动重装载计数初值(TLx溢出后, THx→TLx);
        没有装载计数初值的延误(方式1在重设计数初值时会产生实际定时时间延误),方式2定时精度相对较高,适合作为串行口波特率发生器
        延时时间 t = (2^8-a)×12/fosc  (微秒) → 12MHz时的最大定时量为256μs。 

实例2 采用T0定时方式2P2.0口输出周期为0.5ms的方波(fosc=12MHz)

    6.3.3 方式0

        使用13位的定时/计数器(THx7-0+TLx4-0)

        定时时间 t = (2^13 - a)×12/fosc (μs)
        计数初值 a = 2^13 - t×fosc/12
        12MHz时的最大定时量t=2^13μs = 8192μs = 8.192ms

例题  计算T0方式0定时5ms的计数初值afosc=12MHz

解:计数初值a=2^13-5000×12/12=3192= 1100 0111 1000B

由于方式0TL03位未用(一般填0) ,因此        a= 0110 0011 0001 1000 = 6318H

 即,TH0 = 0x63;    TL0 = 0x18。

        比较方式0和方式1

            除计数器位数不同外,方式0与方式1的逻辑结构并无差异。
            方式0采用13位计数器是为了与早期产品MCS-48单片机兼容。
            方式0的初值计算比较麻烦,一般采用方式1替代。

    6.3.4 方式3(仅T0有此方式)


            通常设定T1定时方式2为串行通信的波特率发生器(如下图)

        TH0+TF1+TR1组成的8位定时器(不能计数,且方式2但无重装载功能)
        TL0+TF0+TR0组成的8位定时/计数器(方式2但无重装载功能)
        T1组成的无中断标志位的定时/计数器(方式0~方式2)
        特点
        方式3下T0可有2个具有查询/中断功能的8位定时器;外加1个没有查询/中断功能的T1定时/计数器
​​​​​​​        T0用作工作方式3时,TT1仍可设置为工作方式0~2(此时没有查询/中断功能)
        通常将T1定时方式2作为波特率发生器使用

6.4 定时/计数器的编程和应用

    使用方法
        定时器应用——用于定时控制,或作为分频器发生各种不同频率的方波;
        计数器应用——用于外部脉冲统计或外部中断源扩充;
        定时/计数器复合应用—将定时与计数两种方式结合起来。

实例5(波形展宽)  P3.4口输入一个低频窄脉冲信号。当该信号出现负跳变时,由P3.0口输出宽度为500μs的同步脉冲,如此往复。要求据此设计一个波形展宽程序(fosc= 6MHz)。

实例6(长延时、非对称)  采用10MHz晶振,在P2.0脚上输出周期为2.5s,高电平占空比为20%的脉冲信号。

本章小结

1.定时/计数器的工作原理是:利用加1计数器对时钟脉冲或外来脉冲进行自动计数。当计满溢出时,可引起中断标志(TFx)硬件置1,据此表示定时时间到或计数次数到。定时器本质上是计数器,前者是对时钟脉冲进行计数,后者则是对外来脉冲进行计数。
2.   51单片机包括两个16位定时器T0(TH0、TL0)和T1(TH1、TL1),还包括两个控制寄存器TCON和TMOD。通过TMOD控制字可以设置定时与计数两种模式,设置方式0~方式3四种工作方式;通过 TCON控制字可以管理计数器的启动与停止。
3.方式0~方式2分别使用13位、16位、8位工作计数器,方式3具有3种定时/计数器状态。
4.定时/计数器主要编程步骤:
    ①确定定时/计数器的工作状态,设定TMOD;
    ②确定计数初值,a= 2^n-t*fosc/ 12,装载计数初值;
    ③编程方法要点:
        中断方式:中断初始化,启动定时器,中断函数,TFx清零,重装载计数初值。
        查询方式:启动定时器,TFx判断,TFx清零,重装载计数初值。


 

猜你喜欢

转载自blog.csdn.net/qq_59467552/article/details/124785904