28
第 6 第 MCS-51 第第第第 第第 / 第第第

第 6 章 MCS-51 单片机的 定时 / 计数器

  • Upload
    afia

  • View
    207

  • Download
    0

Embed Size (px)

DESCRIPTION

第 6 章 MCS-51 单片机的 定时 / 计数器. 第 6 章 MCS-51 单片机的 定时 / 计数器. 6.1 定时器的定时与计数功能 6.2 定时器的有关特殊功能寄存器 6.3 定时器的四种工作方式 6.4 定时器的应用. 6.1 定时器的定时与计数功能. 1 定时器的结构 2 定时器的计数功能 3 定时器的定时功能. 1 定时器的结构. 定时器的实质是 16 位 加 1 计数器. 2 定时器的 计数 功能. 设置为 计数器模式时 。在每个机器周期的 S5P2 期间采样 T0 、 T1 引脚电平。 - PowerPoint PPT Presentation

Citation preview

Page 1: 第 6 章  MCS-51 单片机的 定时 / 计数器

第 6 章 MCS-51 单片机的定时 / 计数器

Page 2: 第 6 章  MCS-51 单片机的 定时 / 计数器

第 6 章 MCS-51 单片机的定时 / 计数器

• 6.1 定时器的定时与计数功能

• 6.2 定时器的有关特殊功能寄存器

• 6.3 定时器的四种工作方式

• 6.4 定时器的应用

Page 3: 第 6 章  MCS-51 单片机的 定时 / 计数器

6.1 定时器的定时与计数功能

• 1 定时器的结构

• 2 定时器的计数功能

• 3 定时器的定时功能

Page 4: 第 6 章  MCS-51 单片机的 定时 / 计数器

1 定时器的结构• 定时器的实质是 16 位加 1 计数器

GATE

C/T

M1 M0 GATE

C/T

M1 M0

TH1 TL1 TH0 TL0

T1方式 T0方式

T1引脚 T0引脚机器周期脉冲

内部总线

TMODTCON

外部中断相关位

TF1

TR1

TF0

TR0

Page 5: 第 6 章  MCS-51 单片机的 定时 / 计数器

2 定时器的计数功能•设置为计数器模式时。在每个机器周期的 S5P2 期间采样 T0 、 T1引脚电平。

•当晶振频率为 12MHz 时,最高计数频率不超过 1/2MHz ,即计数脉冲的周期要大于 2 s 。

S1 S2 S3 S4 S5 S6 S1 S2 S3 S4 S5 S6 S1 S2 S3 S4 S5 S6 S1

M1 M2 M3

采样1 采样0 加1

Page 6: 第 6 章  MCS-51 单片机的 定时 / 计数器

3 定时器的定时功能•设置为定时器模式时:加 1 计数器是对内部机器周期计数( 1 个机器周期等于 12 个振荡周期,即计数频率为晶振频率的 1/12 )。•计数值 N 乘以机器周期 Tcy 就是定时时间 t 。

GATE

C/T

M1 M0 GATE

C/T

M1 M0

TH1 TL1 TH0 TL0

T1方式 T0方式

T1引脚 T0引脚机器周期脉冲

内部总线

TMODTCON

外部中断相关位

TF1

TR1

TF0

TR0

Page 7: 第 6 章  MCS-51 单片机的 定时 / 计数器

6.2 定时器的有关寄存器

GATE

C/T

M1 M0 GATE

C/T

M1 M0

TH1 TL1 TH0 TL0

T1方式 T0方式

T1引脚 T0引脚机器周期脉冲

内部总线

TMODTCON

外部中断相关位

TF1

TR1

TF0

TR0

Page 8: 第 6 章  MCS-51 单片机的 定时 / 计数器

6.2.1 TCON 定时器控制 / 状态寄存器

1 )启动控制位 TR0 、 TR1=0 ,停止定时器工作 ;=1 ,启动定时器工作例:启动 T0 : SETB TR0 停止 T0 : CLR TR02 )溢出中断溢出中断标志位 TF0 、 TF1定时器溢出时 , 由硬件置位 TFx=1 ;若中断开放中断开放,向 CPU 请求中断, CPU 响应 Tx 中断后,自动清 0 TFx 。若中断禁止中断禁止,可用软件检测 TFx (判跳),必须软件清 0 。

