单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)

目录

51内部定时计数器概述

定时器和计数器概念的区分

定时计数器的结构框图

定时计数器的控制字

M1和M0工作方式选择位的四种工作方式

总结


51内部定时计数器概述

先概述一下,51内部是有两个16位的定时计数器,这个16位指的是它定时计数的常数是16位的。 然后它存放初值的地方是在两个SFR当中(T0、T1),应该确切的说是四个SFR(TH0、TL0、TH1、TL1),存放的初值对应的是T0和T1。SFR全称为:special function register(翻译为:特殊功能寄存器)

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第1张图片

T0当中存放一个16位的数值,T1当中存放一个16位的数值。内部由TH0和TL0以及TH1和TL1分别组成了T0和T1这两个16位的寄存器。对于像T0和T1这样的两个寄存器,51内部是没有一个指令可以直接赋值T0个16位的数,给T1赋值一个16位数。

它没有这样的指令,必须在赋值的时候放初值的时候必须是TH0当中放一个,TL0当中放一个,分别放的是高8位低8位,这样构成一个16位的一个寄存器。

除了这两个放初值的16位的寄存器之外,还有一个TMODTCON,这两个控制寄存器要控制管理定时计数器的工作,同时它还要反映当前定时定时计数器的工作状态,这就是SFR的最基本定义。

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第2张图片

对于定时器计数器的控制是通过定时计数器的控制SFR来下达的命令字。只要命令字下达正确,这个定时计数器就会按照这个命令字所规定的这个格式去工作。 当这个工作达到了设定值的时候,会有一个状态位在这个SFR当中,即在特殊功能寄存器当中有一个状态位会反映当前的工作状态,比如说定时时间到了,会在有一个标志会反映出当前的状态,这就是SFR的一个最基本定义。 

那么在定时功能时,是每个机器周期定时器加1;

在用作计数器功能时,在外部相应输入脚 (TO和T1)产生下降沿,计数器加1。

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第3张图片

定时器和计数器概念的区分

要区别两个概念,就是定时器和计数器的概念。 实际上确切的说,大家一般在理解这两个概念的时候可能会认为这是两个不同的概念,定时器指的是时间,是一个时间的概念。计数器指的是一个脉冲的概念,来了多少个脉冲。它们两个是如何联系在一起的?

为什么我们在学习的时候叫做定时计数器,把它作为一个概念来学习,为什么可以这样来做? 确切的说,定时器和计数器都属于是计数器都属于是计数器,只不过,记录的脉冲的源不同。

对于计数器来说,它就是从对外部引脚上所输入的脉冲进行计数。 

那么如果要是说这个计数器对一个具有精确的周期的这样的一个脉冲计数的话,结果会什么样,很显然所记录得到的这些脉冲的个数就反映了一个精确的时间。因为脉冲的周期是固定的,每记录一个脉冲,就意味着有这样的一个时间经过了,比如说如果这个脉冲的这个周期,是0.1ms,那记录了10个脉冲,那就表示的是一毫秒的时间,那么是从这个意义上来说,就是定时器和计数器,又是一致的,它们实际上都是51内部的一个单元。什么单元?就是起到一个计数的一个单元,只不过,可以让这个计数器对不同的信号进行计数,或者是对机器周期计数,或者是对外部引脚上面的脉冲计数。

如果要是对机器周期计数的话,那么计数的个数就反映了这个时间的长度,因为对于51单频机来说,机器周期是一个固定的时间值,就是外部时钟的这个周期的,我们说外部时钟频率的1/12,如果外部时钟是12兆的话,那么机器周期就是一微秒,这个时间是非常稳定的。 所以,这就叫做定时器和计数器是一致的,在这里就是选择记录的这个脉冲源不同,或者是对其计数器计数,或者是对引脚上来的脉冲计数。

这是第一点,要把定时器和计数器的功能的意义统一起来。

第二点,我们要明确它定义当中的一句话就是说,它采用的是什么?

