定时器
这个东西很难,需要反复思考和理解
定时器介绍
单片机的定时器属于单单片机的内部资源,其电路的连接和运转均在单片机内部完成。
我们之前连接的LED、独立按键、数码管、液晶屏都属于单片机的外设,需要外接电路才能运转。
定时器的作用
用于计时,可以实现软件计时。或者使程序每隔一固定的时间完成一项操作。
替代长时间的Delay,提高CPU的运行效率和处理速度。(我们之前用Delay函数的时候 ,CPU是不能完成其他操作的。比如我们实现流水灯的延时过程中,我们不能要求单片机做别的事情。假如我们需要这个时候完成别的事情,那么就需要用到定时器)
(……)定时器作用太多了,是个很重要的知识点。
STC89C52的定时器资源
手册中可以看到相关介绍
个数:3个(T0、T1、T2),T0与T1与传统的51单片机兼容,T2是此型号的单片机增加的资源。(兼容的意思是,新版本是可以兼容老版本,老版本是无法兼容新版本,T2就是新版本,他有一些传统版本无法实现的功能)
定时器的资源和单片机的型号是关联在一起的,不同型号可能跟会有不同的定时器个数和操作方式,但一般来说,T0和T1的操作方式是所有51单片机所共有的。
定时器的框图
定时器在单片机的内部像一个小闹钟一样,根据时钟的输出信号,每隔一个设定时间,技术单元数值就增加一,当计数单元数值增加到设定“闹钟提醒时间”时,计数单元就会向中断系统发出中断申请,产生“响铃提醒”,使程序跳转到中断服务函数中执行。
说人话就是,定时器不断产生固定周期的脉冲波,当脉冲波产生的数量达到预设值时,程序就会产生中断,进入我们设置好的中断服务函数中。
这里插一句关于中断的描述,中断也是单片机的内设部分,具体操作后面会提及。
时钟(提供计数单元的时钟脉冲)———->计数单元(时钟计数)———->中断系统(产生中断,执行定时任务)
定时器的工作模式
传统的定时器均有四种工作模式(实际上只用模式1,用不到计数器,计数器需要给对应管脚口提供外部脉冲):
模式0 :13位定时器/计数器
模式1 :16位定时器/计数器(常用)
时钟部分
会产生一个脉冲系统。
SYSclk:系统时钟,即晶振周期,我们用的开发板STC89C52的晶振为12MHz。(是不是很熟悉,咱们当时生成延时函数的时候设置的就是12MHz)
我们产生的脉冲频率就是12MHz,即每秒有12M个脉冲信号。
再来说说分频,从图上我们看到,系统时钟连接了两种模式,一种是12分频,一种是6分频。假如连到12分频上,那我们的时钟频率就会变成1MHz,周期就是1us。这个时候,我们的计数单元就会每隔1us记一次数。
C/~T就是模式选择开关。上面也说了,我们把定时器当计数器来用的时候需要加外设,外设就接到了T0这个口。
C/~T为1的时候,就是Counter模式;为0时,就是Timer模式,也就是我们所需要的定时器。这个模式选择是我们自己单独配置的。
计数部分:
TL:Timer low,TH:Timer high。这两个是存储位。
计数系统是16位的,计数内容是两个字节,分别是TL和TH,每个字节单独可以存255个数(就是unsigned int的大小)。两个寄存器可以存的最大数是65535(就是int的大小)。
每个脉冲过来的时候,这两个寄存器就会加1,一直加到65535,就会出现溢出,产生一个标志位:TF。然后归零继续重复。
~INT0和GATE或者T0管脚口 共同控制着定时器的模式。
这里的门电路是数电的知识
中断部分:
STC89C52中断资源
中断结构
该图是传统的8051单片机中断结构,我们的单片机都是向下兼容,新版本兼容旧版本,所以这个图适用于我们现在用的STC89C52.
如图所示,这个中断结构有六个中断源,比如INT0(计数器中断)、T0(定时器中断)、RX(串口接收中断)、TX(串口发送中断)……显然,我们现在用到的时定时器中断。
模式2 :8位自动重装模式
模式3 :两个8位计数器
定时器相关寄存器
之前我们学习了很多的外设,跟寄存器的关系不是很大,但是现在涉及到单片机的内设,就不得不提寄存器这个概念。
寄存器是连接软硬件的媒介,说人话就是,我们需要控制寄存器,才能控制单片机内部线路的连接。寄存器应该是数电的内容,学过的朋友们印象应该比较深
中断寄存器如上图所示,我们现在能用到的也就是IE寄存器,即使能寄存器。每个寄存器的具体功能和操作,需要查看使用手册。
在单片机中寄存器就是一段特殊的RAM存储器,一方面,寄存器可以存储和读取数据,另一方面,每个寄存器背后都连接着一根导线,控制着电路的连接方式。用过Vivado的朋友们应该深有感触。没有了解过的朋友们也不用担心,随着我们的阅历的增长,也会慢慢了解到这些知识的。
转自:https://blog.csdn.net/Destiny_Di/article/details/127041104