第 6 章 定时器与计数器

32
6.1 定定定定定定定定定定 6.2 MCS-51 定定定定定 / 定定定定定定定定定 定定 6.3 定定 / 定定定定定定定定定定定 6.4 定定定定定定 第6第 第第第第第第第

description

第 6 章 定时器与计数器. 6.1 定时和计数的基本概念 6.2 MCS-51 单片机定时 / 计数器的结构和工作原理 6.3 定时 / 计数器工作模式及其应用 6.4 综合应用举例. 计数的基本概念. 从一个生活中的例子来理解计数的基本概念:假设你希望知道一个碗里可以装多少豆子?你可以采用什么办法呢?你肯定会说把碗里的豆子数一下就行了,不错,正是如此。从这个常见的计数例子可以看出,如果想计数,必须必备三要素 : . ◆    计数单元:豆子 ◆    人:一个能认识豆子并能计数的人 ◆   计数容量:一个碗,同时碗装满了,人可以看到碗满了,停止计数. - PowerPoint PPT Presentation

Transcript of 第 6 章 定时器与计数器

Page 1: 第 6 章   定时器与计数器

6.1 定时和计数的基本概念

6.2 MCS-51 单片机定时 / 计数器的结构和工作原理

6.3 定时 / 计数器工作模式及其应用

6.4 综合应用举例

第 6 章 定时器与计数器

Page 2: 第 6 章   定时器与计数器

从一个生活中的例子来理解计数的基本概念:假设你希望知道一个碗里可以装多少豆子?你可以采用什么办法呢?你肯定会说把碗里的豆子数一下就行了,不错,正是如此。从这个常见的计数例子可以看出,如果想计数,必须必备三要素:

◆ 计数单元:豆子

◆ 人:一个能认识豆子并能计数的人

◆ 计数容量:一个碗,同时碗装满了,人可以看到碗满了,停止计数

计数的基本概念

Page 3: 第 6 章   定时器与计数器

但是生活中常见的事情如何用单片机去实现呢?单片机是无法认识豆子等我们人可以通过眼睛认识的事物。单片机可以识别的只能是电脉冲信号,如果想利用单片机完成计数功能,则与生活中的计数相对应,需要以下三要素:

◆ 计数脉冲:单片机的某个 IO 引脚可以识别脉冲信号

◆ 单片机 CPU :单片机 CPU 内部集成这样的硬件功能,即 IO 引脚每来一个脉冲,寄存器的值增加 1 ,计数一次。

◆ 计数容量:计数容量和寄存器的位数有关,如果利用 8 位寄存器则只能计数到 255 ,超过 255 则必须告诉 CPU 已经溢出,停止计数

Page 4: 第 6 章   定时器与计数器

还是从生活中的定时例子来说明定时的基本概念。一个闹钟,将它定时在 1 个小时后闹响,换言之,也可以说是秒针走了 3600 圈,如果需要你设计一个这样的定时装置,你该怎么办呢?同时想定时,必须必备三要素:

定时的基本概念

◆    定时基准:最小的定时单元,对于本例而言,需要一个精确的秒针,当秒针走一圈,则表示一秒的时间。 ◆    计数功能:需要一个装置能计数,秒针每走一圈则计数功能加 1 。 ◆    计数容量:当计数达到 3600 圈以后,则报警表示定时时间已到。

Page 5: 第 6 章   定时器与计数器

同样对于单片机而言如何实现现实生活中需要的定时功能呢?如果想利用单片机完成定时功能,则与生活中的定时相对应,需要以下三要素:

◆    定时基准:单片机中的晶振提供一个精确的定时基准。由单片机的晶振经过 12 分频后获得的一个脉冲源,即采用机器周期作为定时基准,如果晶振为 12M ,则定时基准为 1us 。

◆    计数功能:与计数功能相同,单片机 CPU 内部集成这样的硬件功能,即每一个机器周期,寄存器的值增加 1 ,计数一次。

◆    计数容量:当达到用户定义的时间后,则申请中断,在中断程序中实现报警功能。

Page 6: 第 6 章   定时器与计数器

6.2.1 定时 / 计数器概述INT1 INT0(P3.3)(P3.2)

CPU

定时器T1

TH1 TL1

(8DH) (8BH)

7 0 7 0

定时器T0

(8CH) (8AH)

7 0 7 0

TH0 TL0

工作模式

TMOD(89H)

工作模式

内部总线溢出

启动

启动

溢出

中断 TCON(88H)

T1(P3.5)

图 6-1 定时 / 计数器结构

Page 7: 第 6 章   定时器与计数器

12分频

TFX