WAIT : JBC TF0 , NEXT ;检测 T0 是否溢出,溢出, TF0 清 0 。SJMP WAIT ;未溢出,继续检测

NEXT : … ;处理溢出

D0D1D2D3D4D5D6D7

IT0IE0IT1IE1TR0TF0TR1TF1

88898A8B8C8D8E8F位地址TCONTCON

字节地址字节地址88H88H 位定义

JNB TF0, $ JNB TF0, $ ;; 检测检测 T0T0 是否溢出是否溢出 ,, 未溢出,继续检未溢出,继续检测测 CLR TF0CLR TF0 ;; 溢出,溢出, TF0TF0 清清 0.0.

………… ;; 处理溢出处理溢出 ..

Page 9: 第 6 章  MCS-51 单片机的 定时 / 计数器

6.2.2 TMOD 定时器方式寄存器( 89H )

2 )功能选择位 C/T : =0 ,定时功能,计数内部机器周期脉冲; =1 ,计数功能,计数引脚 T0(T1) 输入的负脉冲。3 )方式选择位 M1 、 M0 : 4 种工作方式: 13/16/8 位

1 )门控方式选择位 GATE : =0 ,非门控方式 ( 内部启动 ) :

只要 TRx=1 ,就启动定时器工作;只要 TRx=0 ,就停止定时器工作。

=1 ,门控方式 ( 外启动 ) :只有当 TRx=1 且引脚 INTx=1 才启动定时器。

确定定时器工作方式指令: MOV TMOD , # 方式字;字节访问字节访问例:设 T0 用方式 2 非门控定时, T1 用方式 1 门控计数。

MOV TMOD , #

GATE C/T M1 M0 GATE C/T M1 M0

T1 T0

M1 M0 方式 功能描述0 0 0 13位0 1 1 16位1 0 2 8位自动重装1 1 3 T0为两个 8位

11010010B

Page 10: 第 6 章  MCS-51 单片机的 定时 / 计数器

6.2.3 定时器的计数数据寄存器 TH1 TL1 、 TH0 TL08DH 8CH 、 8BH 8AH

可预置初值的 1616 位加位加 11 计数器 TH0 、 TL0 、 TH1 、 TL1预置 T0 初值指令: MOV TH0 , #XH

MOV TL0 , #XL

任何时候都可对它的当前值进行读 / 写操作,它们都只能字节寻址。

Page 11: 第 6 章  MCS-51 单片机的 定时 / 计数器

6.3 定时器的四种工作方式

Page 12: 第 6 章  MCS-51 单片机的 定时 / 计数器

6.3.1 定时 / 计数器的工作方式 0 方式 0 为 13 位计数,由 TL0 的低 5 位(高 3 位未用)和 TH0 的 8 位组成加 1 计数器。 TL0 的低 5位溢出时向 TH0 进位, TH0 溢出时,置位 TCON 中的 TF0 标志,向 CPU 发出中断请求。

TF1

TR1

TF0

TR0

GATE

C/ T

M1

M0

GATE

C/ T

M1

M0

1

&

1≥

1

0

T0引脚

I NT0引脚

0

0

机器周期

TH0 TL0

8位 5位

溢出

TCONTMOD

D0

D7

D7

D0申请中断

1

Page 13: 第 6 章  MCS-51 单片机的 定时 / 计数器

16X=2 -N

6.3.2 定时 / 计数器的工作方式 1方式 1 的计数位数是 16 位,由 TL0 作为低 8 位、TH0 作为高 8 位,组成了 16 位加 1 计数器 。

TF1

TR1

TF0

TR0

GATE

C/ T

M1

M0

GATE

C/ T

M1

M0

1

&

1≥

1

0

T0引脚

I NT0引脚

1

0

机器周期

TH0 TL0

8位 8位

溢出

TCONTMOD

D0

D7

D7

D0申请中断

计数个数 N 与计数初值 X 的关系为:

Page 14: 第 6 章  MCS-51 单片机的 定时 / 计数器

8X=2 -N

6.3.3 定时 / 计数器的工作方式 2

方式 2 为自动重装初值的 8 位计数方式。

