Chinaunix首页 | 论坛 | 博客
  • 博客访问: 52300
  • 博文数量: 17
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 230
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-16 11:21
文章分类

全部博文(17)

文章存档

2013年(3)

2010年(11)

2009年(1)

2008年(2)

我的朋友

分类: LINUX

2010-12-08 08:56:07

MCS-51定时/计数器

概述

相关寄存器

工作方式

中断相关

定时器编程

定时器2

 

概述

51定时器的工作原理:

 

MCS-51的单片机内有两个16位可编程的定时/计数器,它们具有四种工作方式,其控制字和状态均在相应的特殊功能寄存器中,通过对控制寄存器的编程,就可方便地选择适当的工作方式。下面我们对它们的特性进行阐述。

MCS-51单片机内部的定时/计数器的结构如图1所示,定时器T0特性功能寄存器TL0(低8位)和 TH0(高8位)构成,定时器T1由特性功能寄存器TL1(低8位)和TH1(高8位)构成。特殊功能寄存器TMOD控制定时寄存器的工作方式,TCON 则用于控制定时器T0T1的启动和停止计数,同时管理定时器T0T1的溢出标志等。程序开始时需对TL0TH0TL1TH1进行初始化编程,以 定义它们的工作方式和控制T0T1的计数。

定时/计数器内部结构

 

相关寄存器

TL0 TH0TL1 TH1: 定时器0(定时器1)计数初始值装载寄存器
TMOD
定时/计数器的方式控制字,字节地址为89H,其格式如表1

  1  TMOD 寄存器结构

D7

D6

D5

D4

D3

D2

D1

D0

GATA

M1

M0

GATA

M1

M0

←T1方式字段

←T0方式字段

TCON定时器控制积存器,字节地址为88H,位地址为88H—8FH,其格式如表2

  2  TCON 结构

D7

D6

D5

D4

D3

D2

D1

D0

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

 TMODTCON各位的意义和用途我们将在下面的章节中予以介绍,需要注意的是,TCOND0—D3位与中断有关,我们会在中断的内容中加以说明,MCS-51的定时/计数器共有四种工作方式,我们逐个进行讨论。

定时器中断相关寄存器,请参阅中断相关章节。

 

工作方式

   工作方式0
    
定时/计数器0的工作方式0电路逻辑结构见图2(定时/计数器1与其完全一致),工作方式013位计 数结构的工作方式,其计数器由TH的全部8位和TL的低5位构成,TL的高3位没有使用。当=0时,多路开关接通振荡脉冲的12分频输出,13位计数器以次 进行计数。这就是定时工作方式。 当=1时,多路开关接通计数引脚(To),外部计数脉 冲由银南脚To输入。当计数脉冲 发生负跳变时,计数器加1,这就是我们常称的计数工作方式。

定时/计数器内部结构

 不管是哪种工作方式,当TL的低5位溢出时,都会向TH进位,而全部13位 计数器溢出时,则会向计数器溢出标志位TF0进位。

    
我们讨论门控位GATA的功能,GATA位的状态决定定时器运行控制取决于TR0的一个条件还是TR0 INT0引脚这两个条件。当GATA=1时,由于GATA信号封锁了与门,使引脚INT0信号无效。而这时候如果TR0=1,则接通模拟开关,使计数器 进行加法计数,即定时/计数工作。而TR0=0,则断开模拟开关,停止计数,定时/计数不能工作。

  GATA=0时,与门的输出端由TR0INT0电平的状态确定,此时如果TR0=1INT0=1 与门输出为1,允许定时/计数器计数,在这种情况下,运行控制由TR0INT0两个条件共同控制,TR0是确定定时/计数器的运行控制位,由软件置位或 清“0”

 如上所述,TF0是定时/计数器的溢出状态标志,溢出时由硬件置位,TF0溢出中断被CPU响应时,转 入中断时硬件清“0”TF0也可由程序查询和清“0”

  在工作方式下,计数器的计数值范围是:

    1—8192213

 当为定时工作方式时,定时时间的计算公式为:

  213计数 初值)晶振周期╳12
 
   213计数初值)机器周期

  其时间单位与晶振周期或机器周期相同。

 如果单片机的晶振选为6.000MHz,则最小定时时间为:

 [213213— 1]╳1/6╳10-6╳12=2╳10-6(s)=2(us)

 (213—0)╳1/6╳10-6╳12=16384╳10-6(s)=16384(us)

  工作方式1
    
M1M0=01时,定时/计数器处于工作方式1,此时,定时/及数器的等效电路如图3所示,仍以定 时器0为例,定时器1与之完全相同。

