• 单片机成长之路(51基础篇)


    一.定时器的结构

      定时器功能由TO和T1,以及他们的工作方式寄存器TMOD和控制寄存器TCON等组成。内部通过总线与CPU相连。定时器T0和T1各由2个8位特殊功能寄存器TH0,TL0与TH1,TL1构成。工作方式寄存器TMOD用于设置定时器的工作模式和工作方式。控制寄存器TCON用于启动和停止定时器的计数,并控制定时器的状态。定时器的工作方式、启动、停止、溢出标志、计数器等都是可编程的,通过设置寄存器TMOD,TCON,TH0,TL0,TH1和TL1实现。TH0和TL0存放定时器T0的初值或计数结果。TH0存放高8位,TL0存放低8位;TH1和TL1存放定时器T1的初值或计数结果。TH1存放高8位,TL1存放低8位。

    二. MCS-51单片机控制字详解–TMOD T2MOD

      1.工作方式寄存器TMOD

      TMOD(89H)格式如图:

    位序
    B7
    B6
    B5
    B4
    B3
    B2
    B1
    B0
    位符号
    GATE
    C/T
    M1
    M0
    GATE
    C/T
    M1
    M0

        (1)GATE为门控位。

          GATE=0时,定时器的启动不受到外部中断请求信号的影响。一般情况下GATE=0。

          GATE=1时,T0的启动受INT0端口(P3.2引脚)信号控制,T1的启动受T1端口(P3.3引脚)信号控制,只有当外部中断信号NT0和NT1为高电平的时,才能启动定时器。

        (2)M1,MO为工作方式选择位。
        (3)C/T为计数器模式和定时器模式选择位。

          C/T=0时(内部时钟计数器),定时器模式。
          C/T=1时(外部电平计数器),计数器模式。

      2.特殊功能寄存器TCON

      TCON格式

    位地址

    8F

    8E

    8D

    8C

    8B

    8A

    89

    88

    位符号

    TF1

    TR1

    TF0

    TR0

    IE1

    IT1

    IE0

    IT0

    低4位中断有关,高4位的功能如下:
    (1)TF1,TF0为计数溢出标志位。
      定时器T0或T1计数溢出时,由硬件自动将此位置1。
      TFx可以由程序查询,也是定时中断的请求源。
    (2)TR1,TR0为计数运行控制位。
      TRx=1时,启动定时器/计数器工作。
      TRx=0时,停止定时器/计数器工作。
    定时器工作方式
      MCS-51的定时器T0有4种工作方式,即方式0、方式1、方式2、方式3。
      MCS-51的定时器T1有3种工作方式,即方式0、方式1、方式2。
    1.方式0
      在这种方式下,16位寄存器TH1和TL1只用13位,由TH1的8位和TL1的低5位组成。TL1的高3位不定。
    方式0定时时间为

    213-初值)×振荡周期×12

    例如,若晶振频率为12MHz,则最长的定时时间为(28-0)×(1/12)×12us=8.191msA
    2.方式1
      在这种方式下,16位寄存器TH1和TL1为16位的计数器,除位数外,其他与方式0相同。
    方式1定时时间为

    216-初值)×振荡周期×12

    例如,若晶振频率为12MHz,则最长的定时时间为
    (26-0)×(1/12)×12uS=65.536ms
    3.方式2
      THx作为常数缓冲器,当TLx计数溢出时,在置1溢出标志TFx的同时,还自动的将THx中的初值送至TLx,使TLX从初值开始重新计数。
    方式2定时时间为

    28-初值)×振荡周期×12

    例如,若晶振频率为12MHz,则最长的定时时间为
    (22-0)×(1/12)×121S=0.256ms
    4.方式3
      T0在方式3时被拆成2个独立的8位计数器,即TH0和TL0。
      当T0处于方式3时,T1仍可设置为方式0、方式1和方式2。由于TR1,TF1和T1的中断源都已被定时器TO占用,所以定时器T1仅有控制位C/T来决定其工作在定时方式或计数方式。当计数器计满溢出时,不能置位TF1,而只能将输出送往串口。所以,此时定时器T1一般用作串口的波特率发生器,或不需要中断的场合。
    定时器编程步骤
    MCS-51单片机的定时器/计数器是可编程的,具体步骤如下。
      (1)对TMOD赋值,以确定定时器的工作模式。

        计算初值的方法如下。
        设计数器的最大值为M,则置入的初值X为:计数方式X=M一计数值
        定时方式由(M-X)T=定时值,得X=M-定时值/T
        T为计数周期,是单片机的机器周期。
        方式1时,M=216=65536。方式2和3时,M=20=256。
        例如:机器时钟频率为12MHz,机器周期为1us时。
        若工作在方式0,则最大定时值为23×1us=8.192ms。
        若工作在方式1,则最大定时值为216×1us=65.536ms。
      (2)置定时/计数器初值,直接将初值写入寄存器的THO,TLO或TH1,TL1。
      (3)对TCON寄存器中的TRO或TR1置位,启动定时/计数器,置位以后,计数器即按规定的工作模式和初值进行计数或开始定时。
      (4)查询溢出标志TFx的状态,决定是否停止定时/计数器。

  • 相关阅读:
    Android 横屏启动activity,点击屏幕的单击、双击
    实现Android简单动画旋转案例
    当时遇到的主要难点在于TextView的内容不会刷新改变值,今天终于通过Timer和Handler实现了,分享给大家
    如何在Android当中显示网络图片
    Android的MediaRecorder架构介绍
    理解Android系统的进程间通信原理RPC机制
    Android开发WeatherForecast程序
    Android 如何导入已有的外部数据库
    百度地图API 源码
    Android TelephonyManager类
  • 原文地址:https://www.cnblogs.com/jikexianfeng/p/9521390.html
Copyright © 2020-2023  润新知