定时器

概述

检测与控制中,许多场合都要用到计数功能和定时功能。实现定时/计数这些功能,有3种主要方法:软件定时、数字电路的硬件定时、可编程定时/计数器。

  1. 软件定时
    软件定时就是一个循环程序,执行这一程序段所需的时间就是延时时间。

  2. 数字电路硬件定时
    这种硬件定时采常用小规模集成电路器件,如用555定时芯片构成定时电路,它不占用CPU的时间,但是这种电路的定时时间要靠电路中的元件参数来确定。在硬件电路连接好以后,要改变定时时间,就要改变电路中的电子元件,使用起来很不方便。

  3. 可编程定时/计数器
    可编程定时/计数器是为了方便微型计算机系统的设计和应用而研制的,它既是硬件定时,又可以很容易地通过软件来确定和改变定时时间,通过软件编程就能够满足不同的定时和计数要求。

###结构

微机原理-08-定时器_引脚

定时器/计数器T0由特殊功能寄存器TH0、TL0构成,

定时器/计数器T1由特殊功能寄存器TH1、TL1构成。

具有定时器和计数器2种工作模式,4种工作方式(方式0、方式1、方式2和方式3)。

  • 计数器模式是对加在T0(P3.4)和T1(P3.5)两个引脚上的外部脉冲进行计数\
  • 定时器工作模式是对单片机的时钟振荡器信号经片内12分频后的内部脉冲信号计数。

###4种工作方式

M1M0 方式 特点
0 0 0 13位定时器/计数器
0 1 1 16位定时器/计数器
1 0 2 自动装入时间常数的8位定时器/计数器
1 1 3 对T0分为两个8位独立计数器;对T1置方式3时停止工作

###对外部输入的计数信号的要求

  • 当定时器/计数器工作在计数器模式时,计数脉冲来自外部输入引脚T0或T1。

  • 当输入信号产生负跳变时,计数器的值增1。

  • 每个机器周期的S5P2期间,都对外部输入引脚T0或T1进行采样。

###定时器/计数器的编程和应用

步骤

(1)确定工作方式,即给方式控制寄存器TMO D写入控制字。
(2)计算定时器/计数器初值,并将初值写入寄存器TL和TH。
(3)根据需要,对中断控制寄存器IE置初值,确定是否开放定时器中断。
(4)使运行控制寄存器TCON中的TRx置1,启动定时器/计时器。

练习

\2. AT89S51单片机内设有几个可编程的定时器/计数器?它们可以有哪几种工作模式?哪几种工作方式?如何选择和设定?各有什么特点?
微机原理-08-定时器_其他_02

定时器/计数器四种工作方式由TMOD中的M1 M0两位确定,如下表所示。

M1M0 方式 特点
0 0 0 13位定时器/计数器
0 1 1 16位定时器/计数器
1 0 2 自动装入时间常数的8位定时器/计数器
1 1 3 对T0分为两个8位独立计数器;对T1置方式3时停止工作

7.AT89S51单片机的晶振频率为6MHz,若要求定时值分别为0.1ms和10ms,定时器0工作在方式0、方式1和方式2,其定时器初值各应是多少?

****答:****(1) 0.1ms

方式0:

0.1×10-3=(213-X)×12/(6×106)

所以:X=8142=1111111001110B

T0低5位01110B=0EH

T0高8位:11111110B=FEH

方式1: 0.1×10-3= (216-X) ×12/(6×106)

所以:X=65486=FFCEH

方式2: 0.1×10-3= (28-X) ×12/(6×106)

所以:X=206=CEH

(2) 10ms

方式0: 10×10-3=(213-X) ×12/(6×106)

所以:X=3192=110001111000B

T0低5位11000B=18H

T0高8位:01100011B=63H

方式1: 10×10-3=(216-X) ×12/(6×106)

所以:X=60536=EC78H

方式2:在此情况下最长定时为512μs,无法一次实现定时10ms,可用0.1ms定时循环100次

11.定时器/计数器作为外部中断源使用时,需要如何初始化?以T0为例通过程序说明。

*答:* 初始化程序:

```

MOV TMOD, #06H

 MOV TL0, #0FFH

 MOV TH0, #0FEH

 SETB TR0

 SETB EA

SETB ET0

```

14.已知单片机时钟振荡频率为6MHz,利用T0定时器,在P1.1引脚上输出连续方波,波形如图9-23所示。

微机原理-08-定时器_其他_03

图9-23 题15波形图

****解:****首先计算定时常数:

100us   方式0   Tc=FE0EH; 方式1   Tc=FFCEH; 方式2  Tc=CEH

150us   方式0   Tc=FD15H; 方式1   Tc=FFB5H; 方式2  Tc=B5H  

****方法一****:采用方式一,定时器中断。

流程图:

微机原理-08-定时器_寄存器_04

ORG 0000H
         LJMP START
         ORG 000BH
         LJMP TINT0
         ORG 0100H
 START: MOV TMOD, #01H
        MOV TL0, #0CEH
        MOV TH0, #0FFH
        SETB TR0
        SETB EA
        SETB ET0
        SETB 20H.0
        SETB P1.1
        SJMP $
 TINT0: JNB 20H.0, NEXT
        MOV TL0, #0B5H
        MOV TH0, #0FFH
        CLR P1.1
        CPL 20H.0
        SJMP LAST
  NEXT: MOV TL0, #0CEH
       MOV TH0, #0FFH
       SETB P1.1
       CPL 20H.0
  LAST:RETI   

****方法二****: 采用方式2 定时器中断 加延时程序

流程图:

微机原理-08-定时器_引脚_05

    ORG 0000H

    LJMP START

    ORG 000BH

    LJMP TINT0

    ORG 0100H

START: MOV TMOD, #02H

   MOV TL0, #0CEH

   MOV TH0, #0CEH

   SETB TR0

   SETB EA

   SETB ET0

   SETB 20H.0

   SETB P1.1

   SJMP $

TINT0: JNB 20H.0, NEXT

   CLR TR0

   CLR P1.1

   LCALL DELAY

   CPL 20H.0

   SETB TR0

   SJMP LAST

NEXT: SETB P1.1

   CPL 20H.0

LAST: RETI

DELAY: MOV R7, #8

DELAY1: DJNZ R7, DELAY1

   RET