zoukankan      html  css  js  c++  java
  • 定时器和计数器

    几个概念

    时钟周期:单片机时许中的最小单位,具体计算的方法就是时钟源分之一。时钟源可以理解为晶振,如晶振是12M,时钟周期(1/12M )S。

    机器周期:单片机完成一个操作的最短时间。主要针对汇编,每条指令执行时间固定,C语言不固定,知道级别就行(是微妙还是毫秒)。51标准架构1机器周期=12个时钟周期。

    定时器:打开定时器后,定时器”存储计时器“的值经过一个机器周期自动加1,也就是说机器周期是定时器的计数周期

    标准51有两个定时器,定时0和定时器1(用法一样):

    定时器存储寄存器
    名称 描述 SFR地址 复位值
    TH0 定时器 0x8C 0x00
    TL0 定时器 0x8A 0x00
    TH1 定时器 0x8D 0x00
    TL1 定时器 0x8B 0x00

    后边标0就是定时器0,带1就是定时器1.

    比如TH0和TL0都是定时器0.

    H高8位,L低8位。开始TL0为0,当TL0为255后,再加一,TL0变为0,TH0变为1。

    TCON:定时器控制寄存器的位分配(地址0x88,可位寻址)

    7 6 5 4 3 2 1 0
    符号 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
    复位值 0 0 0 0 0 0 0 0
    TCON定时器控制寄存器的位描述
    符号 描述
    7 TF1 定时器1溢出标志。一旦定时器1发生溢出时硬件置1。两种清零方式:1、软件清零;2、进入定时器中断时硬件清零。
    6 TR1 定时器1运行控制位。软件置零/清零来进行启动/停止定时器。
    5 TF0 同定时器1
    4 TR0
    3 IE1   外部中断部分,与定时器无关
    2 IT1  
    1 IE0  
    0 IT0  

     说明:硬件置1,自动;软件清0,即手动,用代码。

    运行控制:为0,计时器不再计数,相当于我们的秒表暂停。

    TMOD:打开关闭定时器

    TMOD定时器模式寄存器的位分配(地址0x89,不可位寻址)
    7 6 5 4 3 2 1 0
    符号 GATE(T1) C/T(T1) M1(T1) M0(T1) GATE(T0) C/T(T0) M1(T0) M0(T0)
    复位值 0 0 0 0 0 0 0 0
    TMOD定时器模式寄存器的位描述
    符号 描述
    T1/T0 标T1的表示控制定时器1的位,标T0的表示控制器0的位
    GAME 该位被置1时为门控位。仅当'INT0'脚为高并且TR0控制位被置1时能使定时器0定时器开始计时,当该位被清0时,只要TR0位被置1,定时器0就使能开始计时,不受到单片机引脚INT0外部信号干扰,常用来测量外部信号脉冲宽度。这是定时器一个额外功能。
    C/T 定时器或计数器选择位。该位被清零时用作定时器功能(内部系统时钟),被置1时用作计数器功能。
    TMOD定时器模式寄存器M1/M0工作模式
    M1 M0 工作模式 描述
    0 0 0 兼容8048单片机的13位定时器,THn的8位和TLn的5位组成一个13位定时器。
    0 1 1 THn和TLn组成一个16位的定时器
    1 0 2 8位自动重装模式,定时器溢出THn重装到TLn中
    1 1 3 禁用定时器1,定时器0变成2个8位定时器

    这两位重要,决定了定时器的工作模式。工作模式1,2比较重要,模式0基本不应用了。

    工作模式2:

    假如现在使用定时器0:
    令
    TH0=0x55;
    TL0=0x00;
    TR0=1;
    当TL0计数到0xff,继续计数将溢出,此时首先不会产出溢出,正常情况TL0应该变成0x00;
    但是在工作模式2,自动重装模式将使TH0自动将自己的值给TL0,即此时TL0的值不是0x00,而是0x55。

     模式1示意图

     注解:

    • 下边部分控制上边部分
    • osc时钟源,d分频值,一般位12
    • 接Tn脚为计数器
    • 详细说明如下图

     其他模式可以看手册自己分析

    定时器使用方法:

    1. 设置工作模式(设置特殊功能寄存器TMOD)
    2. 设置计数寄存器处置
    3. 设置TCON,通过TR0置1使计时器开始计数
    4. 判断TCON寄存器TF0位,检测定时器溢出情况
  • 相关阅读:
    python操作redis
    Redis 安装试用
    python操作RabbitMQ
    pycharm快捷键
    各种python使用的坑
    RabbitMQ安装和使用
    Moosefs基本概念
    mesos客户端重新注册导致容器状态为staged
    初学Android 二 创建项目以及目录结构
    【杭电】[5631]Rikka with Graph
  • 原文地址:https://www.cnblogs.com/hgyzm/p/14341408.html
Copyright © 2011-2022 走看看