每个机器周期定时器加1,然后在这个引脚上,每有一个下降沿出现,它计数器加1。那么就把这种定时计数器叫做加计数。 在这里就存在这样的一个问题:就是对于加计数来说,对于所有的计数器来说,都是当它产生溢出的时候,会给CPU一个明确的指示,比如说这是一个16位的定时计数器,那么也就是说意味着什么?

它计数,如果是从0000开始的话,一直记,记到FFFFFF,然后再记一个的时候,又过来一个脉冲,那么它从FFFF+1变成了0000,那么从FFFF变成0000,这个过程,我们叫做计数器溢出。 当出现溢出的时候,它会有一个标志位给你指示出来,换句话说,在特殊功能寄存器当中,计数,就是反映当前计数器工作状态。这个状态位只能反映出当前的这个定时计数器是不是溢出这个状态。

那么如果要是出现了溢出,那么这一位会被置1,换句话说,作为CPU来讲,只能知道它什么时候溢出,它又是采用一个加计数的,那么比如说就是这样的:现在需要记录从这个引脚上记录500个脉冲的话,那么在设这个计数器的时候,怎么设?是不是能把它的初值就设成500?很显然是不可以的,如果要把计数器的初值设成500的话,那么它从500这块开始记,记多少个数才能够产生溢出信号,才能够被CPU所识别出来?(只有溢出才能够被CPU所识别出来)

那么我们可以看一下,它是一个16位的定时计数器,那就意味着它最多记录的长度?是2的16次方,等于的是65536。 也就是说,它要记录这么多个数据才能够产生一次溢出,如果从0开始记的话,那么你现在如果给它的初值是500的话,那么它开始记的话,它记多少个脉冲才能够溢出?

从500的话,它要记65036,记录这么多个脉冲它才能够溢出,而我们的需求是500个脉冲,那么这样的话就有一个初值的写入的问题: 就是说我现在需要记500个脉冲,并不能把这个500直接写到它的初值当中去应用,这是不允许的,你写进去之后,得不到你要记的这500个脉冲,它必须记65036脉冲才会溢出。 那么我如果想让它记500个脉冲就产生溢出的话,那么初值就必须是65036,才能够是使这个定时计数器,即500个脉冲之后产生溢出才能够被你用户所访问,你才能够知道这500个脉冲足够了,数够了,记500个脉冲了已经。

这是定时计数器它的两个概念,是统一的。在51单片机内部,由于它采用了这种加计数的方法,而每一次都是在溢出的时候才能够被用户所识别,这就要求所需要记录的脉冲数和你写入到定时计数器初值当中的这个初值之间不能是一个值,不能是同一个值。

在关于初值的问题,我们在后面要专门加以讨论。

这块大家应该明确的就是这个初值,初始值并不是所需要的记录的那个脉冲数的值,这一点大家要明确。

那么在这里,大家还要注意的就是这个T0和T1,我们在对它赋初值的时候,必须高8位和低8位分别赋初值,分别赋初值才行,先写高八位,再写低8位。

定时计数器的结构框图

下面,我们就看一下定时计数器的结构框图。

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第4张图片

这个微处理器就是CPU就是MCS51,它的这个运算器和控制器。

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第5张图片

这个是它的内部总线,通过内部总线连接了这样的六个SFR。

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第6张图片

其中,TH1和TL1构成了T1,存放的是定时计数器T1的初值。TH0和TL0(分别是两个8位的寄存器)构成了T0定时计数器的初值存放的寄存器。这4个寄存器,在SFR当中都可以找到。

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第7张图片

  

然后再看,定时计数器T1可以对P3.5这个引脚上来的脉冲进行计数,就说它外联连接到了P3.5引脚上。如果你要是让这个T1工作在计数器方式,那么现在就要明确,计数器方式指的就是对外部引脚的脉冲计数。如果你让它工作在计数器方式的话,那么它会对P3.5引脚来的脉冲进行计数。

