微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 第9课 定时器

第9课 定时器

时间:12-01 来源:互联网 点击:
在对单片机应用项目进行编程时,经常需要插入一定的延时程序,此时一般有两种方案可选择,一是采用软件手段——插入一段延时程序,二是采用单片机内部的硬件资源——定时器。对于软件手段,我们在前面的课程已经详细讲到过,它最大的缺点就是占用单片机的“机时”,也就是耗费单片机的“精力”,从而降低了单片机的工作效率。而定时器则不同,它是单片机内部一个独立的功能模块,定时器一旦设置后,定时器便自动开始计时,当计时时间满后,便产生相应的中断,去处于中断函数内的程序,而在计时这段时间内,定时器和CPU是分别独立工作的,CUP此时就可以有时间去做其它的事情。所以为了提高单片机的工作效率和实现精确的延时,目前几乎所有的半导休生产厂商在设计单片机时,在内部都配置了定时器模块。下面51单片机内部的定时器进行介绍。

1、定时器/计数器概述

51单片机内部共有两个定时器/计数器模块T0和T1,对于52单片机内部又增加了定时器T3。它们即具有定时功能,也可以作计数功能,可以通过相应的寄存器进行设置。但不论是用于定时功能还是计数功能,其基本原理都是一样的,如图1所示为定时器/计数器的结构图,内部为一个加1计数器,由高8位TH0(或TH1)和低8位TL0(或TL1)两个计数寄存器组成。TMOD是定时器/计数器的工作模式和工作方式寄存器,用来确定是处于定时模式还是计数模式以及何种工种方式,这个后面讲解寄存器的时会讲到。TCON为控制寄存器,用来控制定时器/计数器的启动、停止及溢出标志等的设置。

图1 定时器/计数器的结构框图

工作原理如图的所示,加1计数器相当于一个装数的容器,每来一个脉冲自动加1,当数装满后便自动溢出,如果此时设置的中断,CPU便会停止当前正在执行的工作,去执行中断函数内的程序。这里也可以形象把计数器看作一个装水的水桶,每来一滴水,水桶的水便会增加一点,当水装满了后,便会溢出。

加1计数器的计数脉冲有两个来源,一个是由系统时钟振荡器输出脉冲经过12分频后送来,一个是由外部引脚T0(P34引脚)和T1(P35引脚)送来的外部脉冲(通常为下降沿),前者主要用于定时,后者主要用于计数。每来一个脉冲时,计数器会自动加1,当加到全为1时,再来一个脉冲,计数器便会自动清0,且计数器此时会溢出并使TCON寄存器中的TF0和TF1置1,如果此时设置了定时器中断允许,便会自动的向CPU发出中断请求。

图2 定时器/计数器的工作原图

可能大家还是不明白,这样为什么就可以用来进行定时和计数呢,这里我们以通俗的例子解释一下定时,还是以水桶装水为例,假设水桶开始一滴水都没有(相当于计数器内部全为0),此时来一滴水(相当于来一个脉冲),水桶的水便会增加一滴(相当于计数器自动加1),而水桶的容积是规定了的(相当于计数器最大计数值),水桶的水总会有满的时候(相当于计数器加到全部为1),此时假设每来一滴水的时间我们知道或者人为可以设置,水桶从一滴水没有到全部装满就会有一个时间,这个就是定时时间值。

也就是说,我们如果知道每来一个脉冲相应的时间t,又知道加1计数器最大可以装多少数n,我们就可以知道这个时间值T,即T=nt。而这个T的时间通常是固定的,实际应用时需要不同的定时时间,我们可以采用预先在计数器内装一定的初值(相当于在水桶内先装一些水),然后在这个初值的基本上再来相应脉冲,计数器自动加1,一直到溢出,我们就可以得到任意想要的定时时间。

从图2中我们还可以看出,定时器/计数器还有一个控制开关,此开关可以控制定时器计数器相应的启动和停止。而此开关的开闭主要是由图2左下部的TRX 、GATE等信号共同作用,这里都是门电路,可以由数电的知道解释,因为比较简单,这里我就不作说明,后面结合的相关的寄存器进行介绍。

2、定时器/计数器相关寄存器

与定时器/计数器相关的寄存器主要有两个(编程时如涉及到中断,还要用到中断相关的寄存器,前面已经讲可),一个是工作模式及工作方式设置寄存器TMOD,一个就是跟控制有关(就是图2中开关的设置有关的)寄存器TCON,下面分别对其进行介绍。

注意:对单片机内部寄存器的说明相当于对结构原理的解释,所以在单片机内部功能模块看不明白时,也可以借助相关寄存器的说明加以理解。

(1)定时器工作模式及工作方式寄存器TMOD

工作方式寄存器TMOD用于设置定时/计数器的工作模式及工作方式,低四位用于T0,高四位用于T1。其格式如下:

GATE:门控位。GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top