51单片机的定时器初始化设置的流程

发布时间:2023-09-04  

51单片机的定时/计数器是一种可编程部件。它的工作方式、计数初值以及启停操作均应在定时/计数器工作前进行初始化,即向相应的寄存器写入相应的控制字。


标准的51单片机内部有T0和T1两个定时器,与这两个定时器有关的特殊功能寄存器主要由定时值存储寄存器、定时器控制寄存器和定时器模式寄存器。


在使用定时器的时候,需要完成对定时器配置,配置步骤如下:

第一:设置特殊功能寄存器TMOD,配置好工作模式。

第二:设置计数寄存器TH0和TL0的初值。

第三:设置TCON,通过TRX置1来让定时器开始计数。

第四:判断TCON寄存器的TFX位,监测定时器溢出情况

这里TRX和TFX中的X指的是0或者1。

下面程序使用定时器0,工作模式1,实现20ms的定时功能,控制单片机的P1.0输出周期为40ms的方波信号。


1.首先设置特殊功能寄存器TMOD,配置定时器0工作在模式1。TMOD寄存器的各位如下表所示,根据要求,采用定时器0,而高四位是定时器1的控制位,所以TMOD的高四位置0,TMOD的低四位为定时0的控制位。根据要求定时器0工作在定时器模式,所以C/T(T0)位因该是置0,表示工作在定时模式。本定时器启动不受到单片机引脚INT0外部信号的控制,所以GATA(T0)为清零即可。要求定时器0工作在模式1,则M1(T0)位置0,M0(T0)位置1即可。因此通过以上分析,可知TMOD的各位如下TMOD=0B00000001即,TMOD=0X01.

pYYBAGL8viaAfGCaAACHNWCQ3uE355.png

2.设置计数寄存器TH0和TL0的初值,根据定时时间20ms,确定TH0和TL0的初值。单片机的晶振为11.0592M,时钟周期就是1/11059200,机器周期是12/11059200 秒,定时间20ms,就是要经过X个机器周期得到0.02秒,即X* 12/11059200=0.02,得到X=18432.16位定时器的溢出值是65536(因65535加1才是溢出),这样先给TH0和TL0一个初始值,让它们经过18432个机器周期后刚好达到65536溢出,溢出之后TF0置1,通过TF0就可以得知0.02秒时间到。那么初值y=65536-18432=47104,转换为十六进制就是0XB800;即TH0=0XB8;TL0=0X00;

3.设置TCON,通过TR0置1来让定时器开始计数,即通过TR0=1启动定时器。
 

poYBAGL8vjyAHJ_oAAB-MDpX9Ns883.png
 

4.判断TCON寄存器的TF0位,监测定时器溢出情况,TF0为1则定时器溢出,定时时间到,就可以做相应的处理,比如改变P10引脚电平状态实现40ms方波信号。

将上述定时器初始化设置的流程,封装成一个函数如下:
 

void timer0_init()

{

     TMOD=0X01;

     TH0=0XB8;

     TL0=0X00;

     TR0=1;
 

}

然后在主函数调用timer0_init()函数实现对定时器的初始化。并在主函数中查询定时器是否溢出,溢出说明定时间到,进行响应的处理,main函数如下

void   main()                        //主函数
{
     timer0_init();//调用定时器初始化函数
    while(1)
     {
         if(1==TF0)//判断定时器是否溢出
         {
          TH0=0XB8;//
          TL0=0X00;//对于定时器0工作1需要溢出之后,重新装入初始值
          P10=~P10;//P10电平状态反转,实现高低电平切换
         }
    
     }
 }
 

pYYBAGL8vlOAO-mIAAEQFm3EGOw662.png

仿真结果如图所示,一个格子是10ms,一个方波周期是4个格子,正好是40ms。

poYBAGL8vmiAPmj0AAFAmZKCTWY032.png

这是一个定时器最简单的一个例子,通过这个例子掌握定时器的使用方法,稍加修改就可以实现一些功能,比如:赛事活动中使用的秒表、智能定时断电插座、通过对单片机端口引脚上输入的由外部事件产生的“触发脉冲信号”进行计数,从而根据计数结果实现相应的功能控制,比如频率计等。

文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    范围为065535。在计数器模式下,它可以计数外部脉冲,计数器范围为065535。   在使用定时器时,需要先进行定时器的初始化设置。具体步骤如下:   1.选择定时器工作模式(定时器或计数器)。   2......
    51单片机的定时器初始化设置的流程;51单片机的定时/计数器是一种可编程部件。它的工作方式、计数初值以及启停操作均应在定时/计数器工作前进行初始化,即向相应的寄存器写入相应的控制字。 标准的51......
    STC89C52RC定时器的应用基本实例;51单片机的定时/计数器是一种可编程部件。它的工作方式、计数初值以及启停操作均应在定时/计数器工作前进行初始化,即向相应的寄存器写入相应的控制字。 标准......
    项目分析一下 顺便看看这道题的难度~~~~~~~~~~~ 顺带一提,本节课要用到单片机定时器》》看我上一篇文章,详细介绍定时器 设计一个电路图,单片机用80C52RC,晶振......
    中效率高而工作灵活的部件。 51单片机定时器工作原理图: 由上图可见与定时器相关的寄存器主要有下面这几个:TMOD、 TCON、 TL0、TH0、TL1、TH1。下面......
    51的单片机定时中断基本概念及简单实验;定时器相关内容 CPU时序的有关知识 ①振荡周期:为单片机提供定时信号的振荡源的周期(晶振周期或外加振荡周期)。 ②状态周期:2 个振荡周期为 1 个状......
    51单片机定时器使用时非常重要的6点经验详细的总结;单片机定时器的使用可以说非常简单,只要掌握原理,有一点的C语言基础就行了。要点有以下几个: 1. 一定要知道英文缩写的原形,这样......
    间的仪器。 要实现这个功能,需要去建立几个关键条件: 容器 初始值、初始设置 触发机关 结束指示 实际上以上四个条件,并不是定时器独有的,需要设定的单片机......
    Timer0() interrupt 1 { //每次产生中断后初始化定时器初值, 1ms秒产生1次中断 TH0=(65536-1000)/256; TL0=(65536-1000)%256......
    中断 1ms定时到达开始计数,计数1000次 LED灯状态反转 主循环空转 主要运行函数为定时器初始化函数和中断函数 #include "reg51.h" //引用头文件 //以下......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>