首页 > 其他分享 >第5章 定时器/计数器

第5章 定时器/计数器

时间:2024-04-07 14:57:25浏览次数:26  
标签:定时器 方式 T1 计数 计数器 定时

第5章 定时器/计数器

定时/计数器的功能

MCS-51单片机内共有两个可编程的定时/计数器T0和T1。它们都是十六位加法计数器结构,分别由TH0、TL0和TH1、TL1四个8位计数器组成,每个定时/计数器都具有定时和计数两种功能。

  1. 计数功能
    对外来脉冲进行计数。计数脉冲的输入端来自单片机的两个信号引脚T0(P3.4)和T1(P3.5)外部输入的脉冲在负跳变时有效,计数脉冲的频率最高为振荡频率的1/24。

  2. 定时功能
    定时功能也是通过计数器的计数来实现的,不过这时的计数脉冲来自单片机的内部,即每个机器周期产生一个计数脉冲。因此,计数频率为振荡频率的1/12。这样,不但可以根据计数器的预置值计算出定时时间,也可以反过来按定时时间的要求,计算出计数器的预置值。

与定时/计数器有关的寄存器

  1. 定时器控制寄存器(TCON)
    该寄存器既参与中断控制又参与定时控制。其主要功能是:定时器在溢出时,设定标志位(TFx),并控制定时器的运行或停止等(TRx)。

    8F   8E   8D   8C   8B   8A   89   88
    TF1  TR1  TF0  TR0  IE1  IT1  IE0  IT0
    
  2. 定时器方式寄存器(TMOD)
    用于控制两个定时/计数器的工作方式,高4位定义T1,低4位定义T0,字节地址为89H。

    格式:

    GATE C/T  M1   M0   GATE C/T  M1   M0
      T1                   T0
    
    • GATE:门控位
      • GATE=0,以运行控制位TRx启动定时器
      • GATE=1,以外中断请求信号(INT1或INT0)启动定时器。
    • C/T:定时或计数方式选择位:
      • C/T=0,定时工作方式
      • C/T=1,计数工作方式。
    • M1M0:工作方式选择位:
      • M1M0=00,方式0:13位计数(TL0-4、TH0-7)
      • M1M0=01,方式1:16位计数
      • M1M0=10,方式2:8位计数,有自动装入功能。
      • M1M0=11,方式3:T0分为两个8位计数器,TL0允许作为定时或计数方式,TH0只能作为定时方式