定时/计数器内部结构

 可以看出,方式0和方式1的区别仅在于计数器的位数不同,方式013位,而方式1则为16位,由 TH0作为高8位,TL0为低8位,有关控制状态字(GATATF0TR0)和 方式0相同。

  在工作方式1下,计数器的计数值范围是:

   1—65536216

 当为定时工作方式1时,定时时间的计算公式为:

216计数 初值)晶振周期╳12

    216计数初值)机器周期

 其时间单位与晶振周期或机器周期相同。

如果单片机的晶振选为6.000MHz,则最小定时时间为:

 [213216— 1]╳1/6╳10-6╳12=2╳10-6(s)=2(us)

 (216—0)╳1/6╳10-6╳12=131072╳10-6(s)=131072(us)
 
工 作方式2
    
M1M0=10,定时/计数器处于工作方式2.此时定时器的等效电阻如图4所示.我们还是以定时/计数器0为例,定时/计数器1与之完全一 致。

定时/计数器内部结构

工作方式0和工作方式1的最大特点就是计数溢出后,计数器为全0,因而循环定时或循环计数应用时就存在反复设置初值的 问题,这给程序设计带来许多不便,同时也会影响计时精度,工作方式2就针对这个问题而设置,它具有自动重装载功能,即自动加载计数初值,所以也有的文献称 之为自动重加载工作方式。在这种工作方式中,16位计数器分为两部分,即以TL0为计数器,以TH0作为预置寄存器,初始化时把计数初值分别加载至TL0 TH0中,当计数溢出时,不再象方式0和方式1那样需要人工干预,由软件重新赋值,而是由预置寄存器TH以硬件方法自动给计数器TL0重新加载。

    
程序初始化时,给TL0TH0同时赋以初值,当TL0计数溢出时,置位TF0的同时把预置寄存器TH0中的初值加载给TL0TL0重新计数。 如此反复,这样省去了程序不断需给计数器赋值的麻烦,而且计数准确度也提高了。但这种方式也有其不利的一面,就是这样一来的计数结构只有8位,计数值有 限,最大只能到255。所以这种工作方式很适合于那些重复计数的应用场合。例如我们可以通过这样的计数方式产生中断,从而产生一个固定频率的脉冲。也可以 当作串行数据通信的波特率发送器使用。

     
工作方式3

定时器1设为工作方式样3时将停止工作。

定时器0工作在方式3时,定时器1可以工作方式012方式。但由于其一资被定时器0占用,其工作方式有所变动。

M1M0=11时,定时/计数器0处于工作方式3,此时,定时/及数器0的等效电路如图3所示:

工作方式3等效电路

在工作方式3模式下,定时/计数器0被拆成两个独立的8位计数器TL0TH0。其中TL0既可以作计数器使用,也可以作为定时器使用,定时/计 数器0的各控制位和引脚信号全归它使用。其功能和操作与方式0或方式1完全相同。TH0就没有那么多资源可利用了,只能作为简单的定时器使用,而且由 于定时/计数器0的控制位已被TL0占用,因此只能借用定时/计数器1的控制位TR1TF1,也就是以计数溢出去置位TF1TR1则负责控制TH0定 时的启动和停止。等效电路参见图6。由于TL0既能作定时器也能作计数器使用,而TH0只能作定时器使用而不能作计数器使用,因此在方式3模式下,定时/计数器0可以构成二个定时器 或者一个定时器和一个计数器。

 如果定时/计数器0工作于工作方式3,那么定时/计数器1的工作方式就不可避免受到一定的限制,因为自己的一些控制位已被定时/计数器借用,只能 工作在方式0、方式1或方式2下,且等效电路参见图6

T1工作方式0、1、2等效电路

在这种情况下,定时/计数器1通常作为串行口的波特率发生器使用,以确定串行通信的速率,因为已没有TF1被定时/计 数器0借用了,只能把计数溢出直接送给串行口。当作波特率发生器使用时,只需设置好工作方式,即可自动运行。如要停止它的工作,需送入一个把它设置为方式 3的方式控制字即可,这是因为定时/计数器本身就不能工作在方式3,如硬把它设置为方式3,自然会停止工作。

 

定时器编程

   明白了定时器的工作原理后,实现定时器的相关编程实际上相当简单。

初始化:

设置TMOD:设定定时器的工作模式,包括GATEC/T值,定时器工作方式。

设定TL0 TH0TL1 TH1)的初始值。

定时器中断相关设置。如果定时器作波特率发生器,不需要设置中断部分,即不开启定时器中断,此时定时器只是串口的时钟源而已

开启定时(计数):TR0TR1)置1

开中断。

定时器中断服务相关编程:

执行通用中断响应服务流程。

TF0TF1

重装载TL0 TH0TL1 TH1) (可选)

 

定时器2

 

 

 

 

 

 

 

阅读(1160) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~