工作方式 2 特别适合于用作较精确的脉冲信号发生器。如:串行口波特率发生器的使用

TF1

TR1

TF0

TR0

GATE

C/ T

M1

M0

GATE

C/ T

M1

M0

1

&

1≥

1

0

T0引脚

I NT0引脚

10

机器周期

TH0

TL0

8位

溢出

TCONTMOD

D0

D7

D7

D0申请中断

计数个数 N 与计数初值 X 的关系为:

Page 15: 第 6 章  MCS-51 单片机的 定时 / 计数器

6.3.4 定时 / 计数器的工作方式 3 方式 3 只适用于定时 / 计数器 T0 ,将 T0 分成为两个独立的 8 位计数器 TL0 和 TH0 。

TL0 作为定时 / 计数器: TL0 占用原 T0 控制位及相关引脚:其操作和功能与方式 0 、 1 基本相同TH0 仅作定时器: TH0 占用 T1 控制位: TR1 、 TF1 及 T1 中断源。

TF1

TR1

TF0

TR0

GATE

C/ T

M1

M0

GATE

C/ T

M1

M0

1

&

1≥

1

0

T0引脚

I NT0引脚

11

机器周期

TH0

TL0

8位

溢出

TCONTMOD

D0 D7

D0申请中断

机器周期

8位申请中断

溢出

Page 16: 第 6 章  MCS-51 单片机的 定时 / 计数器

6.3.4 定时 / 计数器的工作方式 3 定时器 T0 工作于方式 3 时, T1 只能工作在方式 0 、 1 、 2

计数溢出时输出送串行口,此时 T1 作为串行口波特率发生器使用。以确定串行通讯的速率。启动:设置好工作方式 0 、 1 、 2 时相当于 TR1=1,T1 便自动开始运行 ;

停止:当设置为工作方式 3 时相当于 TR1=0 , T1 停止计数。

GATE

C/ T

M1

M0

GATE

C/ T

M1

M0

1

0

T1引脚 P3. 5

12分频

TH1

TL1

8位

溢出

TMOD

D7

D0

重载入

10

fosc

1

0

T1引脚 P3. 5

12分频

TH1 TL1

8位

溢出 0X

fosc8或5位

8位

串行口

串行口

Page 17: 第 6 章  MCS-51 单片机的 定时 / 计数器

6.4 定时器的应用• 1 、定时器的初始化编程初始化编程

• 2 、定时器的溢出处理溢出处理编程格式

• 3 、定时器的应用举例

Page 18: 第 6 章  MCS-51 单片机的 定时 / 计数器

1 、定时器初始化编程定时器初始化编程使用定时器工作之前,先写入方式、控制寄存器,确定好

定时器工作方式:

①MOV TMOD , # 方式字 ; 启动方式选择(内外共同启动 / 内启动)

功能选择—(计数 / 定时) 位数选择— ( 8/13/16 位)②MOV THx , #XH ;计算时间常数 X ,MOV TLx , #XL ; Tx 时间常数初值装入数据寄存器 ,③ (SETB EA ) ;开 Tx 中断(SETB ETx) ④SETB TRx ;启动控制 Tx 定时器(启动 / 停止)

GATE C/T M1 M0 GATE C/T M1 M0

定时器初始化编程:在主程序中进行

Page 19: 第 6 章  MCS-51 单片机的 定时 / 计数器

. 计算时间常数 X( 计算初值 )

计数功能: X= 2n - 计数值 N n : 13/16/8

定时功能: X= 2n - t/T t :定时时间 s 、 T :机器周期 s

由于计数器是加 1 计数器,并在益处时产生中断请求益处时产生中断请求,

因此不能将计数值 N 送入计数器作为初值 X ,而应送入计数值的补码补码数作为初值

计数器运行之前,需要预先给定初值

. 预置初值方式 0 MOV THx , #X 高 8

MOV TLx , #X 低低 55

位位

方式 1 MOV THx , #X 高 8

MOV TLx , #X 低 8

方式 2 MOV THx , #X8

MOV TLx , #X8

方式 3 MOV TH0 , #X8 位

MOV TL0 , #YY88 位位

Page 20: 第 6 章  MCS-51 单片机的 定时 / 计数器