定时/计数器工作方式

  1. 方式0

    • 方式0是13位结构的工作方式,其计数器由TH1的全8位和TL1的低5位构成。TL1的高3位弃之不用。
    • 计数方式:计数值的范围为:1~8192(2^13)
    • 定时方式:定时时间T的计算公式为:
      • T=(2^13-计数初值x)晶振周期/12
      • 或 T=(2^13-计数初值x)机器周期
    • 启动的条件是:(TRx=1) AND (GATE=0 OR INTx=1)

    方式0应用举例:
    设单片机晶振频率fosc=6MHz,使用定时器1以方式0产生周期为500us的方波,并由P1.0输出。以查询或中断方式完成。

    解:

    • 计算定时初值x
      欲产生500us的方波,只需在P1.0端以250us为周期交替输出高低电平即可实现。为此,定时时间应为250us。晶振为6MHz,则1个机器周期为2us。
      则: (2^13-x)*2uS=250uS, x=8067=1111110000011B
      即: TH1=0FCH,TL1=03H。
    • TMOD寄存器初始化
      定时器1,M1M0=00H(方式0),C/T=0(定时),GATE=0(以软件启动定时器),不用的位设定为0,最后得TMOD应初始化00H。
    • 用TCON寄存器的TR1位来启动(=1)或停止(=0)定时器。

    查询方式程序:

    MOV TMOD,#00H  ;T1工作在方式0
    SETB TR1       ;启动T1工作
    LOOP: MOV TL1,#03H
          MOV TH1,#0FCH    ;置定时初值
    WAIT: JNB TF1,WAIT     ;定时未到,循环等待
          CLR TF1          ;定时到,清TF1
          CPL P1.0         ;由P1.0输出,信号取反
          SJMP LOOP        ;循环输出方波
    

    中断方式程序:

    ORG  8000H
    MOV  TMOD,#00H ;T1工作在方式0 
    MOV  TL1,#03H
    MOV  TH1,#0FCH    ;置定时初值
    SETB EA           ;开中断
    SETB ET1          ;允许T1中断
    LOOP: SETB TR1    ;启动T1工作
    WAIT: SJMP WAIT   ;等待中断
          AJMP LOOP
    ORG  001BH        ;T1中断入口
    LJMP SUB          ;跳至中断服务程序SUB
    ORG  8100H        ;中断服务程序
    SUB: CPL P1.0     ;输出信号取反
         MOV TL1,#03H
         MOV TH1,#0FCH ;重置定时初值
         RETI          ;中断返回
    
  2. 方式1
    其逻辑电路和工作情况与方式0完全相同。所不同的只是组成计数器的位数为16位。

    7    0    7    0
    TL1       TH1      TF1
    
    • 计数值的范围为: 1~65536(2^16)
    • 定时时间的计算公式与方式0类似。即:
      • T=(2^16-计数初值x)晶振周期/12
      • 或 T=(2^16-计数初值x)机器周期
  3. 方式2

    • 方式2具有自动重新加载功能,即自动加载计数初值。该方式把16位计数器分为两部分,既以TL1作计数器,以TH1作预置计数器,初始化时把计数初值分别装入TL1和TH1中。
    • 当计数溢出后,由预置寄存器TH1,以硬件方法自动给计数器TL1重新加载。
    • 最大计数值只能到255。这种工作方式非常适用于循环定时或循环计数应用。

    方式2应用举例:
    设单片机晶振频率fosc=6MHz,使用T0以方式2产生周期为200us的方波,并由P1.0输出。以查询或中断方式完成。

    解:

    • 计算计数初值x
      晶振为6MHz,则1个机器周期为2us。则:
      (2^8-x)*2=100,x=206=CEH
      即 TH0=0CEH,TL0=0CEH。
    • TMOD寄存器初始化
      定时器0,M1M0=10H(方式2),C/T=0(定时), GATE=0(以软件启动定时器),不用的位设定为0,最后得TMOD应初始化为02H。
    • 用TCON寄存器的TR0位来启动(=1)或停止(=0)定时器。

    查询方式程序:

    MOV TMOD,#02H ;T0工作在方式2
    MOV TL0,#0CEH 
    MOV TH0,#0CEH ;置定时初值
    SETB TR0      ;启动T0工作
    WAIT: JNB TF0,WAIT  ;定时未到, 循环等待
          CLR TF0       ;定时到,清TF0
          CPL P1.0      ;由P1.0输出,信号取反
          SJMP WAIT     ;循环输出方波
    

    中断方式程序:

    MOV TMOD,#02H ;T0工作在方式2
    MOV TL0,#0CEH
    MOV TH0,#0CEH   ;置计数初值
    SETB EA         ; 开中断
    SETB ET0        ; 允许T0中断
    LOOP: SETB TR0  ;启动T0工作
    WAIT: SJMP $    ;等待中断
          CLR TF0   ;计数溢出标志位TF0清0
          AJMP LOOP
    ORG  000BH      ;中断服务程序
         CPL P1.0   ;由P1.0输出,信号取反
         RETI       ;中断返回
    
  4. 方式3

    • 在工作方式3下,T0被拆成两个独立的8位计数器。其中TL0既可以作计数器使用,又可以作定时器使用,其功能和操作方式与方式0或方式1完全相同。而TH0只能作8位定时器使用,并占用了T1的中断资源TR1和TF1。
    • 如果T0已工作在方式3下,则T1只能工作在方式0-2下,用于任何不需要中断控制的场合,或用作串行口的波特率发生器。通常只有当T1用作串行口的波特率发生器时,T0才被定义为方式3,以增加一个8位计数器。这时,只要设置好工作方式,T1便可自动运行。如要停止工作,只需送入一个把它设为方式3的控制字即可这时T1直接把溢出标志TF1送给串行口。

练习题

编程实现利用定时器T1产生一个50Hz的方波,由P1.3输出,设晶体振荡器频率为12MHz。

标签:定时器,方式,T1,计数,计数器,定时
From: https://www.cnblogs.com/jacx93/p/18119030

