STC 定时器/计数器2 操作详解 (基于STC89C52RC参考文档)

一、 认识STC定时器2 —T2

  1. STC 定时器2(即T2)是一个16位定时/计数器。 通过设置特殊功能寄存器T2CON中的C/T2位,可将其作为定时器或计数器(特殊功能寄存器T2CON的描述如表1所列)。
  2. 定时器2有3种操作模式:捕获自动重新装载(递增或递减计数)波特率发生器。这3种模式由T2CON中的位进行选择(如表1所列)。
    STC T2CON描述
  3. 定时器2 的工作方式:
     STC 定时器2 的工作方式

二 、T2定时器的工作模式及相关设置

1. 捕获模式

在捕获模式中,通过T2CON中的EXEN2设置2个选项。

  • 如果EXEN2=0,定时器2作为一个16位定时器或计数器(由T2CON中C/ ̄T2位选择),溢出时置位TF2(定时器2溢出标志位)。该位可用于产生中断(通过使能IE寄存器中的定时器2中断使能位)。
  • 如果EXEN2=1,与以上描述相同,但增加了一个特性,即外部输入T2EX由1变零时,将定时器2中TL2和TH2的当前值各自捕获到RCAP2L和RCAP2H。另外,T2EX的负跳变使T2CON中的EXF2置位,EXF2也像TF2一样能够产生中断(其向量与定时器2溢出中断地址相同,定时器2中断服务程序通过查询TF2和EXF2来确定引起中断的事件),捕获模式如图1所示。在该模式中,TL2和TH2无重新装载值,甚至当T2EX产生捕获事件时,计数器仍以T2EX的负跳变或振荡频率的1/12(12时钟模式)或1/6(6时钟模式)计数。在这里插入图片描述

2. 捕获模式自动重装模式(递增/递减计数器)

16位自动重装模式中,定时器2可通过C/T2配置为定时器/计数器,编程控制递增╱递减计数。计数的方向由DCEN(递减计数使能位)确定,DCEN位于T2MOD寄存器中,T2MOD寄存器各位的功能描述如表3所示。

  • 当DCEN=0时,定时器2默认为向上计数;
  • 当DCEN=1时,定时器2可通过T2EX确定递增或递减计数。图2显示了当DCEN=0时,定时器2自动递增计数。在该模式中,通过设置EXEN2位进行选择。如果EXEN2=0,定时器⒉递增计数到OFFFFH,并在溢出后将TF2置位,然后将RCAP2L和RCAP2H中的16位值作为重新装载值装入定时器2。RCAP2L和RCAP2H的值可通过软件预设。在这里插入图片描述
  • 如果EXEN2=1,16位重新装载可通过溢出或T2EX从10的负跳变实现。此负跳变同时将EXF2置位。如果定时器2中断被使能,则当TF2或EXF2置1时产生中断。在图3中,DCEN=1时,定时器2可递增或递减计数。此模式允许T2EX控制计数的方向。当T2EX置1时,定时器2递增计数,计数到OFFFFH后溢出并置位TF2,还将产生中断(如果中断被使能)。定时器2的溢出将使RCAP2L和RCAP2H中的16位值作为重新装载值放入TL2和TH2。
    在这里插入图片描述
  • 当T2EX置零时,将使定时器2递减计数。当TL2和TH2计数到等于RCAP2L和 RCAP2H时,定时器产生中断。

3.波特率发生器模式