2 、 溢出处理溢出处理编程格式及初值恢复初值恢复方式(自动重装 / 软件重装软件重装)1 )查询方式:先查询定时器溢出标志,再进行溢出处理。

… ;定时器初始化WAITWAIT :: JBC JBC TFxTFx ,, PT PT ;;检测检测溢出标志溢出标志

SJMP WAITPTPT :: MMOOVV THxTHx ,, #X#XH H ;;软件恢复初值,软件恢复初值,重装时间常数重装时间常数

MMOOVV TLxTLx ,, #X#XLL… ;溢出处理

SJMP WAIT2 )中断方式:初始化后执行其他任务,中断服务程序中处理溢出

ORG 0000HLJMP MAINORG 000BH(001BH) ; T0 ( T1 )中断入口LJMP PTSMAIN :… ;初始化后执行其他程序PTS : MOV THx , #XH ;软件重装时间常数MOV TLx , #XL… ;溢出中断服务程序RETI

Page 21: 第 6 章  MCS-51 单片机的 定时 / 计数器

3 、定时器的应用举例【例 6-2 、 3】 :设 fosc=12MHz 。由 P1.0 输出周期

为 2ms 的等宽度连续方波,使用 T1 的方式 0 、 1 。2ms

解:每隔 1ms改变一次 P1.0 的输出状态。用 T1 非门控方式定时。计算时间常数:方式 1 : X = 216 - t/T = 216 -1000/1 = FC18H

( 1 )查询方式:ORG 0000H

START:MOV TMOD, #10H ; (主程序开始)定时器 T1 工作方式 1CLR P1.0 ; 设置方波的起始状态MOV TL1, #18HMOV TH1, #0FCH ; 送初值,保证定时时间为 1msSETB TR1 ; 启动定时器

LOOP: JNB TF1, $ ; 查询是否溢出,等待 1ms 定时到MOV TL1, #18H ; 溢出处理MOV TH1, #0FCH ; 再送计数初值,保证定时时间始终为 1

msCLR TF1 ; 清溢出标志,以便下次判断CPL P1.0 ; 改变 P1.0 的状态SJMP LOOP ; 产生连续的方波END

方式方式 00 :: X = 2X = 21313 - t/T = 2 - t/T = 21313 -1000/1 = 1C18H -1000/1 = 1C18H

0000 0000B0000 0000B

MOVMOV TL0TL0 ,, #18H M#18H MOVOV TH0TH0 ,, #0E0H#0E0H

。。。。。。。。MOVMOV TL0TL0 ,, #18H M#18H MOVOV TH0TH0 ,, #0E0H#0E0H

Page 22: 第 6 章  MCS-51 单片机的 定时 / 计数器

( 2 )中断方式ORG 0000HAJMP START ; 跳转主程序ORG 001BHLJMP PITO1 ; 跳转中断服务程序ORG 0100H

START:MOV SP, #60H ; 堆栈初始化MOV TMOD, #10H ; (主程序开始)定时器 T1 工作方式 1MOV TH1, #0FCH ; 设置计数初值MOV TL1, #18HCLR P1.0 ; 设置方波的起始状态SETB EA ; 开中断SETB ET1SETB TR1 ; 启动定时器SJMP $ ; 等待中断

PITO1: MOV TL1, #18HMOV TH1, #0FCH ; 再送计数初值,保证定时时间始终为 1m

sCPL P1.0 ; 输出方波RETI ; 中断返回END

00000000B 00000000B MOVMOV TL0TL0 ,, #18H M#18H MOVOV TH0TH0 ,, #0E0H#0E0H

MOVMOV TL0TL0 ,, #18H M#18H MOVOV TH0TH0 ,, #0E0H#0E0H

Page 23: 第 6 章  MCS-51 单片机的 定时 / 计数器
Page 24: 第 6 章  MCS-51 单片机的 定时 / 计数器

解:①计算初值:方式 2 : X = 28 - 100 = 156 = 9CH

②TMOD 初始化: GATE=0 , C/T=1 , M1M0=10BORG 0000HAJMP START ; 转主程序

ORG 0100HSTART:MOV IE, #00H ; (主程序开始)关中断

