《单片机原理及应用 》课件-第5章_第1页
《单片机原理及应用 》课件-第5章_第2页
《单片机原理及应用 》课件-第5章_第3页
《单片机原理及应用 》课件-第5章_第4页
《单片机原理及应用 》课件-第5章_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章单片机的定时器/计数器5.1定时器/计数器的基本概念5.2定时器/计数器的结构及工作原理5.3定时器/计数器的控制

任务5-1用T0查询方式控制P1口8位LED闪烁

任务5-2用T0查询方式计数,结果送P1口显示本章小结习题

定时和计数是控制系统中的两个重要功能,是时序电路的基础。对于时序控制系统,经常需要定时输出某些控制信号,或者对某些待测量进行定时扫描和监测,这便需要实现定时和计数的功能。

51系列单片机的硬件上集成了可编程的定时器/计数器。对于MCS-51子系列单片机,其有两个定时器/计数器,即定时器/计数器0和1,简称T0和T1,有4种工作方式可供选择。对于MCS-52子系列单片机(如AT89S52),其有3个定时器/计数器,T0和T1是通用定时器/计数器,定时器/计数器2(简称T2)集定时、计数和捕获三种功能于一体,功能更强。

5.1定时器/计数器的基本概念

1.计数计数一般是指对事件的统计,通常以“1”为单位进行累加。生活中常见的计数应用有家用电度表、汽车和摩托车上的里程表等。

2.计数器的容量

MCS-51单片机的两个计数器分别称为T0和T1,这两个计数器都是由两个8位的RAM单元组成的,即每个计数器都是16位的计数器,最大的计数容量是216=65536(0~65535),因为在计算机中往往把0作为起始点,比如P0、P1.0、T0等。

3.定时器

单片机中的计数器除了可以计数用,还可以用做定时器,定时器的用途当然很大,如闹钟的定时,手机的定时、开关机,等等,那么计数器是如何作为定时器来用的呢?一个闹钟,如果我们将它定时在1小时后响铃,就相当于秒针走了3600次,在这里时间就转化成为了秒针走的次数。可见,计数的次数和时间之间的确有关,那么单片机的定时器/计数器是怎么回事呢?

定时原理示意图如图5-1所示。从图中我们可以得出这样的结论:只要计数脉冲的间隔相等,那么计数值就代表了时间的流逝。其实单片机中的定时器和计数器是一个东西,只不过计数器记录的是外界发生的事情,而定时器则是由单片机提供一个非常稳定的计数源,然后把计数源的计数次数转化为定时器的时间,图中的C/T开关就是起这个作用的。那么提供给定时器的计数源又是从哪里来的呢?它是由单片机的晶振经过12分频后获得的一个脉冲源。我们知道晶振的频率是很准确的,所以这个计数脉冲的时间间隔当然也很准确。图5-1定时原理示意图

假定单片机的时钟振荡器可以产生12MHz的时钟脉冲信号,经12分频后得到1MHz的脉冲信号,1MHz的信号每个脉冲的持续时间(1个周期)为1μs。如果定时器0对1MHz的信号进行计数,计到65536,将需要65536μs,即65.536ms,此时,定时器计数达到最大值,计数溢出使TFn位置1。如果将定时器的初值设置为65536-1000=64536,那么单片机将在计数1000个1μs脉冲,即1ms时产生溢出。

5.2定时器/计数器的结构及工作原理

5.2.1定时器/计数器的结构MCS-51单片机中的定时器或计数器是对同一种结构进行不同的设置而形成的,基本结构如图5-2所示。T0和T1分别是由TH0、TL0和TH1、TL1两个8位计数器构成的16位计数器,两者均为加1计数器,用于对定时或计数脉冲进行加法计数。每个定时器/计数器都可以实现定时和计数功能。图5-2MCS-51定时器/计数器的基本结构

从图5-2中可以看出,单片机内部与定时器/计数器有关的部件如下:

•两个定时器/计数器(T0和T1):均为16位计数器。

•寄存器TCON:控制两个定时器/计数器的启动和停止。