T0是对P3.4引脚来的脉冲进行计数,这是定时计数器,如果你要是让它工作在定时器方式的话,它就不理会T0和T1引脚的状态,直接对机器周期进行计数,每有一个机器周期来,它就自动的加一,这是这两个初始寄存器。

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第8张图片

再往下看,下面是TCON和TMOD,这两个是定时计数器的控制寄存器,正是通过TCON和TMOD来控制定时计数器的运行,然后TCON和TMOD又整体的反映了当前的T0和T1这两个定时计数器的工作状态。 CPU要给T0和T1写这些初值即从什么数开始记,并且要给TCON和TMOD下命令字,即告诉这两个定时计数器是如何工作。 然后,CPU开始查询它的标志位,就查询是不是溢出,如果查询到溢出了,证明这个定时计数器工作到达一定的时间了,到达你设定的时间了,它会产生溢出信号,那么这就是这个定时计数器它内部的结构框图。

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第9张图片

定时计数器的控制字

下面,我们再看一下定时计数器的控制字

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第10张图片

在这里,首先我们看一个TMOD叫做工作方式控制寄存器,它的字节地址是89H很显然,这个字节地址以9为结尾的,说明这个SFR是不可位寻址的。不可为寻指的就意味着对这个SFR下命令字的时候,只能是以字节的方式进行读,进行写,就是你对它下命令字的时候,只能是以一个字节8位整体的写给它,而不能像支持位寻址的那种可以某一位某一位的操作。

那么这八位分别对应的是什么?分别对应的是T0,低四位(右边四位)对应的是控制定时计数器T0的工作,高4位(左边四位)是控制的是T1的工作。

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第11张图片

 

然后再看第2个定时控制寄存器TCON。 它的字节地址是88H,那么因为它末位是8,所以这个定时计数器是可位寻址的。在这个SFR当中一共是有8位的信息,其中,低4位(右边四位)是跟中断有关的,且在定时计数器当中没有使用这四位,只使用了高4位

高四位当中TF1和TR1对应着管理定时计数器T1。 TF0和TR0对应着管理定时计数器T0。

那么这样的话,大家可以看到,对于一个定时计数器的管理,实际上总共就有这样的12个控制位,其中,这12个控制位又分别管理两个定时计数器,所以管理每一个定时计数器,只需要6个控制位就行了。

那么我们在这一章所学习的内容也就是围绕着这6个控制位,如何对这6个控制位来下命令字,控制它如何工作,然后,如何来读取当前的这个定时计数器的状态,是不是到达我设定的那个状态了,从哪去读,读完之后该如何操作?就是这一章所需要学习的内容。

复位之后,两个寄存机的状态,均为0 0,这是上电复位之后的状态。

下面我们看第一个控制计数器,叫做工作方式控制寄存器

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第12张图片

TMOD这个SFR是由8位构成的,我们只理解它其中的4位就可以了,因为它分别控制的是T1和T0。它们的控制意义是相同的。

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第13张图片

首先看这个GATE门控位。

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第14张图片

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第15张图片

D7这一位用来管理的是T1,D3一位也是gate位,它用来管理的是T0。 如果要是GATE=1的话(定时计数器T0和T1是否工作要受到外部引脚电平的控制), 受到哪个引脚的控制?是INT0,控制T0的运行,INT1控制T1的运行,INT0和INT1分别是51单片机外部的两个引脚(分别对应P3.2和P3.3这两个引脚),大家可以看一下它的这个引脚图的时候,能够看到这个INT0和INT1这两个引脚。

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第16张图片

GATE门控位的作用主要是用来测量在INT0或者INT1引脚上出现的正脉冲的宽度。 当你需要测量一个脉冲宽度的时候,需要使用到门控位,这一点要给大家牢牢记住。

就是你这一次使用定时计数器是在测量一个脉冲的宽度吗?是在测量一个正脉冲的宽度吗?如果是的话,就需要使用到门控位,如果不是的话,你就不用理会门控位,就让门控位无效就可以了。

