单片机原理及应用:定时器与计数器中断

发布时间:2024年01月11日

时间概念

中断结构

引脚?

TCON

TMOD

IE

IP


时间概念

在一般单片机中,有2个16位可编程的硬件计数模块T0和T1,我们称其为计数器或定时器,顾名思义,该模块可以实现定时和计数两种功能,其功能由软件控制和切换。实质这个定时器/计数器就是一个累加计数器,定时器的累加信号是由单片机内部振荡器的12分频信号产生,每过一个机器周期,定时器就加1,直至计满溢出结束;计数器就是对来自单片机外部的事件进行计数,外部计数事件由脉冲引入,单片机的P3.4(T0)和P3.5(T1)为外部计数脉冲输入端了,外部计数脉冲的频率不能高于晶振频率的1/24。

在上文中出现了几个时间概念,如时钟周期、晶振频率等,下面是这些概念的解释:

  • 晶振具有压电效应,即在晶片两极外加电压后晶体会产生变形,反过来如外力使晶片变形,则两极上金属片又会产生电压。如果给晶片加上适当的交变电压,晶片就会产生谐振,利用该特性,晶振可以提供较稳定的脉冲,我们将这个脉冲的频率称为晶振频率。
  • 时钟周期是由晶振电路决定的时钟控制信号的基本时间单位,它和晶振频率互为倒数。在一个时钟周期内,CPU仅完成一个最基本的动作。
  • 每12个时钟周期为1个机器周期,在1个机器周期内,CPU可以完成一个基本操作。每一条代码指令都可以分为几个机器周期,在每个机器周期完成取指令、读或写数据等基本操作。
  • 1个机器周期包括12个时钟周期,分6个状态:S1~S6,每个状态又分两拍:P1和P2。因此,一个机器周期中的12个时钟周期可以表示为S1P1、S1P2、S2P1、S2P2、……S6P2。
  • 以6MHz晶振频率为例,它的时钟周期为166.7ns,机器周期为2μs。

在使用定时器计数器时,通常需要先初始化定时器的各个参数,如预分频系数、计数模式等。然后,通过启动定时器,它会开始计时并不断递增计数器的值。当计数器的值达到设定的目标值时,可以触发相应的中断或执行一些其他操作。作为一类中断源,我们需要理解它的中断请求结构和设置方式。

中断结构

引脚?

由电路图可得,P3.4引脚与定时/计数器0相连,P3.5引脚与定时/计数器1相连,但是定时器依靠单片机内部晶振信号工作,所以这两个引脚实际上只用于计数工作。

TCON

位地址和名称与外部中断的控制寄存器相同,只是从低四位换成了高四位,这里对低四位的外部中断控制就不进行赘述了,感兴趣的朋友可以参照笔者先前的文章单片机原理及应用:中断系统结构与控制寄存器

地址88H8FH8EH8DH8CH8BH8AH89H88H
名称TCONTF1TR1TF0TR0IE1IT1IE0IT0

TF1和TF0位分别表示定时器1和定时器0的溢出标志位。当定时器溢出时,对应的溢出标志位会被置1,之后会向CPU发送执行命令请求,在接收请求后,由硬件或软件清零。

TR1和TR0位用于控制定时器1和定时器0的开始/停止操作。当TR1或TR0位被置1时,对应的定时器开始计数;当TR1或TR0位被清零时,对应的定时器停止计数。

TMOD

全称为工作方式控制寄存器,为定时器/计数器独有的控制方式。

地址D0HD7HD6HD5HD4HD3HD2HD1HD0H
名称TMODGATEC/TM1M0GATEC/TM1M0

高四位控制T1,低四位控制T0。

M1

M0

工作模式

描述

0

0

0

兼容8048单片机的13位定时器,THn8位和TLn5位组成一个13位定时器。

0

1

1

THnTLn组成一个16位的定时器。

1

0

2

8位自动重装模式,定时器溢出后THn重装到TLn中。

1

1

3

禁用定时器1,定时器0变成28位定时器。

下面对四种工作模式进行说明:?

工作方式0称为13位定时/计数器方式。它由16位定时器储存寄存器中的TL(0/1)的低5位和TH(0/1)的8位构成了13位的计数器,此时TL(0/1)的高3位未用。 当门控位GATE=0时,或门输出始终为1,与门被打开,由TR0控制定时/计数器的启动和停止。

工作方式1是一个由TH0中的8位和TL0中的8位组成的16位加1计数器。 方式1与方式0基本相似,最大的区别是方式1的加1计数器位数是16位。?

工作方式2是一个能自动装入初值的8位加1计数器,TH0中的8位用于存放定时初值或计数初值,TL0中的8位用于加1计数器。 加1计数器溢出后,硬件使TF0自动置1,同时自动将TH0中存放的定时初值或计数初值再装入TL0,继续计数。?

工作方式3分为两个独立的8位加1计数器TH0和TL0。TL0既可用于定时,也能用于计数;TH0只能用于定时。

需要注意定时器0有四种工作方式,而定时器1只有三种工作方式。这是因为在工作方式3下,T1的控制位TR1、TF1和中断源被T0占用,而T1无法反过来占用T0的资源。

在了解了工作方式后,我们需要对不同的工作方式赋予对应的初值。由于人的反应速度要远小于单片机的运行速度,即使是最大的定时器容量也只有不到0.1s,所以在程序中我们常用for循环多次重置初值来进行定时或计数,下面是一个举例,具体应用会发布在后续文章当中。

比如我们选用了一款晶振频率为12MHz的单片机,它的机器周期为1μs,要求每隔一秒执行一次程序,那我们可以先把1s分为10份或20份,每份就是100ms或50ms。之后我们选择合适的工作方式,在这里选用工作方式1,从零开始计数的话,工作方式1最大定时为65536μs,也就是六十多ms。根据就近原则,我们采取20次for循环,然后让定时器每50ms将溢出标志位置1。定时初值计算公式就是65536-50000=15536,再将15536/256=60……176,60转为二进制计入TH0为0011 1100,十六进制即0x3c;TL0为1011 0000,十六进制即0xb0。

IE

IE的设置与外部中断相同,将相应的使能位赋1即可开启定时器,要注意无论是外部中断还是定时器,都需要先将总开关EA赋1再进行设置。

地址A8HAFH/?/?ACHABHAAHA8HA9H
名称IEEA/?/ESET1EX1ET0EX0

IP

IP的用法与IE类似,正确地赋值即可。

地址B8H/?/?/?BCHBBHBAHB9HB8H
名称IP///PSPT1PX1PT0PX0

以上就是51单片机中定时器/计数器的设置方法,如有遗漏之处,欢迎大家讨论纠正。?

文章来源:https://blog.csdn.net/qq_62530454/article/details/135517880
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。