晶振

C/T—

每一机器周期采样一次

TRX

GATE

INTX

计数寄存器

图 6-2 定时 / 计数器控制逻辑

Page 8: 第 6 章   定时器与计数器

6.2.2 单片机定时 / 计数器的工作方式定时器工作方式设置为定时器工作方式时,基准时间由单片机的晶振经过 12 分频后获得的一个脉冲信号,即机器周期信号。机器周期信号输入到加 1 计数器,加 1 计数器实现每个机器周期使 T0 或 T1 的计数寄存器数值增加 1 ,直至计满溢出,根据计数机器周期的次数可以得到定时时间。计数器工作方式设置为计数方式时,外部脉冲信号输入到引脚 T0 ( P3.4 )和T1 ( P3.5 ), CPU 对外部脉冲信号进行采样计数,加 1 计数器由外部输入脉冲信号的下降沿触发计数。

Page 9: 第 6 章   定时器与计数器

计数方式具体工作过程

计数器在每个机器周期的 S5P2 期间采样 T0 和 T1 引脚的输入电平,若前一个机器周期采样值为 1 ,下一个机器周期采样值为 0 ,则计数器加 1 。所以检测一个从 1 到 0 的跳变需要两个机器周期,即外部输入信号的周期应大于或等于两个机器周期,也就是说外部输入信号的频率必须小于晶振频率的 1/24 ,若频率超过晶振频率的 1/24 ,则无法准确计数脉冲个数。虽然对外部输入信号的占空比无特殊要求,但是为了确保输入信号电平在变化之前至少被采样一次,要求电平保持时间至少是一个完整的机器周期。对输入脉冲信号的基本要求如图 6-3 所示。

Page 10: 第 6 章   定时器与计数器

>机器周期

>机器周期

图 6-3 对输入脉冲宽度的要求

Page 11: 第 6 章   定时器与计数器

TMOD 用于控制 T0 和 T1 的工作模式。TMOD 不能位寻址,只能用字节设置定时器的工作模式,低半字节设置 T0 ,高半字节设置 T1 。8051 系统复位时, TMOD 的所有位被清 0 。TMOD 各位的定义格式如图所示

6.2.3 工作模式寄存器 TMOD

GATE C/ T M1 M0 GATE M1C/ T M0

定时器 T1 定时器 T0

TMOD( 89H )

D7 D6 D5 D4 D3 D2 D1 D0

Page 12: 第 6 章   定时器与计数器

M1 和 M0— 操作模式控制位。两位可形成四种编码,对应于四种模式。

TC / —计数器 / 定时器方式选择位0/ TC 设置为定时方式。定时器计数 8051

片内脉冲,即对机器周期计数1/ TC 设置为计数方式。计数器的输入来自 T

0 ( P3.4 )或 T1 ( P3.5 )端的外部脉冲

Page 13: 第 6 章   定时器与计数器

GATE—门控位。 GATE=0 ,只要用软件使 TR0 (或 TR1 )置 1就可以启动定时器,而不管 INT0 (或 INT1 )的电平是高还是低。 GATE=1 ,只有 INT0 (或 INT1 )引脚为高电平且由软件使 TR0 (或 TR1 )置 1 时,才能启动定时器工作。

Page 14: 第 6 章   定时器与计数器

TCON除可字节寻址外,各位还可位寻址。8051 系统复位时, TCON 的所有位被清 0 。 TCON 各位的定义格式如图所示。

6.2.4 启动控制寄存器 TCON

Page 15: 第 6 章   定时器与计数器

6.3 定时 / 计数器工作模式及其应用

6.3.1 模式 0 及其应用

6.3.2 模式 1 及其应用

6.3.3 模式 2 及其应用

6.3.4 模式 3 及其应用

Page 16: 第 6 章   定时器与计数器

6.3.1 工作模式 0 及其应用

1 逻辑结构

2 控制寄存器 TMOD 和 TCON 的设置

3 定时 / 计数器初值的设置

4 模式 0 的应用

Page 17: 第 6 章   定时器与计数器

1 逻辑结构

振荡器

C/T=0—

T0引脚

INT0

TF0

TR0

中断

C/T=1—

TL0(5位)

TH0(8位)

控制

M0

M1

C/T

GATEA

B

0

0

12分频

图 6-7 模式 0 时的逻辑结构图

Page 18: 第 6 章   定时器与计数器

例 6.4 用 T0 定时,选择工作模式 0 ,由单片机 P1.0 输出占空比为 50%、周期为 2ms 的方波,晶振频率为 12M 。

