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

目录

51内部定时计数器概述

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

定时计数器的结构框图

定时计数器的控制字

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

总结


51内部定时计数器概述

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

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的最基本定义。

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

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

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

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

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

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

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

那么如果要是说这个计数器对一个具有精确的周期的这样的一个脉冲计数的话,结果会什么样,很显然所记录得到的这些脉冲的个数就反映了一个精确的时间。因为脉冲的周期是固定的,每记录一个脉冲,就意味着有这样的一个时间经过了,比如说如果这个脉冲的这个周期,是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位。

定时计数器的结构框图

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

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

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

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

  

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

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

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

定时计数器的控制字

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

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

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

 

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

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

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

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

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

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

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

首先看这个GATE门控位。

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

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

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

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

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

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

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

再看M1和M0的作用。

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。

那么我们看一下TF1位。

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或者是清零,完全都是靠你的程序指令给它置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计数器溢出的标志位。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

那么接通的结果是什么?就是前面这个脉冲信号,会进入到计数器当中去,开始在这个计数器当中就开始加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,它就是一个表示溢出的一个标志位。

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

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

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

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

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

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

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

那么假设这时候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位就知道了。

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

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

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

就是定时计数器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位的,这一点,大家要加以区分。

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/356553.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

4秒读取50w行Excel数据

4秒读取50w行Excel数据 文章比较了几种常用的读取Excel的方法,最终发现rust库Calamine的速度最快,可以在4秒内读取50w行excel数据。 原文:Fastest Way to Read Excel in Python:https://hakibenita.com/fast-excel-python 我们在…

React16源码: React中处理LegacyContext相关的源码实现

LegacyContext 老的 contextAPI 也就是我们使用 childContextTypes 这种声明方式来从父节点为它的子树提供 context 内容的这么一种方式遗留的contextAPI 在 react 17 被彻底移除了,就无法使用了那么为什么要彻底移除这个contextAPI的使用方式呢?因为它…

openGauss学习笔记-209 openGauss 数据库运维-常见故障定位案例-共享内存泄露问题

文章目录 openGauss学习笔记-209 openGauss 数据库运维-常见故障定位案例-共享内存泄露问题209.1 共享内存泄露问题209.1.1 问题现象209.1.2 原因分析209.1.3 处理方法 openGauss学习笔记-209 openGauss 数据库运维-常见故障定位案例-共享内存泄露问题 209.1 共享内存泄露问题…

【Web前端实操18】粘性定位——即固定顶层内容,可以继续滚动,但是顶层内容固定,不随着一起滚动

粘性定位 1、了解 可以被认为是相对定位和固定定位的混合。元素在跨越特定阈值前为相对定位,之后为固定定位。粘性定位是指网页或移动应用程序中的一种特性,即当用户滚动页面时,某个元素能够保持在屏幕上特定位置不动,直到用户滚动到达一定位置或进行特定操作。这个特性可…

Qt无边框窗口拖拽和阴影

先看下效果: 说明 自定义窗口控件的无边框,窗口事件由于没有系统自带边框,无法实现拖拽拉伸等事件的处理,一种方法就是重新重写主窗口的鼠标事件,一种时通过nativeEvent事件处理。重写事件相对繁琐,我们这里推荐nativeEvent处理。注意后续我们在做win平…

2.3_8 多生产者-多消费者问题

2.3_8 多生产者-多消费者问题 实现思路 semaphore mutex1; //实现互斥访问盘子(缓冲区) semaphore apple0; //盘子中有几个苹果 semaphore orange0; //盘子中有几个橘子 semaphore plate 1; //盘子中还可以放多少个水果dad(){while(1){准备一个苹果;P(plate);P(mutex);把苹果放…

网络相关知识

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 目录 一、导读二、概览三、相关工具3.1 network profiler/ In…

休息日的思考与额外题——链表

文章目录 前言链表知识点 一、 92. 反转链表 II二、21. 合并两个有序链表总结 前言 一个本硕双非的小菜鸡,备战24年秋招,计划二刷完卡子哥的刷题计划,加油! 二刷决定精刷了,于是参加了卡子哥的刷题班,训练…

