定时器/计数器工作方式_定时器的工作原理是什么

(70) 2024-07-22 18:01:01

第一次在学习定时器的时候模模糊糊,在做过一些题目之后对定时器有了更新的理解,现在整理一下,做笔记使用。

目录

一.基础知识

定时器的作用:

定时器的实质:

定时器的工作原理:

定时器的两个工作模式:

(1)定时器模式:(该模式可以用STC软件来直接得出定时器,而不用自己设定)

(2)计数器模式

二.配置定时器0

三.配置定时器0的中断

一.基础知识

定时器的作用

定时计数器可以用于精确事件定时,PWM脉宽调制,波形发生,信号时序测量的方面。计时也是通过计数来实现的。

定时器的实质

加1的16计数器  分 高八位、低八位组成

51单片机定时器0内部有两个寄存器TH0和TL0,都是1字节的,理解位定时器0高位寄存器(TH0),定时器0低位寄存器(TL0), 我们知道2字节最大能存65535。

比赛板拥有三个定时器0,定时器1,定时器2    主要用定时器0

定时器的工作原理:

加1计数器对输入的脉冲进行计数。

定时器的两个工作模式

1)定时器模式:(该模式可以用STC软件来直接得出定时器,而不用自己设定)

定时器模式的原理:由系统的时钟振荡器输出脉冲经12分频(1/12 us)后送来;加1计数器是对内部机器周期计数。计数值N×机器周期Tcy就是定时时间t 。

51单片机内部有一个12MHZ的晶振:即时钟周期=1/(12M) (s) = 1/12 us

51单片机一个指令周期(机器周期)是12个时钟周期:即指令周期=12*1/12 us = 1us

每经过一个机器周期(1us),内部的16位计数 寄存器的值就会加1,直到这个寄存器装满时溢出。当加到溢出后发出一个溢出中断,即硬件使TCON中TFO或TF1置1,我们程序可以捕获到这个中断,就可以知道此时经历了(65535+1)us。

 T0(T1)当做定时器来使用,就不用外部P3.4(P3.5)引脚,是用内部机器周期计数实现定时的,当定时到就会引起中断.我们可以算出工作在定时模式时最高单次定时时间为 65535*1.085us=时间(单位us)(最高单次定时时间大概在6毫秒左右,这也就是为什么STC软件中为什么定时器只能做6毫秒以下时间的)

2)计数器模式

原理:②T0或T1引脚输入的外部脉冲源。T0(P3.4引脚),T1(P3.5引脚)每来一个脉冲计数器加1(共有16位计数器),当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TFO或TF1置1,向CPU发出中断请求(定时/计数器中断允许时).

定时器/计数器工作方式_定时器的工作原理是什么 (https://mushiming.com/)  第1张

 

T0(T1)当做计数器来使用,才用到外部P3.4(P3.5)引脚,检测到1个脉冲,计数+1,当计数满时就会引起中断。

二.配置定时器0

1配置辅助寄存器    (置于定时器启动之前)

      AUXR=0X80

     对51单片机进行兼容处理。

定时器/计数器工作方式_定时器的工作原理是什么 (https://mushiming.com/)  第2张 

2.TCON寄存器:启动定时/计数器

(可位寻址,控制T0、T1的启动和停止,以及设置溢出标志。

后缀为1的是定时器1的配置,不用管)

  TF0 = 0; //清除TF0溢出中断标志,加到65536后TF0会被硬件置为1,我们需要把他清0.

  TR0 = 1; //为1时允许定时器0计数,为0时不允许计数

  IE0和IT0不用管。

所以,我们对于TCON寄存器的使用就只对TF0和TR0设置即可。

定时器/计数器工作方式_定时器的工作原理是什么 (https://mushiming.com/)  第3张

 

3.TMOD寄存器

定时器/计数器工作方式_定时器的工作原理是什么 (https://mushiming.com/)  第4张

 定时器/计数器工作方式_定时器的工作原理是什么 (https://mushiming.com/)  第5张

定时器/计数器工作方式_定时器的工作原理是什么 (https://mushiming.com/)  第6张 

设置定时/计数器工作模式,设置定时/计数器工作模式。(不可位寻址)

  定时器1的不用配置,全部置1即可,定时器0配置如下

  GATE=0:用到中断的情况下,这一位需要设置为0;如果只用定时器的情况下设置为1即可。

  C/T=0:0代表用作定时器(对内部系统时钟进行计数),1代表用作计数器(对T0-P34引脚的外部脉冲进行计数)。

  M1=0,M0=0: M1和M0这样设置代表使用模式1,即TH0和TL0两个寄存器都使用。

【自动重装定时器】(后两位00):我们一开始给TH0和TL0一个初值,当它计数满65535之后,如果自动重装,TH0和TL0将会返回这个初值。(一般用这个)

【不可重装模式】(后两位01):我们一开始给TH0和TL0一个初始值,当他计数满65535之后,将不在返回这个初值,而是等待着我们再次给它赋值。

 所以,TMOD=0XF0

3.TH0TL0(配置计数初值)

如果我们要定时1ms(1000个指令周期),可以这样做,设置寄存器的初值为64536(距离65535差1000,一次1us,1000次就是1ms),这样到溢出值65536就正好1ms。       

TL0=64535%256+1;

TH0=64535/256;

定时器模式时有:N=t/Tcy(Tcy是机器周期)

计数初值的公式:X=定时器/计数器工作方式_定时器的工作原理是什么 (https://mushiming.com/)  第7张-N

例如;计5ms的时间:t=5*定时器/计数器工作方式_定时器的工作原理是什么 (https://mushiming.com/)  第8张 s​​​​​​​

                                Tcy=定时器/计数器工作方式_定时器的工作原理是什么 (https://mushiming.com/)  第9张 ​​​​​​​

              得出 X=10240  

转换成16进制2800(4位二进制是1位16进制)

所以4位16进制的数转换成2进制就是16位

所以 28是高八位;00是低八位

然后将高八位装到TH0里面   将低八位装到TL0里面

TH0=0X28TL0=0X00

三.配置定时器0的中断

定时器0的中断:1;定时器1的中断:3;定时器2的中断:12。

以定时器0为例:

Void time0 (void)      interrupt 1

{

      中断之后系统要做的程序

}

THE END

发表回复