zoukankan      html  css  js  c++  java
  • 定时计数-总述

    上一节,稀里糊涂地照着demo测试了定时计数的效果,但对内部和参数的控制还是不解,准备从基础原理学习定时计数器的工作原理和方式。

    8051单片机的结构是由一内部总线连接各功能模块,通过特殊功能寄存器(SFR)集中控制,不同型号引脚定义和SFR定义不同,因此一个功能模块,可以从相关引脚功能和相关SFR功能学习了解该模块。

    以8051为例,其定时计数模块的特点有
    2个16位定时计数器,最大计数范围:0H-FFFFH;
    相关的SFR:TMOD、TCON、TH0、TL0、TH1、TL1;
    相关引脚:T0、T1、INT0、INT1;
    4种工作方式;

    其中,T0、T1做为计数脉冲输入,定时方式时不用,作I/O用,对应P3.4和P3.5;
    INT0、INT1:与定时器运行控制有关,也可以无关,可编程设定;


    模式寄存器TMOD(SFR的地址:89H,不可按位寻址)


    GATE选通门:GATE=0时,只要TRx=1,计数器就开始工作;GATE=1时,只有INTx脚和TRx同时为1时,计数器才开始工作,主要用于测量INTx脚上高电平脉冲的宽度。
    C/T(计数/定时方式选择位):C/T=1时,计数方式,即计数器的计数脉冲来自T0或T1引脚的外部事件,C/T=0时:定时方式,计数脉冲来自内部振荡频率12分频(1/12)。
    M1、M0模式选择:分别对应四种模式
    M1MO=00,方式0:13位定时计数器;
    M1M0=01,方式1:16位定时计数器;
    M1M0=10,方式2:自动重装入的8位定时计数器;
    M1M0=11,方式3:T0成为两个独立的8位计数器;
    模式 计数模 最大计数值 最大定时时间
    模式0 2^13 8192 8.192ms
    模式1 2^16 65536 65.536ms
    模式2,3 2^8 256 0.256ms
    根据上面的参数,可以得到一个公式
    定时时间=(最大计数值 - 计数初始值) * 脉冲周期


    控制寄存器TCON(SFR地址:88H)


    TF1,TF0定时器T1,T0的溢出标志:计数器溢出时硬件自动置位,即TFx=1,进入中断后再由硬件自动清除;
    TR1,TR0计数器T1,T0的控制位:由软件置位(计数器开始工作)或清零(计数器停止工作);
    IE1,IE0外部中断INT1,INT0的请求标志:当单片机检测到INTx引脚上有低电平或下降沿时,IEx=1,申请中断;
    IT1,IT0外部中断触发类型控制:ITx=1时,外部中断信号的下降沿触发IEx标志,ITx=0时,外部中断信号的低电平触发IEx标志;


    回到定时计数功能上,要搞清以下问题

    1.何时控制启动、停止计数;
    2.如何控制定时还是计数;
    3.如何控制定时/计数的长短;
    4.如何用查询或者中断管理溢出事件;


    定时/计数器运行控制方式
    1.设置GATE=0,则非GATE=1,因此Y=TR0,这样:
    TR0=1,启动定时器T0运行
    TR0=0,停止定时器T0运行
    我们把这种控制定时器运行的方法叫软触发,最常用。
    2.设置GATE=1,则非GATE=0,因此Y=TR0*(非)INT0电平,进上步令TR0=1,则Y=非INT0电平,这样:
    非INT0为高电平,启动定时器T0运行
    非INT0为低电平,停止定时器T0运行
    我们把这种控制定时器运行的方法叫硬触发,较少用,可以用来测量正脉冲的宽度。


    定时器/计数器的初始化方式
    1.根据要求给模式寄存器TMOD送一个模式控制字设定定时器的工作方式;(要考虑定时/计数范围/重装方式)
    2.根据需要给C/T送初值以确定需要的定时时间或计数次数;(默认为0)
    3.根据需要给中断允许寄存器IE送中断控制字,以开放相应的中断和设定中断优先级;(可选)
    4.给TCON送命令字以启动或禁止C/T的运行


    单片机控制C/T的方式
    1.采用查询方式:程序一直检测TF0(或TF1),若TF0=1(或TF1=1),说明定时时间到或计数满,从而开始相应处理,如
    while(TF0==0); //或while(!TF0)
    TF0=0;            //清除标志位
    ......                //开始处理溢出事件
    2.采用中断方式:程序初始化时,设置定时器溢出中断允许后,内部硬件自动检测到TF0=1(或TF1=1)时,自动响应中断,进入中断服务程序。

    下面通过几个例子,来验证一下上面的知识点。

  • 相关阅读:
    Kafka Shell基本命令(包括topic的增删改查)
    thefuck的安装和使用
    Linux运维利器之ClusterShell
    MySQL数据库的10大经典错误案例
    Mysql 常用操作
    Git 忽略特定文件或文件夹
    为什么需要拷贝构造函数
    C语言编译过程
    设计模式之建造者模式
    设计模式之工厂/抽象工厂模式
  • 原文地址:https://www.cnblogs.com/coloregg/p/3601823.html
Copyright © 2011-2022 走看看