门控位等于1的话表示的是,门控位有效就是表示的是它要测量这个正脉冲的宽度,测量一个脉冲的宽度了。 如果要是门控位为0的话,那么定时计数器的运行是不受外部引脚的控制的,就是自己就工作在自由的这种定时计数器的方式下,不需要不能去测量这个脉冲宽度,这一点大家要注意。 就是gate位的主要作用就是测量外部脉冲宽度,如果需要测量脉冲宽度,那你就要门控位为1,然后开始看一下如何测量脉冲宽度,在绝大多数条件下都是不需要测量,都是应用的时候不需要测量脉冲的宽度,所以就是工作在一般的定时计数器方式下就可以了,这是门控位。

下面看第二个控制位C/T位,C/T位,我们叫做计数器模式和定时器模式的选择位.

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第17张图片

所谓的计数器模式和定时器模式,就是指的是这样C/T=0的话为定时器模式, 那么内部计数器对晶振频率12分频后的脉冲计数,实际上,晶振频率12分频恰好就是机器周期,实际上就是对机器周期计数,每个机器周期计数值加1,如果选择12兆的晶振,那么计数频率就是一兆赫兹,因为一个机器周期是一微秒嘛,就每位一微秒计一个数,每一微秒计一个数,这是计数器模式,就是如果C/T=0的话,等于是这个定时计数器工作的时候,它选择是对内部的,对一个内部的机器周期进行计数,那就相当于是工作在定时器方式,计多少个数就表示多长时间。

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第18张图片

那么第二个,C/T=1的话,它表示的是设置为计数器模式,它开始对外部引脚上所来的这个脉冲进行计数,每出现一个下调沿它的那个计数器加1,计数值加1,这是这个C/T位的作用。

再看M1和M0的作用。

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第19张图片

M1和M0,它是工作方式选择位,分别对应的是这样的0 0,它选择的是方式0,工作方式0,对应的是定时计数器TL0中的低5位与TH中的8位构成一个13位的计数器,实际上,如果要是M1、M0为0 0的话,表示当前的定时计数器工作在13位方式下。 这13位是怎么样?怎么样得到的这个13位?比如说以T0为例,T0这个16位的定时计数器,它的初值是存放在哪?放在TH0和TL0当中,分别存放的是高低八位。 那么如果你要让这个T0工作在方式0的话,那么它相当于是什么?TL0当中只有5位参与计数, 高3位不参与计数,当这5位记满的时候,就会产生一个溢出信号,这个溢出信号就会产生一个溢出,溢出就会使得它高8位计数器加1,高八位计数加1,这样的话,等效起来看,就是只有高8位和低5位都参与了计数,在低八位这个寄存器当中,只有其中的5位参与计数,所以就是构成了一个13位的定时计数器。这是00方式。

如果要是M1M0为0 1的话,表示这个工当前的这个定时计数器是工作在方式1的,那也就是说,T0T1的TH0,TL0TH1,TL1分别对应的两个定时寄存器存放初值的位置,16位都参与计数,这个定时计数器是一个16位的定时计数器。

那么1 0是方式2,它表示的是常数自动重装入,是一个8位方式的定时计数器,

然后1 1是方式3,只有T0可以工作在方式3,它是分解成两个8位的计数器,如果工作在方式3的话,T1是停止计数,这一点要注意,就是定时计数器T1是没有方式3的,如果你给它设成方式3的话,它将停止计数。而T0,是有方式3,在方式3下,T0是分解成两个八位的定时计数器来进行工作。

那么至于这四种工作方式,我们在后面还要继续的介绍,还要详细的介绍,在这块,大家就是理解一下,了解一下51内部的定时计数器,它是有四种工作方式的,分别对应的是13位的定时计数器方式,16位的定时计数器方式,还有一个8位常数自动重装入的定时计数器方式,然后还有一个叫做只有T0所具有的方式3,就是分解成两个八位的定时计数器的方式。 这是这4种工作方式。