相关文章

  • MC14516BDR2G倒数计数器芯片中文资料PDF数据手册参数引脚图图片特性概述
    产品概述:MC14516B同步正数/倒数二进制计数器在一个单片结构中使用MOSP沟道和N沟道增强模式器件构造。此计数器可通过对预设输入(P0、P1、P2、P3)应用所需的二进制值,然后将预设启用(PE)置于高电平,来进行预设。计数方向通过向UP/DOWN输入应用高电平(用于正数)或低电平(用于......
  • MC14516BDR2G倒数计数器芯片中文资料PDF数据手册参数引脚图图片特性概述
    产品概述:MC14516B同步正数/倒数二进制计数器在一个单片结构中使用MOSP沟道和N沟道增强模式器件构造。此计数器可通过对预设输入(P0、P1、P2、P3)应用所需的二进制值,然后将预设启用(PE)置于高电平,来进行预设。计数方向通过向UP/DOWN输入应用高电平(用于正数)或低电平(用于......
  • (3)计数器&时序逻辑
    设计思路: 设计代码:RTL:moduleled_flash(clk,rst_n,led);inputclk,rst_n;outputregled=0;parametermax=24999999;//(计数的最大值)reg[24:0]cnt=0;always@(posedgeclkornegedgerst_n)if(!rst_n)cnt<=0......
  • C++ //练习 11.4 扩展你的程序,忽略大小写和标点。例如,“example.“、“exmaple,“和”
    C++Primer(第5版)练习11.4练习11.4扩展你的程序,忽略大小写和标点。例如,“example.”、"exmaple,"和”Example"应该递增相同的计数器。环境:LinuxUbuntu(云服务器)工具:vim 代码块/************************************************************************* >Fil......
  • C++ 计数器小全
    1.简介  这篇文章介绍了C++的计数器们,包括:cnt(累加计数器),sum(求和计数器),mul(累乘计数器),last(上一项记录器),flag(状态计数器)  下文中,我就会详细说这6种计数器2.详解(正文)        2-1.cnt详解        cnt的中文名是累加......
  • 计数器的原理和应用
    一、计数器的原理和应用 要求:每计数三次,数码管值加一#include<reg51.h>unsignedchars[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};unsignedcharnum=0;voidinitcounter(){ TMOD=0x06;//00000110 TH0=256-3; TL0=256-3; ET0=1; EA=1; TR0=1;}......
  • Xilinx ZYNQ 7000+Vivado2015.2系列(十五)AXI Timer 用户定时器中断控制LED
    前面的中断学习中我们学了按键,GPIO,Timer,是时候把它们整合到一起了。今天我们混合使用PS/PL部分的资源,建立一个比较大的系统。板子:zc702。实现功能如下:1.通过串口打印信息询问你要按SW5还是SW7;2.当正确的按键被按下,定时器启动,关闭ledDS23;3.当定时器溢出后触发中断,开启DS23,......
  • Xilinx ZYNQ 7000+Vivado2015.2系列(十三)私有定时器中断
    私有定时器属于PS部分,定时器可以帮我们计数、计时,有效的控制模块的时序。这一次实验我们认识定时器并使用定时器产生中断。CPU的私有中断(PPI)CPU的私有中断(PPI),5个:全局定时器,私有看门狗定时器,私有定时器以及来自PL的FIQ/IRQ。它们的触发类型都是固定不变的,并且来自P......
  • 如何用Python制作具备音效的定时器
        很多时候都需要应用到定时器,特别是参加各种比赛的时候,记录每个队员使用的时间,如何用python制作定时器,且看以下代码,主要分四个小案例,分别是页面版本的无音效定时器、应用程序版本的无音效定时器、页面版本的有音效定时器和应用程序版本的有音效定时器。(有音效的意思......
  • 19. 通用定时器
    一、通用定时器简介  STM32F407有10个通用定时器(TIM2~TIM5和TIM9~TIM14)。这些定时器彼此完全独立,不共享任何资源。其主要特性如下:16位递增、递减、中心对齐计数器(计数值:0~65535),16位可编程预分频器(预分频系数:1~65536),用于对计数器时钟频率进行分频,还可以触发DAC......