51单片机——定时器计数器-pg电子平台

大家好!今天让小编来大家介绍下关于51单片机——定时器计数器的问题,以下是酷知号的小编对此问题的归纳整理,让我们一起来看看吧。

目录

1.概述

2.定时器/计数器

2.1 定时功能

2.2.1 定时功能的用法

2.1.2 任意定时方法

2.2 计数功能

2.2.1 计数功能的用法

2.2.2 任意计数方法

2.3 定时器/计数器的结构原理

2.3.1 定时器/计数器的结构

2.3.2 定时器/计数器的工作原理

2.4 定时器/计数器的控制寄存器与四种工作方式

2.4.1 定时器/计数器的控制寄存器tcon

2.4.2 定时器/计数器工作方式控制寄存器tmod

2.4.3 定时器/计数器的工作方式


        8051单片机内部有t0和t1两个定时器/计数器。它们既可用作定时器,也可用作计数器,可以通过编程来设置其使用方法。

2.1 定时功能

2.2.1 定时功能的用法

        当定时器/计数器用作定时器时,可以用来计算时间。如果要求单片机在一定的时间后产生某种控制,可将定时器/计数器设为定时器。单片机定时器/计数器的定时功能用法如图1所示。

图1 定时器/计数器的定时功能用法  

        要将定时器/计数器 t0设为定时器,实际上就是将定时器/计数器与外部输入断开,而与内部信号接通,对内部信号计数来定时。单片机的时钟振荡器可产生12mhz的时钟脉冲信号,经12分频后得到1mhz的脉冲信号,1mhz信号每个脉冲的持续时间为1μs,如果定时器t0对1mhz的信号进行计数,若从0计到65536,将需要65536μs,也即65.536ms。65.536ms后定时器计数达到最大值,会溢出而输出一个中断请求信号去中断系统,中断系统接受中断请求后,执行中断子程序,子程序的运行结果将p1.0端口置“0”,该端口外接的发光二极管点亮。

2.1.2 任意定时方法

        在图1中,定时器只有在65.536ms 后计数达到最大值时才会溢出,如果需要不到65.536ms定时器就产生溢出,比如1ms后产生溢出,可以对定时器预先进行置数。将定时器初始值设为64536,这样定时器就会从64536开始计数,当计到65536时,定时器定时时间就为1ms而产生一个溢出信号。

2.2 计数功能

2.2.1 计数功能的用法

        当定时器/计数器用作计数器时,可以用来计数。如果要求单片机计数达到一定值时产生某种控制,可将定时器/计数器设为计数器。单片机定时器/计数器的计数功能用法如图2所示。

 图2 定时器/计数器的计数功能用法

        用编程的方法将定时器/计数器t0设为一个16位计数器,它的最大计数值为216=65536。t0端(即p3.4引脚)用来输入脉冲信号。当脉冲信号输入时,计数器对脉冲进行计数,当计到最大值65536时,计数器溢出,会输出一个中断请求信号到中断系统,中断系统接受中断请求后,执行中断子程序,子程序的运行结果将p1.0端口置“0”,该端口外接的发光二极管点亮。

2.2.2 任意计数方法

        在图2中,只有在t0端输入65536个脉冲时,计数器计数达到最大值才会溢出,如果希望输入100个脉冲时计数器就能溢出,可以在计数前对计数器预先进行置数,将计数器初始值设为65436,这样计数器就会从65436开始计数,当输入100个脉冲时,计数器的计数值就达到65536而产生一个溢出信号。

2.3 定时器/计数器的结构原理

2.3.1 定时器/计数器的结构

        8051单片机内部定时器/计数器的结构如图3所示。单片机内部与定时器/计数器有关的部件主要有以下几种:

        ① 两个定时器/计数器(t0和 t1)。每个定时器/计数器都是由两个8位计数器构成的16位计数器。

        ② tcon寄存器。tcon为控制寄存器,用来控制两个定时器/计数器的启动/停止。

        ③ tmod寄存器。tmod为工作方式控制寄存器,用来设置定时器/计数器的工作方式。两个定时器/计数器在内部还通过总线与cpu连接,cpu可以通过总线对它们进行控制。

 图3 定时器/计数器的结构