下面再看这个TCON,它只有四位参与对定时计数器的管理,分别对应的是TR0、TF0、TR1和TF1。

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第20张图片

那么我们看一下TF1位。

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第21张图片

TF1,也就是TCON当中的D7这一位,它有一个位,这一位有一个自己的名称叫做TF1。它表示的是T1计数器溢出标志位,如果要是T1这个计数器溢出了,那么这个TF1将被置1。当T1计数器溢出时,是由硬件置1,大家要注意,由硬件置1,所谓的硬件置1指的是什么意思?就是指的是如果要是这个T1定时计数器工作的时候真的产生了溢出,那么由这个SFR自动的把这一位置1。SFR是在监视这个定时计数器的运行,当它发现这个定时计数器溢出的时候,它会自动的把TF1这一位置1,TF1这一位置1表示T1定时计数器已经溢出了,这叫做硬件置1,是不需要CPU关于参与的,也不需要我们程序员参与的,不需要!它是由SFR自动监视这个T1的运行,发现T1出,就由SFR自动的把这一位写成1,自动的写成1,这叫硬件置1。 申请中断,这一位是一个中断源可以申请中断,如果要是进入中断服务程序的话,将被硬件自动清零,就是前面我们说过关于一些标志位的清除的问题,那么这个TF1,就是一个标志位,它反映的就是定时器的溢出的一个信号,那么我们每一次查询到这个溢出信号之后,就要及时的对它清零。 那么如果你要是用一个中断程序来响应这个定时计数器溢出事件的话,就是我编一个中断子程序来响应它的话。如果这个中端子程序真的被执行了,就是真正的进入到这个终端子程序当中去了,那么将由硬件,就是由CPU自动的把这个标志位给它清零,就是不需要你程序去干预,只要你进入到中断子程序,这个标志位就自动的被清零了。 这叫做硬件置1,硬件清零。

这里要提醒大家就是如果要是说这个定时器不是采用中断的方式去处理它,它溢出了,我不是靠中断子程序处理它,而是靠我自己编的一段程序处理它,就是不是放到中断里,就作为一般的一个程序来处理它的话,那么这个标志位,需要你用软件来清零,它就没有这个硬件清零这个功能了,只有进入到中断子程序当中去的时候,才能由硬件自动的对定时器的溢出标志为清零,这一点是需要大家注意的,就是在编写这个定时计数器程序的时候,要注意你是如何来处理这个定时计数器溢出事件的,如果要是用中断的方式来处理,那就是对这个溢出位,就不需要管理了,不需要管它了,用硬件自动清零,如果是采用一个自己的编辑段程序,用查询的方式来进行处理的,那就需要用软件来清零,我们在后面的编程举例当中,会给大家再练一下这方面的内容。

下面看TR1位,表示的是T1计数器的运行控制位。

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第22张图片

它有软件置1或者是清零,完全都是靠你的程序指令给它置1或者是清零,然后当GATE位为0时,就是说不需要门控位,不需要门控起作用的时候,那么TR1=1的话,就允许T1计数。如果TR1=0的话,就禁止T1计数,那么当门控位为1的时候,TR1=1,且IN N1=1,才允许T1计数。关于门控位的作用,我们在最后关于有一个专门的例子,就是用定时计数器来测量一个脉冲的宽度,在那一部分,我们再加深对gate位的理解。 在这里,大家对它的理解就是说我在一个正常使用定时计数器的情况下,Gate位都是设成0的,我不测量脉冲的宽度嘛,所以gate位都是为0的,那么在GATE位为0的情况下,如何控制一个定时计数器的启动和停止?它就是通过这个TR1这一位,如果要是说TR1这一位为1的话,那就是表示这个定时计数器开始工作。如果要是TR1=0的话,那我就是让它停止工作,就是这个定时计数器的工作启动还是停止的控制位,那么从这里大家可以看出TR1和TF1,恰好是一对。TR1负责启动它,如果它要是溢出的话,是由TF1来指示的,如果我想在运行当中,我想停止它的话,我可以让TR1在清零,让它停止运行,这就是对这个定时计数器的控制。