源程序如下: ORG 0000H LJMP MAIN ORG 000BH LJMP INT_TIME0 ORG 0030HMAIN: MOV TMOD, #00H ;设置工作方式 MOV TH0, #0E0H ;设初始值 MOV TL0, #18H SETB TR0 ;启动定时器 SETB EA ;开放定时器中断 SETB ET0 SETB P1.0 LJMP $INT_TIME0: MOV TH0, #0E0H ;对定时器重新

赋值 MOV TL0, #18H CPL P1.0 RETI

4 工作模式 0 应用

Page 19: 第 6 章   定时器与计数器

6.3.2 工作模式 1 及其应用

1 逻辑结构

2 控制寄存器 TMOD 和 TCON 的设置

3 定时 / 计数器初值的设置

4 模式 1 的应用

Page 20: 第 6 章   定时器与计数器

1 模式 1 的逻辑电路结构

振荡器

C/T=0—

T1引脚

INT1

TF1

TR1

中断

C/T=1—

TL1(8位)

TH1(8位)

控制

M0

M1

C/T

GATEA

B

1

0

12分频

图 6-8 模式 1 逻辑结构图

Page 21: 第 6 章   定时器与计数器

4 模式 1 的应用举例例 6.7 用 T1 定时,选择工作模式 1 ,由单片机 P1.0 输出 50Hz的方波,晶振频率= 12M 。

源程序如下:ORG 0000H

LJMP MAIN ORG 0030HMAIN : MOV TMOD,#10H ;设置 T1 为模式 1

SETB TR1 ;启动定时LOOP : MOV TL1,#0D8H ;送初值 MOV TH1,#0F0H JNB TF1 , $ ;查询定时时间到否 CLR TF1 ;产生溢出,清标志位 CPL P1.1 ;取反 SJMP LOOP ;重复循环

Page 22: 第 6 章   定时器与计数器

6.3.3 工作模式 2 及其应用

1 逻辑结构

2 控制寄存器 TMOD 和 TCON 的设置

3 定时 / 计数器初值的设置

4 模式 2 的应用

Page 23: 第 6 章   定时器与计数器

1 模式 2 的逻辑电路结构

重新装入

12分频晶振

C/T=0—

T0引脚

TF0C/T=1—

TL0(8位)

TH0(8位)

控制

M0

M1

C/T

GATE

0

1

INT0 TR0

AB

图 6-9 模式 2 逻辑结构

Page 24: 第 6 章   定时器与计数器

4 模式 2 的应用举例例 6-10 :利用定时器 T1 的模式 2 对外部信号计数。要求每计

满 100 次,将 P1.0 引脚取反。源程序: ORG 0000H LJMP MAIN ORG 001BH

LJMP INT_TIME1ORG 0030H

MAIN: MOV TMOD,#60H ;设置 T1 为模式 2, 外部计数方式

MOV TL1,#9CH ; T1 计数器初值 MOV TH1,#9CH SETB EA ;开放定时器中断 SETB ET1 SETB TR1 ;启动 T1 计数HERE: SJMP HERE ;等待中断INT_TIME1: CPL P1.0 RETI

Page 25: 第 6 章   定时器与计数器

6.4 综合应用举例由于 MCS-51 单片机的定时 / 计数器是可编程的,因此

在使用之前需要进行初始化。在编程时主要注意两点:第一要能正确写入控制字;第二能进行计数初值的计算。一般情况下,包括以下几个步骤:( 1 )确定工作方式,即对 TMOD 寄存器进行赋值。( 2 )计算计数初值,并写入寄存器 TH0、 TL0 或 TH1、 TL1 中。( 3 )根据是采用中断还是查询方式决定是否置位 ETx允许 T/C 中断。( 4 )根据是采用中断还是查询方式决定是否置位 EA 使 CPU开中断。( 5 )置位 TRx启动计数。

Page 26: 第 6 章   定时器与计数器

例 6-11 试选择定时 / 计数器 T0 测试 INT0 ( P3.2 )引脚上输入的被测脉冲宽度,已经晶振频率= 12M

分析:定时器可以用于测量脉冲宽度程序设计,测量外部脉冲宽度利用 TMOD 的门控位控制很方便,当设置 GATE = 1 时,仅设置 TR0 ( TR1 )等于“ 1” ,定时器不能被启动,还必须等外部脉冲高电平时,定时器才开始工作。测试过程如图 6-11 所示

被测脉冲

计数器启动计数器关闭

图 6-11 被测脉冲波形

Page 27: 第 6 章   定时器与计数器

例 6-11 源程序如下:ORG 0000H

LJMP MAIN ORG 000BH