•寄存器TMOD:用来设置定时器/计数器的工作方式。

两个定时器/计数器在内部通过总线与CPU连接,从而可以受CPU的控制并传送给CPU信号,进而申请CPU去执行规定的任务。

当计数脉冲来自内部时钟脉冲时,定时器/计数器作定时器使用。

当计数脉冲来自于外部引脚T0/T1上的输入脉冲时,定时器/计数脉冲作计数器使用。如果在第一个机器周期检测到T0/T1引脚的脉冲信号为1,第二个机器周期检测到T0/T1引脚的脉冲信号为0,即出现从高电平到低电平的跳变时,计数器加1。由于检测到一次负跳变需要两个机器周期,所以最高的外部计数脉冲的频率不能超过时钟频率的1/24,并且要求外部计数脉冲的高电平和低电平的持续时间不能小于一个机器周期。

方式控制寄存器TMOD用于设置定时器/计数器的工作方式,控制寄存器TCON用于控制定时器/计数器的启动和停止。

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

定时器/计数器作计数器使用时,通过单片机外部引脚T0或T1对外部脉冲信号计数,当加在T0或T1引脚上的外部脉冲信号出现一个由“1”到“0”的负跳变时,计数器加

1,直至计数器产生溢出。

定时器/计数器(T0或T1)作定时器使用时,对外接晶振产生的振荡信号经12分频后,提供给定时器,作为计数的脉冲输入,定时器以12分频后的脉冲周期为基本计数单位,对输入的脉沖进行计数,直至产生溢出。

5.3定时器/计数器的控制

由于定时器/计数器必须在寄存器TCON和TMOD的控制下才能准确工作,因此必须掌握寄存器TCON和TMOD的控制方法。所谓的“控制”,也就是对两个寄存器TCON和TMOD的位进行设置。

5.3.1定时器/计数器的方式控制寄存器TMOD

寄存器TMOD是单片机的一个特殊功能寄存器,功能是控制定时器/计数器,即T0、T1的工作方式。它的字节地址为89H,不可以对它进行位操作,只能进行字节操作,即以给寄存器整体赋值的方法设置初始值,如TMOD=0x01。在上电和复位时,寄存器TMOD的初始值为00H。表5-1列出了寄存器TMOD的格式。

TMOD寄存器中的高4位用来控制T1,低4位用来控制T0。下面以低4位控制T0为例来说明各位的具体控制功能。

(1)GATE:门控制位,用来控制定时器/计数器的启动模式。GATE=0时,只要使TCON中的TR0或TR1置1”(高电平),就可以启动定时器/计数器工作;GATE=1时,除了需将TR0或TR1置“1”外,还需要外部中断引脚INT0(与TR0对应)或INT1(与TR1对应)也为高电平,才能启动定时器/计数器工作。

(2)C/T:定时器/计数器模式选择位。C/T为0时,定时器/计数器设置为定时工作模式;C/T为1时,定时器/计数器设置为计数工作模式。

(3)M1、M0位:定时器/计数器工作方式设置位。定时器/计数器有4种工作方式,由M1、M2进行设置,M1、M0与4种工作方式的对应关系如表5-2所示。

5.3.2定时器/计数器的控制寄存器TCON

TCON是一个特殊功能寄存器,它的功能是在定时器溢出时设定标志位,并控制定时器的运行、停止和中断请求。TCON的字节地址是88H,它有8位,每位均可进行位寻址

(如可使用“TR0=1;”将该位置“1”),各位的地址和位符号见表5-3。

TCON的高4位用于控制定时器/计数器的启动和中断申请,低4位与外部中断有关,其含义在后面介绍。下面仅介绍其高4位的功能:

(1)TF1和TF0:分别是T1和T0的溢出标志位。当定时器/计数器工作产生溢出时,硬件自动将TF1或TF0位置“1”,并申请中断。当进入中断服务程序时,硬件又将自

动清零TF1或TF0。

(2)TR1或TR0:分别是T1和T0的启动/停止位。在编写程序时,若将TR1或TR0设置为“1”,那么相应的定时器/计数器就开始工作:若设置为“0”,相应的定时器/计数器

