关闭

女兔帮

51单片机———定时器/计数器的学习

更新时间:2025-02-18 19:38:52 浏览:

一、什么是定时器

我们知道,、独立按键、矩阵按键等等,这些都是实实在在存在的,均属于单片机外设,而定时器不是实实在在存在的,51单片机的定时器属于内部资源,它电路的连接和运转都在单片机内部完成。简单来说,就是单片机内部的某个模块叫做定时器。

这里也相信很多人也听说过还有计数器,其实计时器和定时器在单片机内部都属于同一个东西,计它们都属于单片机内部的同一个模块,只不过是通过配置SFR(特殊功能寄存器)来实现两个不同的功能而已,但大多数都是使用定时器功能。

二、定时器是用来干嘛的?

顾名思义,定时器就是用来定时的。除了用来定时以外,还可以替换长时间的延时函数Delay,Delay占用CPU,它让CPU一直处于一个延时的循环当中,如果这时候想要按下按键(即想要CPU对按键进行扫描)或者想要CPU去干别的事情,就有可能CPU忙着延时而忽略了扫描,按下按键也不作出反应。而使用定时器进行延时是不占用CPU的,这样子CPU就可以去干别的事情。

这里我们主要是对定时器的定时功能作以讨论。我们知道,钟表是以1秒为单位进1,但定时器不一样,定时器内部有一个寄存器,让寄存器开始计数后,定时器是以1个机器周期为单位进1。那么什么是机器周期?

1、机器周期和时钟周期

单片机完成一个操作的最短时间。51单片机系列,我们通常认为1个机器周期等于12个时钟周期,但是针对不同单片机,一个机器周期也可能等于3个或5个时钟周期。

如下图所示黄色圈起部分即为晶振,晶振上面表明的数字即为振动的频率,以MHz为单位。

最常见的就是12.和11.。 如果是11.,那对于这个单片机系统来说,时钟周期 = 1/ 秒,那么机器周期 = 12 / 秒。

也就是说,定时器是通过1个机器周期(也就是12/秒)后自动进1。

51单片机———定时器/计数器的学习(图1)

2、溢出

我们知道,当钟表满60后,秒就自动变为0重新开始计数,那么这种情况在单片机或者计算机中我们称为溢出。

那么定时器加到多少后会溢出呢? 定时器有多种工作模式,不同的工作模式它的溢出是不一样的,这些工作模式使用不同的位宽(指使用多少个二进制),如果是16位的定时器,也就是2个字节,**值就是65535,也就是说当加到65535后,再加1就变为0,发生溢出。而其他位数道理也是一样的,对于51单片机,溢出后就会变成0。

从某个初始值开始,经过确定的时间后发生溢出,这个过程就是定时的含义。

三、定时器如何工作的? 1、定时器资源

标准的51单片机内部有2种定时器T0和T1,T是Timer的缩写,现在很多系列的单片机还会增加新的定时器,比如的定时器资源有3个,除了T0和T1还有外加的资源T2。不同的单片机会有不同的定时器个数和操作方式,但T0和T1的操作方式是所有51单片机共有的。

那么如何选择T0工作还是T1工作?———TMOD

TMOD(Timer MODe) : 控制定时器的工作方式。8个bit,高四位 bit 控制 T1,、低四位 bit 控制 T0。

51单片机———定时器/计数器的学习(图2)

2、定时器工作模式

前面说到,定时器有4种工作模式(0、1、2、3),如图所示:

51单片机———定时器/计数器的学习(图3)

其中模式0是为了兼容老的8048系列单片机而设计的,现在的51基本不会用到; 而模式3根据应用经验,模式2完全能够实现它所实现的功能,基本也不用;重点学习模式1和2;

3、原理框架图

首先我们了解一下定时器的框架图和模式1的原理图:

51单片机———定时器/计数器的学习(图4)

51单片机———定时器/计数器的学习(图5)

原理:晶振具有固定的频率,在一段时间后发出脉冲信号,然后提供给计数单元,然后开始计数,当发生溢出现象的时候,计数单元就会向中断系统发出中断申请,也就是停止计数。

(1)时钟

模式1中的示意图中,时钟里面的OSC代表时钟频率,因为1个机器周期=12个时钟周期,所以d=12。为什么要除以12?———起到分频的作用 也就是说,如果晶振是12MHz的话,除以12,也就是1MHz传送到计数系统,1MHz就是1秒钟振动100万次,也就是1ms计数一次。

那么Tn脚又是什么? 时钟脉冲信号可以由两条路径,一个是由晶振提供,一个是由外部引脚来提供。当由外部引脚提供脉冲信号的时候,定时器此时就是一个计数器,因为外部给它一个脉冲就直接计数,这也是计数器的来源。