2.3.2 定时器/计数器的工作原理

        由于定时器/计数器是在寄存器tcon和tmod的控制下工作的,要让定时器/计数器工作,必须先设置寄存器 tcon 和 tmod(可编写程序来设置)。单片机内部有2个定时器/计数器,它们的工作原理是一样的,这里以定时器/计数器t0为例进行说明。

1.定时器/计数器t0用作计数器

        要将定时器/计数器t0当作计数器使用,须设置寄存器tcon和tmod,让它们对定时器/计数器t0进行相应的控制,然后定时器/计数器t0才开始以计数器的形式工作。

        (1)寄存器tcon和tmod的设置将t0用作计数器时tcon、tmod寄存器的设置内容主要有:

        ① 将寄存器tmod的c/t位置“1”,如图8-3所示,该位发出控制信号让开关s0置“1”,定时器/计数器t0与外部输入端t0(p3.4)接通。

        ② 设置寄存器tmod的m0、m1位,让它控制定时器/计数器t0的工作方式,比如让m0=1、m1=0,可以将定时器/计数器t0设为16位计数器。

        ③ 将寄存器tcon的tr0位置“1”,启动定时器/计数器t0开始工作。

        (2)定时器/计数器t0的工作过程定时器/计数器t0用作计数器的工作过程有以下几步:

        ① 计数。定时器/计数器t0启动后,开始对外部t0端(p3.4)输入的脉冲进行计数。

        ② 计数溢出,发出中断请求信号。当定时器/计数器t0计数达到最大值65536时,会溢出产生一个信号,该信号将寄存器tcon的tf0位置“1”,寄存器tcon立刻向cpu发出中断请求信号,cpu便执行中断子程序。

2.定时器/计数器t0用作定时器

        要将定时器/计数器t0当作定时器使用,同样也要设置寄存器tcon和tmod,然后定时器/计数器t0才开始以定时器形式工作。

        (1)寄存器tcon和tmod的设置将t0用作定时器时tcon、tmod寄存器的设置内容主要有:

        ① 将寄存器tmod的c/t位置“0”,如图8-3所示,该位发出控制信号让开关s0置“2”,定时器/计数器t0与内部振荡器接通。

        ② 设置寄存器 tmod 的 m0、m1位,让它控制定时器/计数器 t0的工作方式,如让m0=0、m1=0,可以将定时器/计数器t0设为13位计数器。

        ③ 将寄存器tcon的tr0位置“1”,启动定时器/计数器t0开始工作。

        (2)定时器/计数器t0的工作过程定时器/计数器t0用作定时器的工作过程有以下几步:

        ① 计数。定时器/计数器t0启动后,开始对内部振荡器产生的信号(要经12分频)输入的脉冲进行计数。

        ② 计数溢出,发出中断请求信号。定时器/计数器t0对内部脉冲进行计数,由0计到最大值8192(213)时需要8.192ms的时间,8.192ms后定时器/计数器t0会溢出而产生一个信号,该信号将tcon寄存器的tf0位置“1”,tcon寄存器马上向cpu发出中断请求信号,cpu便执行中断子程序。

2.4 定时器/计数器的控制寄存器与四种工作方式

        定时器/计数器是在tcon寄存器和tmod寄存器的控制下工作的,设置这两个寄存器相应位的值,可以对定时器/计数器进行各种控制。

2.4.1 定时器/计数器的控制寄存器tcon

        tcon寄存器的功能主要是接收外部中断源(int0、int1)和定时器/计数器(t0、t1)送来的中断请求信号,并对定时器/计数器进行启动/停止控制。tcon的字节地址是88h,它有8位,每位均可直接访问(即可位寻址)。tcon的字节地址、各位的位地址和名称功能如图4所示。

图4 tcon寄存器的字节地址、各位的位地址和名称功能

        tcon寄存器的各位功能在前面已介绍过,这里仅对与定时器/计数器有关的位进行说明。

        ① tf0位和tf1位:分别为定时器/计数器0和定时器/计数器1的中断请求标志位。当定时器/计数器工作产生溢出时,会将tf0或tf1位置“1”,表示定时器/计数器t0或t1有中断请求。

        ② tr0和tr1:分别为定时器/计数器0和定时器/计数器1的启动/停止位。在编写程序时,若将tr0或tr1设为“1”,那么t0或t1定时器/计数器开始工作;若设置为“0”,t0或t1定时器/计数器则会停止工作。 