构建知识图谱:从技术到实战的完整指南

目录 一、概述二、知识图谱的基础理论定义与分类核心组成历史与发展 三、知识获取与预处理数据源选择数据清洗实体识别 四、知识表示方法知识表示模型RDFOWL属性图模型 本体构建关系提取与表示 五、知识图谱构建技术图数据库选择Neo4jArangoDB 构建流程数据预处理实体关系识别图…

详谈掼蛋两大类牌型

掼蛋中的10种牌型,总体上可以分为炸弹牌型系列和普通牌型两大类。炸弹牌型系列包括天王炸、同花顺和多头炸3大类;普通牌型系列包括单张、对子、三同张、三带二、顺子、三连对、连三张等7种牌型。 一、两类牌型的区别 炸弹牌型系列和普通牌型系列两大类有…

信创条件下的运维思考-驱动数字化转型,塑造企业未来之篇章

2024-01-14 12:59 发布于:山西省 运维信创:驱动数字化转型,塑造企业未来之篇章 随着信息技术的迅猛发展,数字化转型已成为企业生存和发展的必由之路。在数字化转型的过程中,运维作为企业IT的重要组成部分&#xff…

【安装指南】HBuilder X 下载、安装详细教程

目录 🌺1. 概述 🌻2. HBuilder X 安装包下载 🌼3. 安装详细教程 🌺1. 概述 HBuilder X 是一款由DCloud开发的基于Electron框架的集成开发环境(IDE),主要用于Web和移动应用程序的开发。以下是…

【自媒体实战】——公众号排版工具调研

公众号排版工具 壹伴 地址:https://yiban.io/ 网站 壹伴 (https://yiban.io/) 主要提供一个高效的微信编辑器,专门服务于公众号运营者。它包括了一系列工具和功能,旨在帮助用户更便捷地进行文章排版、图片编辑、素材寻找和消息回复等操作。…

web渗透测试-Server2225-(环境+解析)

1、访问目标IP,打开第1题,根据页面提示,将获取的flag提交。提交格式:flag{xxx}(提交花括号里面的字段) 给出了如上代码,很明显,flag在flag.php文件内。 REQUEST方法既可以接受GET方法,也可以接受POST方法,方便起见,我们选择GET方法。 eval函数 eval() 函数把字符串…

如何实现无公网ip远程SSH连接家中本地的树莓派

文章目录 如何通过 SSH 连接到树莓派步骤1. 在 Raspberry Pi 上启用 SSH步骤2. 查找树莓派的 IP 地址步骤3. SSH 到你的树莓派步骤 4. 在任何地点访问家中的树莓派4.1 安装 Cpolar4.2 cpolar进行token认证4.3 配置cpolar服务开机自启动4.4 查看映射到公网的隧道地址4.5 ssh公网…

防御保护第四次作业

防火墙的智能选路 就近选路 --- 我们希望在访问不同运营商的服务器是,通过对应运营商的链路。这样可以高 通信效率,避免绕路。 策略路由 -- PBR 传统的路由,仅基于数据包中的目标IP地址查找路由表。仅关心其目标,所以&#…

大模型:合成数据、安全挑战与知识注入

在如今这个快速发展的AI时代,大语言模型(LLM)的研究论文数量呈指数级增长,几乎到了人力无法一一阅读和消化的地步。然而,对这些研究成果的归纳和总结至关重要,因为它们描绘了LLM领域的未来发展轮廓。在近期…

变相体罚学生包括什么

有时候由于种种原因,一些老师可能会采用变相体罚的方式来对待学生,不仅会伤害学生的身心健康,还会影响学生的学习积极性和成绩。什么是变相体罚呢? 变相体罚是指不采用直接的身体惩罚方式,而是采用其他方式来惩罚学生…

3、css设置样式总结、节点、节点之间关系、创建元素的方式、BOM

一、css设置样式的方式总结: 对象.style.css属性 对象.className ‘’ 会覆盖原来的类 对象.setAttribut(‘style’,‘css样式’) 对象.setAttribute(‘class’,‘类名’) 对象.style.setProperty(css属性名,css属性值) 对象.style.cssText “css样式表” …

JMeter性能测试实战

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…