LJMP INT_TIME0ORG 0030H

MAIN: MOV R2,#00H ;如果被测脉冲宽度太长,则累计溢出次数

MOV TMOD,#09H ;设置 T0 为模式 1 ,门控方式MOV TL0,#00H ;设置初值MOV TH0,#00HSETB EA ;开放 T0 中断SETB ET0SETB TR0 ; INT0 引脚高电平到来才会启动 T0JNB P3.2, $ ;等待高电平到来JB P3.2,$ ;高电平到来,启动 T0开始测量CLR TR0 MOV R0,TH0 ; P3.2 低电平,测量结束,保存结果MOV R1,TL0 LJMP $

INT_TIME0: INC R2MOV TL0,#00HMOV TH0,#00HRETI

Page 28: 第 6 章   定时器与计数器

例 6-12 : 电路如图 6-12 所示, P1.0 引脚外接发光二极管 D0 ,要求 D0 以 1s 的间隔闪烁。已经晶振频率= 12M

39 38 37 36 35 34 33 32

21 22 23 2425262728

P00P01P02P03P04P05P06P07

P20P21P22P23P24P25P26P27

10113029

RXDTXD

CLOCK373

P10P11P12P13P14P15P16P17

INT1INT0

T1T0

X1X2

12345678

13121514

1918

RDWR

1716

EA/VP

RESET9

X1X2

VCC

T1T0

LCD DIRINTO

RESET

6264RD6264WD

VCC

1KSP-R2

SP-C310U

SP-C130p SP-C2

30p

SP-CRY11M

8031

SP-U1

NETLAB410

图 6-12 例 6-12 电路原理图

Page 29: 第 6 章   定时器与计数器

例 6-12 源程序代码:ORG 0000H

LJMP MAIN ORG 000BH

LJMP INT_TIME0ORG 0030H

MAIN: MOV P1,#0FFH     ;关所有灯MOV 30H,#00H   ;软件计数器预清 0MOV TMOD,#01H ;定时 / 计数器 0 工作于方式 1MOV TH0,#3CH MOV TL0,#0B0H ;即数 15536SETB EA   ;开总中断允许SETB ET0   ;开定时 / 计数器 0允许SETB TR0   ;定时 / 计数器 0开始运行

LOOP: AJMP LOOP   ;真正工作时 , 这里可写任意程序

INT_TIME0: INC 30H     ;定时器 0 的中断处理程序

MOV A,30HCJNE A, #20,T_END     ; 30H 单元中的值到了 20 了吗 ?CPL P1.0     ;到了 ,取反 P10MOV 30H, #00H     ;清软件计数器

T_END: MOV TH0,# 3CHMOV TL0,# 0B0H    ;重置定时常数RETI

Page 30: 第 6 章   定时器与计数器

例 6-13 设一交通路口设红、黄、绿三盏交通灯,当红灯亮 2s后,黄灯亮 400ms ,绿灯亮 1s ,试用单片机模拟交通灯控制

分析:单片机采用发光二极管模拟交通灯控制,即利用 P1.0~ P 1.2 分别接红、黄、绿三个发光二极管。但是这里用到三个定时时间( 2s、 400ms 、 1s ),难道每个定时时间都编写不同的定时程序,那么如果需要更多的定时时间,怎么办?这里还是采用软件定时器的方式,即找到这几个定时的时间的公约数,利用软件计数器就可以完成不同的延时。

Page 31: 第 6 章   定时器与计数器

例 6-13 源程序如下:NumberOf50ms EQU 30H    ;定义软件定时器

的计数次数ORG 0000HLJMP MAIN

ORG 000Bh LJMP INT_TIME0

ORG 0030H MAIN: CLR P1.0 红灯亮 MOV NumberOf50ms,#28H 延时 2s LCALL DELAY SETB P1.0 红灯灭 CLR P1.1 黄灯亮 MOV NumberOf50ms,#08H 延时 400ms LCALL DELAY SETB P1.1 黄灯灭 CLR P1.2 绿灯亮 MOV NumberOf50ms,#14H 延时 1s LCALL DELAY SETB P1.2 绿灯灭 LJMP MAIN

Page 32: 第 6 章   定时器与计数器

DELAY: SETB ET0SETB EASETB TR0MOV TMOD,#01HMOV TH0,#3CH MOV TL0,#0B0H

DEL_LOOP: MOV A, NumberOf50msCJNE A, #00H,DEL_LOOPCLR TR0RET

;*************************INT_TIME0: CLR EA

MOV TH0,#3CH MOV TL0,#0B0HDEC NumberOf50ms

SETB EASETB ET0RETI

END