2.4.2 定时器/计数器工作方式控制寄存器tmod

        tmod寄存器的功能是控制定时器/计数器t0、t1的功能和工作方式。tmod寄存器的字节地址是89h,不能进行位操作。在上电(给单片机通电)复位时,tmod寄存器的初始值为00h。tmod的字节地址和各位名称功能如图5所示。

 图5 tmod的字节地址和各位名称功能

        在tmod寄存器中,高4位用来控制定时器/计数器t1,低4位用来控制定时器/计数器t0,两者对定时器/计数器的控制功能一样,下面以tmod寄存器高4位为例进行说明。

        ① gate位:门控位,用来控制定时器/计数器的启动模式。当gate=0时,只要tcon寄存器的tr1位置“1”,就可启动t1开始工作;当gate=1时,除了需要将 tcon 寄存器的 tr1 位置“1”外,还要使引脚为高电平,才能启动t1工作。

        ② 位:定时、计数功能设置位。当时,将定时器/计数器设置为定时器工作模式;当时,将定时器/计数器设置为计数器工作方式。

        ③ m1、m0位:定时器/计数器工作方式设置位。m1、m0位取不同值,可以将定时器/计数器设置为不同的工作方式。tmod寄存器高4位中的m1、m0用来控制t1的工作方式,低4位中的m1、m0用来控制t0的工作方式。m1、m0位不同取值与定时器/计数器工作方式的关系见表1。

表1 tmod寄存器的m1、m0位值与定时器/计数器工作方式

2.4.3 定时器/计数器的工作方式

        在tmod寄存器的m1、m0位的控制下,定时器/计数器可以工作在4种不同的方式下,不同的工作方式适用于不同的场合。

1.方式0

        当m1=0、m0=0时,定时器/计数器工作在方式0,它被设成13位计数器。在方式0时,定时器/计数器由th、tl两个8位计数器组成,使用th的8位和tl的低5位。

        (1)定时器/计数器工作在方式0时的电路结构与工作原理

        定时器/计数器t0、t1工作在方式0时的电路结构与工作原理相同。以t0为例,将tmod寄存器的低4位中的m1、m0位均设为“0”,t0工作在方式0。定时器/计数器t0工作在方式0时的电路结构如图6所示。

图6 定时器/计数器t0工作在方式0时的电路结构 

        当t0工作在方式0时,t0是一个13位计数器(th0的8位 tl0的低5位)。位通过控制开关s1来选择计数器的计数脉冲来源。当时,计数脉冲来自单片机内部振荡器(经12分频);当时,计数脉冲来自单片机t0引脚(p3.4引脚)。gate位控制t0的启动方式。gate位与引脚、tr0位一起经逻辑电路后形成con电平,再由con电平来控制开关s2的通断。当con=1时,s2闭合,t0工作;当con=0时,s2断开,t0停止工作(s2断开后无信号送给t0)。

        当gate=0时,con的值与tr0的值一致,tr0可直接控制t0的启动/停止。

        当gate=1时,con 的值由 tr0、两个值决定,其中tr0的值由编程来控制(软件控制),而的值由外部引脚的电平控制,只有当它们的值都为“1”时,con的值才为“1”,定时器/计数器t0才能启动。 

        (2)定时器/计数器初值的计算若定时器/计数器工作在方式0,当其与外部输入端(t0引脚)连接时,可以用作13位计数器;当与内部振荡器连接时,可以用作定时器。

        ① 计数初值的计算。

        当定时器/计数器用作13位计数器时,它的最大计数值为8192(),当t0引脚输入8192个脉冲时,计数器就会产生溢出而发出中断请求信号。如果希望不需要输入8192个脉冲,计数器就能产生溢出,可以给计数器预先设置数值,这个预先设置的数值称为计数初值。

       在方式0时,定时器/计数器的计数初值可用下式计算:

        计数初值=−计数值

        比如希望输入1000个脉冲计数器就能产生溢出,计数器的计数初值应设置为7192 (8192−1000)。

        ② 定时初值的计算。

        当定时器/计数器用作定时器时,它对内部振荡器产生的脉冲(经12分频)进行计数,该脉冲的频率为fosc/12,脉冲周期为12/fosc,定时器的最大定时时间为·12/fosc,若振荡器的频率fosc为12mhz,定时器的最大定时时间为8192μs。如果不希望定时这么长,定时器就能产生溢出,可以给定时器预先设置数值,这个预先设置的数值称为定时初值。

        在方式0时,定时器/计数器的定时初值可用下式计算:

        定时初值=−定时值=−t·fosc/12

        比如单片机时钟振荡器的频率为12mhz(即12×106hz),现要求定时1000μs(即1000 ×10−6s)就能产生溢出,定时器的定时初值应为