下面再看TF0这一位,它表示的是T0计数器溢出的标志位。

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第23张图片

它对应的是T0这个定时计数器,它的功能是跟TF1是相同的,只是控制的对象不同,然后TR0这一位是T0计数的运行控制位,它有软件置1或者清0,然后,如果TR0=1的话,表示的是启动T0定时计数器,如果要是TR0=0的话,表示的是停止T0定时计数器的工作,这就是这几个控制位的作用。

M1和M0工作方式选择位的四种工作方式

下面我们就对那4种工作方式分别的加以说明。

首先,我们看一下T1工作在方式0的时候的等效框图,

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第24张图片

当T1工作在方式0的时候,就是等效的M1、M0这两位对应的是00和01这两种方式,就是00和01分别对应的是T1工作的方式0或者是方式1。这个框图画的是一个13位的定时计数器的一个等效的控制逻辑图。

如果是工作在方式0。这个计数器是TL这一块是5位参与计数,然后TH这一块是8位参与计数,所以总共是13位的。

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第25张图片

如果要是方式一的话,那么低位是8位,高位也是8位,总共是16位的定时计数器。

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第26张图片

这就是方式0和方式一个区别,它们两个唯一一个区别就是定时计数器放初值这块(T0和T1),它是16位都参与计数,还是只有其中的13位参与计数,这是我们的唯一的一个区别,剩下的控制位的功能都是相同的,各个控制位的说明,以及如何使用都是相同的。

好了我们首先来看一下C/T位。它是选择脉冲源的,我们叫做脉冲源的选择位,又叫做定时计数工作方式选择位。

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第27张图片

那么大家可以看到,如果要是C/T=0的话,开关是打到上面的,表示的是对振荡器除12的信号进行计数,就把震荡器除12,换句话说就是把这个机器周期的信号给它引入到了这个定时计数器上对机器周期进行计数。 如果要是C/T=1的话,等于是动作开关打到下面这个位置,它对T1引脚开始计数。它是下调沿计数的,每出现一个下调沿,计数器的内容加1,那么这就是C/T控制位,跟前面的说明与对照,大家就会以更明确C/T如何去使用它。

那么如果你要是想让这个定时计数器对机器周期计数的话,那你就应该让C/T这一位为0,就是写这一位的时候,给它写成0,如果你要是对想对外部引脚来的脉冲信号系数的话,那你就应该让这一位写控制信息的时候,写成1,那就可以了。

下面我们再看第2个控制位,关于gate位 和INT1引脚上的信息。

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第28张图片

首先,我们看一下,门控位GATE在什么情况下不起作用? 我们说过了,说我如果不对一个闸门信号,就是不测量脉冲宽度的话,那么我就不需要门控位,那么门控位不起作用的是当门控位为0的时候,它是不起作用的,

那么我们看如果门控位为0的时候,这里面的控制信息是怎么样的?我们看一下。 门控位为0,在单片机内部,等效的是门控位的后面接了一个非门。 非门的输出这一点就是为1。在单片机内部,这个非门的输出又接了一个或门上。对于一个或门,如果输入是1的话,它的输出恒为1,等于是或门不起作用,所以这个A点的信息,是始终为1,或门输出始终为1,也就是说INT1引脚根本就不起作用,也不管你是0还是1,这个或门输出这一块,都是为1的。

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第29张图片

A后接的是一个与门,这个TR1这一位要和A的信息进行“与”,“与”的结果怎么样输出到这个B点这块来控制一个开关的通断。

从这里就可以看出来说,因为A点这个是恒为1(在门控位为0的时候),如果要是TR1这一位如果为1的话那么这个门的输出就是为1的控制这个开关接通

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第30张图片