寄存器T2CON的位TCLK和(或)RCLK允许从定时器1或定时器2获得串行口发送和接收的波特率。

  • 当TCLK=0时,定时器1作为串行口发送波特率发生器;当TCLK=1时,定时器2作为串行口发送波特率发生器。RCLK对串行口接收波特率有同样的作用。通过这2位,串行口能得到不同的接收和发送波特率,一个通过定时器1产生,另一个通过定时器2产生。
    如图4所示为定时器2工作在波特率发生器模式。与自动重装模式相似,当TH2溢出时,波特率发生器模式使定时器2寄存器重新装载来自寄存器RCAP2H和 RCAP2L的16位的值.寄存器RCAP2H和RCAP2L的值由软件预置。当工作于模式Ⅰ和模式3时,波特率由下面给出的公式所决定:在这里插入图片描述
    定时器可配置成“定时”或“计数”方式,在许多应用上,定时器被设置在“定时”方式(C/T2=0)。
  • 当定时器2作为定时器时,它的操作不同于波特率发生器。通常定时器⒉作为定时器,它会在每个机器周期递增(1/6或1/12振荡频率)。当定时器2作为波特率发生器时,它在6时钟模式下,以振荡器频率递增(12时钟模式时为1/12振荡频率)。在这里插入图片描述
  • 如图4所示,定时器2是作为波特率发生器,仅当寄存器T2CON中的RCLK和(或)TCLK=1时,定时器⒉作为波特率发生器才有效。注意:TH2溢出并不置位TF2,也不产生中断。这样当定时器2作为波特率发生器时,定时器2中断不必被禁止。如果EXEN2 (T2外部使能标志)被置位,在T2EX中由1到0的转换会置位EXF2(T2外部标志位),但并不导致(TH2,TL2〉重新装载(RCAP2H,RCAP2L)。当定时器⒉用作波特率发生器时,如果需要,T2EX可用做附加的外部中断。
    当计时器工作在波特率发生器模式下,则不要对TH2和TL2进行读/写,每隔一个状态时间(fosc/2)或由T2进入的异步信号,定时器2将加1。在此情况下对TH2和TH1进行读/写是不准确的;可对RCAP2寄存器进行读,但不要进行写,否则将导致自动重装错误。当对定时器2或寄存器RCAP进行访问时,应关闭定时器(清零TR2)。表4列出了常用的波特率和如何用定时器⒉得到这些波特率。

三 、定时器/计数器2 的相关配置与计算

1. 波特率计算公式:

在这里插入图片描述

  • 计算自动重装数Reload: (SMOD = 0,SMOD是 PCON特殊功能寄存器的最高位):
  1. 计算RELOAD(以下是SMOD = 0 时的计算公式)

    (a) 12T模式的计算公式 :Reload= 256 - INT(Fosc/Baud0/32/12+ 0.5)
    (b) 1T 模式的计算公式: Reload= 256- INT(Fosc/Baud0/32+0.5)

    式中: INT()表示取整运算即舍去小数,在式中加0.5可以达到四舍五入的目的;Fosc = 晶振频率;Baud0 = 标准波特率

  2. 计算用RELOAD产生的波特率:
    a) Baud = Fosc/(256 - RELOAD)/32/12 — — —12T模式
    b) Baud = Fosc/(256-RELOAD)/32 — — —1T模式
    1T模式

  3. 误差
    error = (Baud - Baud0)/Baud0 x100%
    如果误差绝对值>4.5%要更换波特率或者更换晶体频率,重复步骤1-3

2. 定时器/计数器2 设置

在这里插入图片描述

3. 可编程时钟输出

  • STC89C51RC/RD+系列单片机,可设定定时╱计数器2,通过P1.0输出时钟。P1.0除作通用I/O口外还有两个功能可供选用:用于定时╱计数器2的外部计数输入和定时/计数器2时钟信号输出。图5为时钟输出和外部事件计数方式示意图。在这里插入图片描述
  • 通过软件对T2CON.1位C/T2复位为0,对T2MOD.1位T20E置1就可将定时/计数器2选定为时钟信号发生器,而T2CON.2位TRz控制时钟信号输出开始或结束(TRz为启/停控制位).由主振频率(fosc)和定时/计数器2定时、自动再装入方式的计数初值决定时钟信号的输出频率。其设置公式如下:在这里插入图片描述
    从公式可见,在主振频率(fosc)设定后,时钟信号输出频率就取决于定时计数初值的设定。在时钟输出模式下,计数器回0溢出不会产生中断请求。这种功能相当于定时/计数器2用作波特率发生器,同时又可以作时钟发生器。但必须注意,无论如何波特率发生器和时钟发生器不能单独确定各自不同的频率。原因是两者都用同一个陷阱寄存器RCAP2H、RCAP2L,不可能出现两个计数初值。

四 、结语

本文仅为本人学习STC 89Cx笔记,仅供参考,欢迎讨论交流共同学习。

  • 9
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Guard_Byte

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值