学过一段时间单片机的你发现,中断服务函数可以在主函数进行的同时,进行一些对时间要求高的模块的配置时,则要用到定时器中断。而如果你要实现多个功能的操作,会使用多个定时器是必要的STC89C51单片机所有的资源中最不好搞清楚的就是定时器2,尤其是对于那些以前从来没有玩过单片机的新手。定时器2是新增资源,也是51单片机定时器里面功能最强大的一个定时器。

​ 定时器2有三个模式,在这里我们只是介绍系统的简单配置与将定时器2当成一般递增/递减计数器的使用代码,剩下的模式可以自己查阅手册:

​ 下面我带着大家简单配置一下:

​ 手册上写着T2CON是可位寻址的。意思就是可以单独对一个位进行配置。打开单片机的头文件#include <REGX52.H>,可以看到,这些位的具体定义。

​ TH2,TL2为大家熟悉的定时器计数初值的配置,RCAP2L与RCAP2H称作陷阱寄存器,用作重装载值的配置。可以在DECN=0的原理图里看到reload字样,表示重装载

​ 需要我们手动配置的也就是TF2(定时器溢出标志)和TR2(定时器开关)剩下的寄存器一部分配置定时器的工作模式,这里选择16位自动重装,所以都配置为0

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

​ 这里需要我们配置的寄存器比较少,所以采用T2CON = 0;先将所有位都置0,然后再按位寻址,
源码/模板:
/**
  * @brief  定时器2初始化,1毫秒@11.0592MHz
  * @param  无
  * @retval 无
  */
void Timer2_Init(void)        
{
    T2MOD = 0;    //初始化模式寄存器
    T2CON = 0;    //初始化控制寄存器
    TL2 = 0x66;    //设置定时初值
    TH2 = 0xFC;    //设置定时初值
    ET2=1;
    EA=1;
    PT2=0;
    TR2 = 1;        //定时器2开始计时
}
//中断服务函数模板
void Timer2_Routine() interrupt 5
{
    TF2 = 0;           //中断标志复位
    RCAP2L  = 0x66       //设置低位定时初值
    RCAP2H = 0xFC      //设置高位定时初值
    /***/
}
————————————————

#include <STC89C5xRC.H>
void InitT0(){
    TMOD=0X01;
    TH0=0XFC;
    TL0=0x66;
    ET0=1;
    TR0=1;
}
void servicet0() interrupt 1{
    static unsigned int t_1s=0;
    TH0=0XFC;
    TL0=0x66;
    t_1s++;
    if(t_1s>=1000){
        t_1s=0;
        P00=~P00;
    }
}

void InitT2(){
    T2MOD = 0;        //初始化模式寄存器
    T2CON = 0;        //初始化控制寄存器
    TL2 = 0x66;        //设置定时初始值
    TH2 = 0xFC;        //设置定时初始值
    RCAP2L = 0x66;        //设置定时重载值
    RCAP2H = 0xFC;        //设置定时重载值
    TR2 = 1;        //定时器2开始计时
    PT2=0;            //感觉比定时器0快一些
    ET2=1;
}
void servicet2() interrupt 5{
    static unsigned int t_1s=0;
    TF2=0;
    t_1s++;
    if(t_1s>=1000){
        t_1s=0;
        P01=~P01;
    }
}

void main(){
    InitT0();
    InitT2();
    EA=1;
    P1=(P1&0XE0)|0X0E;
    while(1){
    }
}
原文链接:https://blog.csdn.net/qq_60521516/article/details/124450447