那么接通的结果是什么?就是前面这个脉冲信号,会进入到计数器当中去,开始在这个计数器当中就开始加1加1,开始计数了。 ,由此可见,就是当你选择好了C/T这个控制位,或者是对机器周期,或者是对T1引脚,就是或者写0或者写1,给它写好控制信息之后,那么这个定时器能不能工作就取决于谁?就完全取决于TR1

如果T1为1的话,门输出就是1,那么就这个脉冲就被引入到了定时计数器上,那么这个定时计数器,就开始工作如果这个是为0的话,门输出也是为0这个开关就处在打开状态,那么这个脉冲,就不会进入到这个定时计数器内部去,所以就不会计数,就不会计数

所以我们说,TR位,叫做这个启动控制位/启停控制位就是如果写1的话,就开始工作,就开始计数,就有脉冲进来,如果写0的话,脉冲就进不来,它就不会计数了,就停在那,所以叫做启停控制位。

那么这个脉冲进入到这个T1之后,就开始进行这种加一的操作,每来一个脉冲的加一,每来一个脉冲的加一,当它产生溢出的时候,就比如说对于一个16位的定时计数器,到FFFF,然后又多一个脉冲,变成0000,就叫溢出。大家一定要记住,溢出是什么概念?是从FFFF再加1翻转成0000的时候就叫溢出,那么当计数的值产生溢出的时候怎么样?TF1被置1,它就是一个表示溢出的一个标志位。

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第31张图片

那么从这里,大家就可以看清楚关于TR1和C/T这两个控制位的一个作用,以及TF1的一个作用。

下面我们再看一下关于门控位的问题。 刚才我们所说明的一种情况,都是门控位为0的情况,就是我在这个记录的过程当中,在这个定时计数器工作的过程当中,我是不需要用它来测量一个脉冲宽度的时候,我就让没控位为0,这一点大家作为初学者一定牢牢记住,我们一定把这个定值出器的使用分成两大种情况,一种情况是测量脉冲宽度,另一种情况就是作为非测量脉冲宽度来使用。一定要这么来区分,测量脉冲宽度的时候就要使用到冷控位,不测量脉冲宽度就不使能控位。

下面我们就看一下什么,我现在如果要是说需要测量脉冲宽度的话,那么就要把这个门控位,给它设成1。 控位为1的时候,大家看一下它的非门的输出就为0,意味着释放了对或门的控制权。对或门来说,只有输入为1的时候才能够封堵或门,当输入为0的时候,它是释放了或门的输入,即对或门的这种控制。那么或门的输出取决于谁了?取决于它的另一个输入端,就是INT1引脚,取决于单片机的这个引脚上来的电平信号。

如果要是说这个引脚上来的电平信号是高电平的话,那么或门输出怎么样?就是高电平。如果要是这个引脚来的是低电平的话,那么或门输出怎么样? 就是低电平。

就是说,这个或门的输出就是完全取决于INT1引脚上所来的这个电平信号。

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第32张图片

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第33张图片

、那么我们看一种情况,当这个门控位来的是1的时候,非门输出是0,然后当INT1引脚上输入的也是0的话,或门的输出也是为0的,那么这样的话,这个与门的输出怎么样也是为0的,那这个与门所控制的这个开关就处于打开状态。

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第34张图片

这时候,无论是机器周期也好,外部脉冲也好,都不会进入到这个定时计数器内部,就是说定时计数器不会工作的。

那么假设这时候TR1也为1,就设成TR1为启动位,就是人为的给它启动,启动它之后,这时候会计数吗?答案是这个定时计数器它还是不会计数的。因为即使你这一位为1了,但是这A点的输入还是为0的,所以与门的输入仍然是为0,所以这个定时计数器还是不会工作的,脉冲还是不会传送到定时计数器当中去,就是前面这些技术脉冲源不会进入到定时计数上去,就开关仍然是处在打开状态。

那么当这个INT1引脚变成高电平1的时候,那么这个或门的输出为1,这个与门的输出就取决于什么了?就取决于TR1是否为1。如果TR1这一时刻也恰好为1的话,这时候就开始计数了,如果TR1这位为0的话,它仍然不计数。