就停止工作。

5.3.3定时器/计数器的4种工作方式

T0、T1的定时/计数功能由TMOD的C/T位选择,而工作方式则由TMOD的M1、M0位共同控制。在M1、M0位的控制下,定时器/计数器可以在4种不同的方式下工作。

T0和T1有4种工作方式,即方式0、方式1、方式2和方式3。T0和T1在方式0、方式1、方式2下工作时,用法完全一致,仅在方式3下工作时有所区别。各种方式的选择是通过对TMOD的M1、M2位进行编码来实现的。

1.方式0

当M1M0=00时,定时器/计数器被选定为工作方式0,其逻辑结构(以T1为例)如图5-3所示。图5-3T1在方式0下的逻辑结构

方式0实质上是对T0或T1的两个8位计数器TH1、TL1(TH0、TL0)进行计数操作。其中高位计数器TH1的8位全部使用,而低位计数器TL1只用其低5位,从而构成

了一个13位的定时器/计数器。计数时TL1低5位计数满后向TH1进位,TH1计数满后向TCON中的中断标志位TF1进位,由硬件置位TF1,申请中断。

TMOD中的标志位C/T控制的电子开关决定了定时器/计数器的工作模式。

当C/T为0时,T1为定时器工作模式,此时计数器的计数脉沖是单片机内部振荡器12分频后的信号,T1对机器周期计数。其定时时间由下式进行计算:

定时时间=(213-X)×振荡周期×12

式中,X为T1的初值。

当C/T为1时,T1为计数器工作模式。此时计数器的计数脉冲为P3.5引脚上的外部输入脉冲,当P3.5引脚上的输入脉冲发生负跳变时,计数器加1。

T1或T0能否启动工作,取决于TR1、TR0、GATE和引脚INT1、INT0的状态。

当GATE为0时,只要TR1、TR0为1就可以启动T1、T0工作。

当GATE为1时,只有当INT1或INT0引脚为高电平,且TR1或TR0置1时,才能启动T1或T0工作。

2.方式1

在工作方式1中,T1和T0的组成结构与功能完全相同,这里以T1为例进行讲解。

当M1M0=01时,定时器/计数器被选定为工作方式1,逻辑结构如图5-4所示。在这种工作方式下,其为16位定时器/计数器,由TL1的8位和TH1的8位构成。当计数溢出

时,置位TCON中的溢出标志位TF1,表示有中断请求,同时16位定时器/计数器复位为0。图5-4T1在方式1下的逻辑结构

3.方式2

在工作方式2中,T1和T0的组成结构与功能也完全相同,这里同样以T1为例进行讲解。

当M1M0=10时,定时器/计数器被选定为工作方式2,逻辑结构如图5-5所示。T1由TL1构成的8位计数器和作为计数器初值的常数缓冲器的TH1构成。当TL1计数溢出时,置溢出标志位TFI为1的同时,还自动将TH1的初值送入TL1,使TL1从初值重新开始计数。这样既提高了定时精度,同时应用时只需在开始时赋初值1次,简化了程序的编写。图5-5T1在方式2下的逻辑结构

4.方式3

工作方式3的作用比较特殊,只适用于T0。如果把T1置为工作方式3,它会自动处于停止状态。当T0工作在方式3时,被拆成两个独立的8位计数器TL0和TH0,其逻辑结构如图5-6所示。图5-6T0在方式3下的逻辑结构

T0工作在方式3时,TL0构成8位计数器,可工作于定时器/计数器模式,并使用T0的控制位与TF0的中断源。TH0则只能工作于定时器模式,使用T1中的TR1和TF1的

中断源。

一般情况下,使用方式0~2即可满足需要。但在特殊场合,必须要求T0工作于方式3,而T1工作于方式2(需要T1作为串行口波特率发生器,将在后文介绍)。所以,方式3适合

于单片机需要1个独立的定时器/计数器、1个定时器和1个串行口波特率发生器的情况。

5.3.4定时器/计数器中定时/计数初值的计算

