定时器

这个东西很难,需要反复思考和理解

定时器介绍

单片机的定时器属于单单片机的内部资源,其电路的连接和运转均在单片机内部完成。

我们之前连接的LED、独立按键、数码管、液晶屏都属于单片机的外设,需要外接电路才能运转。

定时器的作用

用于计时,可以实现软件计时。或者使程序每隔一固定的时间完成一项操作。

替代长时间的Delay,提高CPU的运行效率和处理速度。(我们之前用Delay函数的时候 ,CPU是不能完成其他操作的。比如我们实现流水灯的延时过程中,我们不能要求单片机做别的事情。假如我们需要这个时候完成别的事情,那么就需要用到定时器)

(……)定时器作用太多了,是个很重要的知识点。

STC89C52的定时器资源

手册中可以看到相关介绍

image.png

个数:3个(T0、T1、T2),T0与T1与传统的51单片机兼容,T2是此型号的单片机增加的资源。(兼容的意思是,新版本是可以兼容老版本,老版本是无法兼容新版本,T2就是新版本,他有一些传统版本无法实现的功能)

定时器的资源和单片机的型号是关联在一起的,不同型号可能跟会有不同的定时器个数和操作方式,但一般来说,T0和T1的操作方式是所有51单片机所共有的。

定时器的框图

定时器在单片机的内部像一个小闹钟一样,根据时钟的输出信号,每隔一个设定时间,技术单元数值就增加一,当计数单元数值增加到设定“闹钟提醒时间”时,计数单元就会向中断系统发出中断申请,产生“响铃提醒”,使程序跳转到中断服务函数中执行。

说人话就是,定时器不断产生固定周期的脉冲波,当脉冲波产生的数量达到预设值时,程序就会产生中断,进入我们设置好的中断服务函数中。

这里插一句关于中断的描述,中断也是单片机的内设部分,具体操作后面会提及。

时钟(提供计数单元的时钟脉冲)———->计数单元(时钟计数)———->中断系统(产生中断,执行定时任务)

定时器的工作模式

传统的定时器均有四种工作模式(实际上只用模式1,用不到计数器,计数器需要给对应管脚口提供外部脉冲):

模式0 :13位定时器/计数器

模式1 :16位定时器/计数器(常用)

image.png

时钟部分

image.png

会产生一个脉冲系统。

SYSclk:系统时钟,即晶振周期,我们用的开发板STC89C52的晶振为12MHz。(是不是很熟悉,咱们当时生成延时函数的时候设置的就是12MHz)

我们产生的脉冲频率就是12MHz,即每秒有12M个脉冲信号。

再来说说分频,从图上我们看到,系统时钟连接了两种模式,一种是12分频,一种是6分频。假如连到12分频上,那我们的时钟频率就会变成1MHz,周期就是1us。这个时候,我们的计数单元就会每隔1us记一次数。

C/~T就是模式选择开关。上面也说了,我们把定时器当计数器来用的时候需要加外设,外设就接到了T0这个口。

C/~T为1的时候,就是Counter模式;为0时,就是Timer模式,也就是我们所需要的定时器。这个模式选择是我们自己单独配置的。

计数部分:

image.png

TL:Timer low,TH:Timer high。这两个是存储位。

计数系统是16位的,计数内容是两个字节,分别是TL和TH,每个字节单独可以存255个数(就是unsigned int的大小)。两个寄存器可以存的最大数是65535(就是int的大小)。

每个脉冲过来的时候,这两个寄存器就会加1,一直加到65535,就会出现溢出,产生一个标志位:TF。然后归零继续重复。

~INT0和GATE或者T0管脚口 共同控制着定时器的模式。

这里的门电路是数电的知识

中断部分:

image.png

TF:Timer flag

image.png

举个例子,假如我们在写作业,电话响了我们去接电话,但是接电话的过程中水烧开了,我们就需要暂停接电话的行为去处理优先级更高的开水,处理完再回到低级的中断过程:接电话,这就是中断的嵌套。

image.png

image.png

以上两图源自b站up江科大自化协的ppt

STC89C52中断资源

STC89C52的中断源有8个(外部中断0、定时器0中断、外部中断1、定时器1中断、串口中断、定时器2中断、外部中断2、外部中断3);优先级有四个(很重要、比较重要、不太重要、不重要);中断号如下图所示:

image.png

不同的单片机型号,中断的资源是不一样的,使用时一定要仔细查看手册

中断结构

image.png

该图是传统的8051单片机中断结构,我们的单片机都是向下兼容,新版本兼容旧版本,所以这个图适用于我们现在用的STC89C52.

如图所示,这个中断结构有六个中断源,比如INT0(计数器中断)、T0(定时器中断)、RX(串口接收中断)、TX(串口发送中断)……显然,我们现在用到的时定时器中断。

模式2 :8位自动重装模式

模式3 :两个8位计数器

定时器相关寄存器

之前我们学习了很多的外设,跟寄存器的关系不是很大,但是现在涉及到单片机的内设,就不得不提寄存器这个概念。

寄存器是连接软硬件的媒介,说人话就是,我们需要控制寄存器,才能控制单片机内部线路的连接。寄存器应该是数电的内容,学过的朋友们印象应该比较深

image.png

举个例子,我们定时器的寄存器如上图所示,我们刚才也提到了C/~T这个开关可以控制模式,那么我们给C/~T对用的寄存器赋值,就相当于对这个开关进行操作。

image.png

中断寄存器如上图所示,我们现在能用到的也就是IE寄存器,即使能寄存器。每个寄存器的具体功能和操作,需要查看使用手册。

在单片机中寄存器就是一段特殊的RAM存储器,一方面,寄存器可以存储和读取数据,另一方面,每个寄存器背后都连接着一根导线,控制着电路的连接方式。用过Vivado的朋友们应该深有感触。没有了解过的朋友们也不用担心,随着我们的阅历的增长,也会慢慢了解到这些知识的。

image.png

image.png

转自:https://blog.csdn.net/Destiny_Di/article/details/127041104