STC89C52单片机定时器2详细整理

        51单片机是我自学的第一款单片机,那时正好是过春节,想起那个寒假,外面下着大雪,有时还会传来一两声爆竹的炸响,而我一个人在房间里摆弄单片机开发板,反复调试程序的时光,真是难忘!

        我自认为这款单片机所有的资源中最不好搞清楚的就是定时器2,尤其是对于那些以前从来没有玩过单片机的新手。定时器2是新增资源,也是51单片机定时器里面功能最强大的一个定时器。所以掌握好定时器2还是非常有必要的。以下是在我完全搞明白它的原理和用法的基础上整理的一篇小文章。读起来,好像Datasheet一样!请原谅,希望没有辜负你的点击!

        定时器2是一个16位定时器/计数器,通过设置特殊功能寄存器 T2CON 中的 C/T2 位可将其设置为定时器或是计数器;通过设置 T2CON 中的工作模式选择位可将定时器2设置为三种工作模式,分别为捕获自动重新装载(递增或是递减计数)和波特率发生器

  • 定时器2的控制寄存器 T2CON(可按位寻址)

描述
Bit 7TF2定时器2溢出标志位: 用于请求中断(必须由软件清0)
Bit 6EXF2 - 定时器外部标志位: 当外部信号使能时,发生外部负跳变时置位请求中断(必须由软件清0)
Bit 5RCLK 接受时钟标志位: 默认情况下串行口中模式1和模式3的时钟是由定时器1的溢出率提供,若该位置位,则由定时器2提供
Bit 4TCLK 发送时钟标志位: 原理同上
Bit 3EXEN2 定时器2的外部使能标志位: 定时器2没有作为串行口时钟时,若将该位置位时,将允许T2EX的负跳变产生捕获或重装
Bit 2TR2 定时器2启动/停止控制位
Bit 1C/T2定时器2的定时器/计数器选择位(在reg52头文件中定义为了C_T2, 以下雷同)
Bit 0CP/RL2捕获/重装标志位
  • 定时器2的模式控制寄存器 T2MOD (不可按位寻址)

描述
Bit [2:7]Reserved
Bit 1T2OE - 定时器2输出使能位
Bit 0DCEN - 向下计数使能位
  • 定时器2的三种模式

        1. 捕获模式

        在 CP/RL2 = 1 && TR2 = 1 时进入捕获模式。通过对控制寄存器 T2CON 的外部使能标志位EXEN2 的置位和清0,又可以有分为如下两种工作模式:

        EXEN2 = 0

        此时定时器2作为一个16位的定时器/计数器(由定时器/计数器选择位 C/T2 位选择)使用,实验已通过。

        EXEN2 = 1

        此时定时器在前者的基础上,增加一个特性,即允许接受外部输入 T2CON 的负跳变,此负跳变使定时器2中的 TH2 TL2 中的值存入陷阱寄存器 RCAP2HRCAP2L 中,并将外部标志位 EXF2 置位,引起中断。该中断与前者中的中断同时存在并共用同一中断程序(在中断中可检测TF2T2EX 位确定是哪一个引起的中断)。除此之外该模式下,当中断是 T2EX 位引发的时,虽然引发了中断,但是由于不是溢出,并且计数器没有停止计数,因此,此时 TH2TL2 不用重新装载值。

        实验证明在此模式下可以实现:用溢出中断输出方波,用线接入 T2EX(P1^1),在 T2EX 的中断中使蜂鸣器响起来,理论和实践一样,蜂鸣器响的频率是方波的两倍(因为它只捕捉负跳变)

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

        16位自动重装模式中,定时器2可通过 C/T2 位配置为定时器/计数器,根据外部使能标志位EXEN2 置位和清0,可分为两种情况:

        EXEN2 = 0

        定时器2为16位自动重装的普通定时器,由陷阱寄存器提供重装的值,只需要预设一下即可,可用于定时精度要求高,定时时间长(16位)的情况。

        EXEN2 = 1

        根据递减计数使能位 DCEN 的置位和清0可分为两种情况:

设置功能
T2MOD = 0x00 ( DCEN = 0)与上一种情况相比,此时16位自动重新装载可由外部 T2EX 的负跳变,和溢出任意一种触发,并都能产生中断
T2MOD = 0x01 (DCEN = 1)此时允许 T2EX 控制计数的方向;T2EX = 0 时,重装的值为 0FF 和 0FF,递减计数与陷阱寄存器预存值相等时,置位 TF2 产生中断。T2EX = 1时;自动重装值为陷阱寄存器中的值,溢出时置位 TF2 产生中断
        3. 波特率发生器模式

        T2CONTCLKRCLK 位为0(默认)时,串行口发送和接受的波特率由定时器1提供;置位为1时,由定时器2提供。可以一个通过定时器1,一个通过定时器2,这样可以获得发送和接受时不同的波特率。

        定时器2作为定时器时,递增频率为晶振频率的12分频,而定时器2作为波特率发生器时,它的递增频率为晶振频率的2分频。

模式1和模式3的波特率 =(振荡器频率 / 32)  *  (65535 - N)

        定时器2为计数模式时,外部时钟信号由 T2(P1^0)引脚进入。

        定时器2作为波特率发生器的时候,TH2 溢出并不会置位 TF2,所以此时可以不用禁止定时器2中断,若是 EXEN2 位被置位时,可以将 T2EX 作为附加的外部中断。

        定时器2作为波特率发生器的时候,不要对 TH2TL2 读写,可以读陷阱寄存器,但是也不要写。当对定时器2的陷阱寄存器进行访问时,应关闭定时器( TR2 清0)。

        4、可编程时钟输出

        52系列单片机,可设定定时器/计数器2通过 T2 (p1^0) 引脚输出时钟。

        P1^0除了可以作为普通I/O口外,还可以作为定时器2的外部计数输入和时钟信号输出。

        C/T2 = 0 并且 T2MODT2OE 位为1时,可将定时器2选为时钟信号发生器,自动装初值。设置公式:

      时钟信号输出频率=(振荡器频率/4)* (65535-N)

        在时钟输出模式下,计数器溢出不会产生中断请求。这种功能相当于定时器2可同时作为波特率发生器和时钟发生器。

        *因为此时外部中断并没有被暂用,若是在设置上不冲突的话可能同时还可以响应 T2EX 引入的外部信号,这个只是猜想,还没有用实验证明过

  • 单片机计数功能

        单片机对于外来脉冲信号具有计数功能,但是有要求:

计数脉冲的最高频率 = 振荡器的频率 / 24

        并且为了确保给定电平在电平变化之前能被采样一次,则这个电平至少要维持一个机器周期。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值