在MCS51内核单片机中,T1和T0都是增量计数器,因此不能直接将要计数的值作为初值放入寄存器中,而是将计数的最大值减去实际要计数的值的差存入寄存器中。

若作定时器使用,设定时间为Δt,时钟频率为fosc,定时器/计数器内部的计数器位数为n,则

若作计数器使用,设计数值为C,定时器/计数器内部的计数器位数为n,则

计数初值=2n-C

当定时器/计数器工作在除方式2以外的其他方式下,且采用中断编程方式时,在中断服务程序中必须重置内部计数器初值,以保证定时/计数值不变。

任务5-1用T0查询方式控制P1口8位LED闪烁

任务目的要求T0工作在方式1,LED的闪烁周期为100ms,即亮50ms,熄灭50ms。电路原理图如图5-7所示。任务准备设备及软件:万用表、计算机、KeilμVision4软件、Proteus软件。图5-7T0查询方式控制8位LED闪烁的电路原理图

任务实施

1.实现方法

1)T0工作方式的设置

用如下指令对T0的工作方式进行设置:

2)T0初值的设定

因为单片机的晶振频率为12MHz,经12分频后送到T0的脉冲频率为1MHz,周期T=1μs。即每个脉冲计时1μs。计时50ms(即50000μs),则需要计的脉冲数为50000/1=

50000(次)。定时器的初值应设置为65536-50000=15536。这个数需要用T0的高8位寄存器(TH0)和低8位寄存器(

TL0)分别存储,设置方法如下:

3)查询方式的实现

T0开始工作后,可通过编程让单片机不断查询溢出标志位TF0是否为“1”,若为“1”,则表示计时时间到;否则等待。

2.程序设计

先建立一个文件夹,然后建立“TIMER”工程项目,最后建立源程序文件“TIMER.C”。

输入如下源程序:

3.用Proteus软件仿真

经Keil软件编译通过后,可利用Proteus软件进行仿真。在ProteusISIS编辑环境中绘制仿真电路图,将编译好的“TIMER.hex”文件载入AT89C51。启动仿真,即可看到P1口外接的8位LED开始闪烁。

任务5-2用T0查询方式计数,结果送P1口显示

任务目的要求使用T0的查询方法统计按键次数,并将结果送P1口8位LED显示。要求计数从0开始,计满100后清0。电路原理图如图5-8所示。任务准备设备及软件:万用表、计算机、KeilμVision4软件、Proteus软件。

任务实施

1.实现方法

用如下指令对T0的工作方式进行设置:

TMOD=0x06;//TMOD=00000110B,使用T0的方式2

因为T0在方式2工作时,TH0和TL0仅需赋值一次初值。在TL0计满后,即置位TF0,同时TH0中的初值自动再装入TL0,然后重新开始计数。所以T0工作在方式2且

计数最大值为100时的初值设置如下:

TH0=256100;//T0的高8位赋初值

TL0=256100;//T0的高8位赋初值

2.程序设计

先建立一个文件夹,然后建立“COUNTER”工程项目,最后建立源程序文件“COUNTER.C”。

3.用Proteus软件仿真

经Keil软件编译通过后,可利用Proteus软件进行仿真。在ProteusISIS编辑环境中绘制仿真电路图,将编译好的“

COUNTER.hex”文件载入AT89C51。启动仿真,即可看到

P1口外接的8位LED显示按键按下的次数。

本章小结

在单片机项目开发中经常用到定时器/计数器,因此,掌握定时器/计数器的使用方法非常必要。本章介绍了定时器/计数器的简单应用技术。在实际项目开发中通常需要根据具体的项目要求灵活使用定时器/计数器,更详细的资料可查阅芯片的数据手册。

习题

一、填空题1.单片机AT89C51片内有两个()位的定时器/计数器,即T0和T1。2.T0或T1用做作定时器时,对外接晶振产生的振荡信号经()分频后,提供给计数器,作为计数的脉冲输入。3.单片机AT89C51外接12MHz晶振,定时器的最大溢出时间是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论