STC89C52RC/RD中定时器2的使用方法相关推荐

  1. android 开启一个定时线程_ANDROID开发中定时器的3种方法

    在android中,经常用到的定时器主要有以下几种实现: 一.采用Handler与线程的sleep(long )方法 二.采用Handler的postDelayed(Runnable, long) 方 ...

  2. Qt中定时器使用的两种方法

    Qt中定时器的使用有两种方法,一种是使用QObject类提供的定时器,还有一种就是使用QTimer类. 其精确度一般依赖于操作系统和硬件,但一般支持20ms.下面将分别介绍两种方法来使用定时器. 方法 ...

  3. android全局计时_Android中使用定时器的三种方法

    本文实例为大家分享了Android中使用定时器的三种方法,供大家参考,具体内容如下 图示: 因为都比较简单,所以就直接贴代码(虑去再次点击停止的操作),有个全局的Handler负责接收消息更新UI 第 ...

  4. 罗克韦尔AB PLC RSLogix5000中定时器指令使用方法介绍

    罗克韦尔AB PLC RSLogix5000中定时器指令使用方法介绍 定时器指令用于控制基于时间的操作,属于输出指令. 定时器指令 定时器指令共有3个:  延时导通定时器 TON  延时断开定时器 ...

  5. python threading模块中的timer_threading中定时器Timer方法

    threading中定时器Timer 定时器功能:在设置的多少时间后执行任务,不影响当前任务的执行 常用方法 from threading import Timer t = Timer(interva ...

  6. [Unity3d]u3d中定时器的使用

    在游戏设计过程中定时器是必不可少的工具,我们知道update方法是MonoBehavior中一个人人皆知的定时器方法,每帧都在调用,那还有其他什么定时器的方法呢,这里介绍一下. 1.Invoke(st ...

  7. JS中定时器的返回数值ID值

    定时器会返回一个数字值id,可以由clearInterval(id)或clearTimeout(id)来实现对对应定时器的清除. setInterval()/setTimeout()BOM中的Wind ...

  8. keil c语言 延迟程序,Keil C51程序设计中几种精确延时方法

    前几天时间在做一个基于51单片机开发板的等精度频率计,用LCD1602液晶显示的,晶振是22.1184MHZ,用得是测频率法,目的是想做到能够测试0--900KHZ的信号. 液晶显示部分花了我好几天才 ...

  9. c51语言1秒延时程序,KeilC51程序设计中几种精确延时方法

    实现延时通常有两种方法: 一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时:另一种是软件延时,这种方法主要采用循环体进行. 1 使用定时器/计数器实现精确延时 ...

最新文章

  1. 五月记事 2005-05-03
  2. 如何在Firefox 3中重新启用about:config警告消息
  3. C++_类和对象_C++多态_虚析构和纯虚析构函数---C++语言工作笔记074
  4. vnpy学习_06回测结果可视化改进
  5. How to Root Nexus 5 on Android 4.4.4 KTU84P and Install CWM Recovery
  6. 计算机黑屏但是有鼠标,电脑黑屏有鼠标箭头怎么办
  7. 浏览器中cookies查看_如何在任何浏览器中阻止Cookies(除了您使用的网站外)
  8. ASP.NET 基于asp.net设计项目框架
  9. C++中反正切atan2(y,x)与atan(x)
  10. NAND FLASH 内存详解与读写寻址方式
  11. Menu键_subMenu设置
  12. 一些奇奇怪怪小问题汇总
  13. 【基础篇】Linux的目录结构
  14. 分享申请IDP账号的过程,包含duns申请的分享
  15. 联想台式计算机g50500i,联想台式电脑的价格及配置
  16. 018 The Scala Programming Language
  17. 键盘return按键及事件
  18. uniapp 分享缩略图过大怎么办_新版本微信下,如何设置分享到朋友圈的缩略图?...
  19. oracle存储过程在哪里找,oracle存储过程常用的技巧(详)
  20. python将true值改为1_python – 转换为Pandas Dataframe的True / False值

热门文章

  1. 艾伟:Memcached深度分析
  2. uniapp自定义tabbar必看
  3. 一个mos管驱动电路的分析
  4. java怎么创建二进制文件_如何为Java应用程序创建本机二进制文件?
  5. 安徽工业大学计算机学硕,安徽工业大学计算机科学与技术学院几年制
  6. java 短信验证码(创蓝接口)调用
  7. 谈一下3月22日线下肉山小课堂感受
  8. 【MQTT】在Windows下搭建MQTT服务器
  9. BEV感知的开源数据集分享
  10. python如何定义带有可选参数的函数_python中如何正确调用带可选参数的函数