定时初值=−t·fosc/12=8192−1000×10−6×12×106/12=7192

2.方式1

        当m1=0、m0=1时,定时器/计数器工作在方式1,它为16位计数器。除了计数位数不同外,定时器/计数器在方式1的电路结构与工作原理与方式0完全相同。定时器/计数器工作在方式1时的电路结构(以定时器/计数器t0为例)如图7所示。

        定时器/计数器工作在方式1时的计数初值和定时初值的计算公式分别如下:

计数初值=−计数值

定时初值=−定时值=−t·fosc/12

 图7 定时器/计数器在方式1时的电路结构

3.方式2

        定时器/计数器工作方式0和方式1时适合进行一次计数或定时,若要进行多次计数或定时,可让定时器/计数器工作在方式2。当m1=1、m0=0时,定时器/计数器工作在方式2,它为8位自动重装计数器。定时器/计数器工作在方式2时的电路结构(以定时器/计数器t0为例)如图8所示。

图8 定时器/计数器t0在方式2时的电路结构

        工作在方式2时,16位定时器/计数器t0分成th0、tl0两个8位计数器,其中tl0用来对脉冲计数,th0用来存放计数器初值。在计数时,当tl0计数溢出时会将tcon寄存器的tf0位置“1”,同时也控制th0重装开始,将th0中的初值重新装入tl0中,然后tl0又开始在初值的基础上对输入脉冲进行计数。

        定时器/计数器工作在方式2时的计数初值和定时初值的计算分别如下:

计数初值=−计数值

定时初值=−定时值=−t·fosc/12 

4.方式3

        定时器/计数器t0有方式3,而t1没有(t1只有方式0~2)。当tmod寄存器低4位中的m1=1、m0=1时,t0工作在方式3。

        在方式3时,t0用作计数器或定时器。

        (1)t0工作在方式3时的电路结构与工作原理

        在方式3时,定时器/计数器t0用作计数器或定时器,在该方式下t0的电路结构如图9所示。

图9 t0工作在方式3时的电路结构

        在方式3时,t0被分成tl0、th0两个独立的8位计数器,其中tl0受t0的全部控制位控制(即原本控制整个t0的各个控制位,在该方式下全部用来控制t0的tl0计数器),而th0受t1的部分控制位(tcon的tr1位和tf1位)控制。

        在方式3时,tl0既可用作8位计数器(对外部信号计数),也可用作8位定时器(对内部信号计数);th0只能用作8位定时器,它的启动受tr1的控制(tcon的tr1位原本用来控制定时器/计数器t1)。当tr1=1时,th0开始工作,当tr1=0时,th0停止工作,当th0计数产生溢出时会向tf1置位。

        (2)t0工作在方式3时t1的电路结构与工作原理

        当t0工作在方式3时,它占用了t1的一些控制位,此时t1还可以工作在方式0~2(可通过设置tmod寄存器高4位中的m1、m0的值来设置),t1在这种情况下一般用作波特率发生器。当t0工作在方式3时,t1工作在方式1和方式2的电路结构分别如图10(a)、(b)所示。

 图10 t0在方式3时t1工作在方式1和方式2的电路结构

        图10(a)是t0在方式3时t1工作在方式1(或方式0)时的电路结构。在该方式下,t1是一个16位计数器,由于tr1控制位已被借用来控制t0的高8位计数器th0,所以t1在该方式下无法停止,一直处于工作状态,另外由于tf1位也借给了th0,所以t1溢出后也不能对tf1进行置位产生中断请求信号,t1溢出的信号只能输出到串行通信口,此方式下的t1为波特率发生器。

        图10(b)是t0在方式3时t1工作在方式2时的电路结构。在该方式下,t1是一个8位自动重装计数器,除了具有自动重装载功能外,其他与方式1相同。 

以上就是小编对于51单片机——定时器计数器问题和相关问题的解答了,51单片机——定时器计数器的问题希望对你有用!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文链接:https://www.andon8.com/456922.html

网站地图