MOV TMOD, #06H ; 设置定时器 T0 方式 2 计数MOV TH0, #9CH ; 设置计数初值MOV TL0, #9CHSETB TR0 ; 启动计数

LOOP: JBC TF0, LOOP1 ; 查询计数是否计满溢出SJMP LOOP

LOOP1:INC A ; 累加器加 1SJMP LOOPEND

【例 6-4 】用 T0 以工作方式 2 计数,每计 100 次进行累加器加 1 操作。

Page 25: 第 6 章  MCS-51 单片机的 定时 / 计数器

解:①计算初值:方式 2 : X = 28 – t(fosc/12)=256-100(6/12)=CEH

②TMOD 初始化: GATE=0 , C/T=0 , M1M0=10BORG 0000H

START:MOV TMOD, #02H; 定时器 T0 工作方式 2

CLR P1.0 ; 设置方波的起始状态MOV TL0, #0CEH ; 送计数初值 ,

MOV TH0, #0CEH ; 保证定时时间始终为 100μs

SETB TR0 ; 启动定时器LOOP:JNB TF0, $ ; 等待 100μs 定时到

CLR TF0 ; 清溢出标志,以便下次判断CPL P1.0 ;改变 P1.0 的状态SJMP LOOP ;产生连续的方波END

【例 6-5 】用 T0 以工作方式 2 产生 5kHz 的连续方波,并由 P1.0 输出。设 fosc=6MHz ,查询方式。

200μs

Page 26: 第 6 章  MCS-51 单片机的 定时 / 计数器

解:频率 = 每秒钟内 T0 输入的脉冲数

T0 :计数方式 2 , T1 :定时方式 1

① 计算基准初值: T1 定时方式 1 : X = 216 – t(fosc/12) =65536-125000(6/12)

=0BDCH

②TMOD 初始化: T1 : GATE=0 , C/T=0,M1M0=01BT0 : GATE=0 , C/T=1,M1M0=10B

【例 6-7 】用单片机的定时器设计一个工频计,并用二极管以二进制形式显示所测频率。设 fosc=6MHz

8051

L8 1k

L7 1k

L6 1k

L5 1k

L4 1k

L3 1k

L2 1k

L1 1k

Acc

P1.7

P1.6

P1.5

P1.4

P1.3

P1.2

P1.1

P1.0

T0工频交流输入

Page 27: 第 6 章  MCS-51 单片机的 定时 / 计数器

ORG 0000H

AJMP MAIN

ORG 001BH

AJMP T_1

ORG 0100H

MAIN: MOV SP, #60H ;堆栈初始化MOV P1,#00 ;测量前显示0MOV TMOD, #16H ; T0计数方式2,定时器T1定时方式1MOV TH0, #00H ;设置T0计数初值MOV TL0, #00HMOV TH1, #0BH ;设置T1定时初值125msMOV TL1, #0DCHMOV R3,#8;设置软件计数器SETB EA ;开中断SETB ET1ORL TCON,#0101000B;同时启动定时器T1和计数器T0SJMP $ ;等待中断

T_1: DJNZ R3,NEXT ;1s 时间未到则中断返回,继续定时ANL TCON , #10001111B;1s 定时到,同时关闭 T1 、 T0MOV A , TL0 ;读出频率值到 ACPL A ;取反,低电平点亮二极管MOV P1 , A ;送 P1 口进行显示MOV TH0, #00H ; 重新设置 T0 计数初值MOV TL0, #00HMOV TH1, #0BH ; 重新设置 T1 定时初值 125msMOV TL1, #0DCHMOV R3 , #8 ; 重新设置软件计数器ORL TCON , #0101000B; 同时启动定时器 T1 和计数器 T0RETI ; 中断返回

EXIT: MOV TH1, #0BH ; 1s 未到 , 重新设置 T1 定时初值 125msMOV TL1, #0DCHRETI ; 中断返回END

Page 28: 第 6 章  MCS-51 单片机的 定时 / 计数器

MCS-51 定时 / 计数器 小结

• 1 、定时 / 计数器的结构?• 2 、定时 / 计数器的四种工作方式 ?

• 3 、定时 / 计数器的初始化编程 ?• 4 、定时 / 计数器的溢出处理方式?

• 作业: P112 一、二、三