那么C/T又是什么?———选择要计数器还是定时器 C就是,T就是Timer,T上面画一横就是代表低电平(给0),如果没有一横就是给高电平(给1),给0就是Timer,给1就是. 也就是说,有两条路径,一条路径是:晶振给脉冲信号 就是C/T = 0,实现定时器功能 另一条是:外部引脚给脉冲信号,就是C/T = 1,实现计数器功能

而开关拨到哪个位置是由寄存器来进行控制的(后面内容“定时器相关寄存器”会具体介绍)

(2)计数单元

计数单元中可以看到有一个TLn和THn,这是计数单元里面的1个16位的计数系统,TL就是Timer Low,TH就是Timer Hight,分别对应低字节和高字节,n 就是指是哪个定时器在工作(0还是1) 而这两个字节总共能存65535个数,就是从0数到65535。

那么模式1的这个计数系统具体如何工作的?

TH0,TL0 : T0定时器计数寄存器,组成16位的计数,--(0--65535),也就是说只要=(65535),程序就会跑去中断程序,在中断程序中,我们要重新给TH0,TL0重新赋值。

举个例子:我们定时50毫秒,TH0,TL0对应着什么值呢? 上面我们说了,TH0,TL0,组成的16位计数器计数范围是 0---65535 。50ms = 50 000us,我们只要让 TH0 TL0 从(65535 - 50000)开始计数,TH0,TL0就会不停的+1,直到TH0,TL0=65535,就是计数了50000次,时间就是过了50ms。我们只要在中断程序里面,重新赋值给TH0,TL0=(65535 - 50000),定时器就会不停得每50ms中断一次了

51单片机———定时器/计数器的学习(图6)

下表是关于电路逻辑符号:

51单片机———定时器/计数器的学习(图7)

与门:见0为0,全1为1 或门:见1为1,全0为0

(3)中断系统

可以看到中断系统中有个TFn,TF又是什么? 我们知道,单片机中每一个功能模块,都有属于它自己的SFR(特殊功能寄存器)来控制。 而定时器由TCON(Timer )这个SFR来进行控制,其中有TF1,TR1,TF0,TR0四位需要理解清楚:

TF就是Timer Flag,是一个标志位,它的作用就是告诉大家定时器溢出了,而是哪个定时器就看n是多少;TR(Timer Run)就是控制计数暂停或开始,如果我在程序当中写入TR1 = 1,就是告诉定时器1的计数系统可以开始计数了,如果写入TR1 = 0,定时器就会停止加1,保持原来的数值不变。

51单片机———定时器/计数器的学习(图8)

51单片机———定时器/计数器的学习(图9)

TMOD 和TCON的位分配如下表所示

51单片机———定时器/计数器的学习(图10)

51单片机———定时器/计数器的学习(图11)

注意:不可位寻址是什么意思?

例如:TCON里面有一位叫做TR1,我可以直接在程序中进入操作,单单对这一位进行操作;

但是如果我要对TMOD里面的M1进行操作,我必须一次性对全部位进行操作;

接下来我们正式看一下中断系统是什么?

四、中断系统 1、概念

51单片机———定时器/计数器的学习(图12)

而我们单片机里面的溢出就是一种中断源,计数存到**值时,存不下了,向中断系统发出中断计数的申请。

2、中断程序流程

51单片机———定时器/计数器的学习(图13)

3、中断资源

51单片机———定时器/计数器的学习(图14)

4、完整的中断系统内部图

51单片机———定时器/计数器的学习(图15)

如果我们想要实现红色电路的连接,可以看到我们需要控制一些开关的闭合已经选择开关拨动到哪个位置,这些都需要配置寄存器来进行实现,而下一篇文章在写程序的时候就更能理解这句话。

五、定时器相关寄存器(简单了解)

单片机通过配置寄存器来控制内部线路的连接,通过内部线路的不同连接方式来实现不同的功能

前面说到,定时器是提供配置SFR来实现不同的功能,而SFR也分为以下几种:

51单片机———定时器/计数器的学习(图16)

IE( )中断允许寄存器

EA( All):

CPU的总中断允许控制位,从上面的中断电路图可以看出,当EA = 1时,开关闭合,线路接通,CPU开放中断,反之EA = 0,CPU屏蔽所有中断申请,各中断源首先受EA控制,其次还受各中断源自己的中断允许控制位控制

IP( ): 中断优先级控制寄存器

PT 1/0H PT1/0 优先级

0 0 1

0 1 2

1 0 3

1 1 4

你可能感兴趣的