那么所以我们在前面介绍门控位的时候,有过这样一句话,就说如果门控位为1的话,控制这个定时计数器工作的是两个关系,是两个信号来控制它一个信号是TR1这一位的状态。另一个信号,就是INT1引脚的状态,它必须是在INT1引脚出现高电平,在这个期间,同时,在这个期间怎么样?TR1这一位也为1,当这两个条件都满足的时候,这个定时计数器工作。 这就是门控位的一个作用,它具有这种特性。

就是说门控位一个什么作用?如果要是让门控位为1的话,那么OK,定时计数器的工作是取决于两个条件,一个条件是必须INT1这个引脚来高电,第二个条件就是必须TR启动位必须为高电平才能够控制它工作。

总结

那么我如何利用这个门控位实现一个脉冲宽度的测量,就是我们后面例子当中要看的这一块,我也是反复给大家强调,就是这一部分,我们在学习的时候,一定要区别成两种情况来看待,一种是测量脉冲宽度,那我就让门控位为1,另一种是不测量脉冲宽度,我就让门控为0,那么在门控位为0的时候,定时计数器是否工作就取决于,取决于TR1这一位的状态。 然后,我到底是工作在定时器方式还是工作在计数器方式,就取决于C/T这一位的状态,然后我这个定时计数器工作是不是溢出,就取决于就通过查询这个TF1位就知道了。

那么通过这个图大家应该有一个比较清楚的认识。

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第35张图片

这是T1工作在这个方式0的时候的等效框图。

下面我们就看一下关于T1的方式0和方式1的一个说明,因为方式0和方式1它们两个都是一致的,只不过是记录定时计数器工作时候它的位数不一样,方式0是13位的方式,方式一是16位的方式,剩下它们的控制位的基本的使用情况,如何使用,它的状态的显示,就反映的是是不是溢出等等,这些控制位的作用都是相同的,只是这个定时计数器的位数不一样,所以在说明它工作方式的时候,我们都是给它放到一起来说明的,我们看一下,这实际上就是我刚才所讲的那些内容的一个总结。

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇1)_第36张图片

就是定时计数器T1工作在方式0时,是13位的计数器方式,它是由TL1的低5位和TH1的8位所构成,一定要注意是TL这个低8位当中的低5位和高8位所构成的这样的一个13位定时计数器。 然后TL1低5位溢出,向TH1进位,TH1计数溢出将置位TCON当中的溢出标志为TF1。

这就是这个定时计数器,它工作在方式0的时候的一个简单说明,那它是一个13位的方式,是由TL当中的低5位和TH这8位构成一个13位的定时计数器,然后当低5位每溢出一位,就是每计32个脉冲,就是每到了32个脉冲就会向TH这块进一位,因为5位(11111)对应的是32这个数,那么当高8位也溢出的时候,就是整个13位都溢满了的时候,会给TF位置1。

然后贝GATE位的状态决定定时计数器运行控制取决于TR1一个条件还是TR1和INT1引脚这两个条件。刚才给大家介绍过了,当GATE位等于0的时候,A点就刚才所看到那个逻辑图当中的A点,电位恒为1,那么只要TR1为1,那么定时计数器就开始计数。

那么GATE位等于1的时候怎么样?必须是T1=1,而且INT1也等于1,这两个条件都满足的时候,才允许定时计数器计数。

在方式1的时候,T1定时计数器当中低8位都参与计数,因而是属于构成一个16位的定时计数器,其控制方式、等效电路与方式0完全相同,它的各个位,每一位对整个这个定时计数器的控制,是跟13位都是相同的,只不过是它的控制位数不一样而已,一个是13位的,一个是16位的,这一点,大家要加以区分。

本节就先写到这儿,下一节继续学习定时器相关知识。

如有问题课可评论区留言或者私信,谢谢!

你可能感兴趣的:(51单片机学习笔记,单片机,学习,笔记)