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

Post on 28-Jan-2016

207 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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

TRANSCRIPT

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

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

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

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

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

• 6.4 定时器的应用

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

• 1 定时器的结构

• 2 定时器的计数功能

• 3 定时器的定时功能

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

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

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

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

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.

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

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

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

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

MOV TL0 , #XL

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

6.3 定时器的四种工作方式

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

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 的关系为:

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 的关系为:

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位申请中断

溢出

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位

串行口

串行口

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

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

• 3 、定时器的应用举例

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

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

. 计算时间常数 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 位位

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

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

( 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

解:①计算初值:方式 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 操作。

解:①计算初值:方式 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

解:频率 = 每秒钟内 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工频交流输入

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

MCS-51 定时 / 计数器 小结

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

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

• 作业: P112 一、二、三

top related