当前位置:职场发展 > 51单片机定时器2的配置

51单片机定时器2的配置

  • 发布:2023-09-30 06:40

如果你研究过单片机一段时间,你会发现,在主函数运行的时候就可以配置中断服务函数,而在配置一些对时间要求较高的模块时,则需要使用定时器中断。 。而如果要实现多种功能的操作,就需要使用多个定时器。在STC89C51单片机的所有资源中,最难搞清楚的就是定时器2,尤其是对于那些从来没有玩过单片机的新手来说。定时器2是一个新资源,也是51单片机定时器中功能最强大的定时器。

​ 定时器 2 有三种模式。这里我们只介绍系统的简单配置以及使用定时器2作为通用向上/向下计数器的代码。其余模式可参考说明书:

​ 下面我给大家简单介绍一下:


​手动操作说 T2CON 是位可寻址的。这意味着可以单独配置一个位。打开单片机的头文件#include ,可以看到这些位的具体定义。

​ TH2和TL2是我们熟悉的定时器计数初始值的配置。 RCAP2L 和 RCAP2H 称为陷阱寄存器,用于配置重载值。可以在示意图中看到DECN=0的reload字样,表示重新加载

​ 我们需要手动配置的是TF2(定时器溢出标志)和TR2(定时器开关)。其余寄存器配置定时器的工作模式。这里选择16位自动重载,所以配置为0

​ EXEN2,由于我们不使用捕获模式,所以不使用它,将其设置为0。

​ 这里需要配置的寄存器相对较少,所以我们使用T2CON = 0;先将所有位设置为0,然后按位寻址进行配置。

TR2 = 1; //定时器2开始计时
TF2=0; //清除中断标志(写在中断服务函数中)

​ 可以看到定时器2只需要计数,不需要输出。 DECN默认为0向上计数,所以只需将T2MOD设置为0即可。

T2MOD = 0; //初始化模式寄存器
T2CON = 0; //初始化控制寄存器
TL2=0x66; //设置计时的初始值
TH2 = 0xFC; //设置计时的初始值

配置中断

可以参考之前定时器0和定时器1的中断图:

我们看到Timer2的哪一行,从左到右看

需要配置的是TF2、ET2、EA以及后面的中断优先级PT2(头文件中实际上只定义了一个端口PT2)

ET2=1;
EA=1;
PT2=0;

中断服务功能:


与普通定时器不同的是,中断标志TF2需要软件配置。其次,需要将重载值放入RCAP2L和RCAP2H中,并且需要在软件中手动配置中断标志TF2。设置,而普通定时器0和1是由硬件自动设置为1的。这个非常重要。说白了,对于定时器0和1来说,TF0和TF1可以不用配置。但定时器2必须配置,否则无法进入中断函数。

void Timer2_Routine() 中断 5
{
    TF2=0;
    RCAP2L = 0x66 //设置低电平时序初始值
    RCAP2H = 0xFC //设置高位时序初始值/***/
}

源代码/模板:

/**
  * @brief 定时器 2 初始化,1 毫秒 @11.0592MHz
  * @参数无
  * @retval 无
  */
无效 Timer2_Init(无效)
{
T2MOD=0; //初始化模式寄存器
T2CON = 0; //初始化控制寄存器
TL2=0x66; //设置计时的初始值
TH2 = 0xFC; //设置计时的初始值
ET2=1;
EA=1;
PT2=0;
    TR2=1; //定时器2开始计时
}
//中断服务函数模板
无效 Timer2_Routine() 中断 5
{
    TF2=0; //中断标志复位
    RCAP2L = 0x66 //设置低电平时序初始值
    RCAP2H = 0xFC //设置高位时序初始值
    /***/
}

相关文章推荐:
定时器相关概念回顾
定时器2其他两种模式的配置说明

相关文章