第 6 章 mcs-51 单片机的 定时 / 计数器
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 PresentationTRANSCRIPT
![Page 1: 第 6 章 MCS-51 单片机的 定时 / 计数器](https://reader033.vdocuments.site/reader033/viewer/2022061323/56815723550346895dc4c2ed/html5/thumbnails/1.jpg)
第 6 章 MCS-51 单片机的定时 / 计数器
![Page 2: 第 6 章 MCS-51 单片机的 定时 / 计数器](https://reader033.vdocuments.site/reader033/viewer/2022061323/56815723550346895dc4c2ed/html5/thumbnails/2.jpg)
第 6 章 MCS-51 单片机的定时 / 计数器
• 6.1 定时器的定时与计数功能
• 6.2 定时器的有关特殊功能寄存器
• 6.3 定时器的四种工作方式
• 6.4 定时器的应用
![Page 3: 第 6 章 MCS-51 单片机的 定时 / 计数器](https://reader033.vdocuments.site/reader033/viewer/2022061323/56815723550346895dc4c2ed/html5/thumbnails/3.jpg)
6.1 定时器的定时与计数功能
• 1 定时器的结构
• 2 定时器的计数功能
• 3 定时器的定时功能
![Page 4: 第 6 章 MCS-51 单片机的 定时 / 计数器](https://reader033.vdocuments.site/reader033/viewer/2022061323/56815723550346895dc4c2ed/html5/thumbnails/4.jpg)
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 单片机的 定时 / 计数器](https://reader033.vdocuments.site/reader033/viewer/2022061323/56815723550346895dc4c2ed/html5/thumbnails/5.jpg)
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 单片机的 定时 / 计数器](https://reader033.vdocuments.site/reader033/viewer/2022061323/56815723550346895dc4c2ed/html5/thumbnails/6.jpg)
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 单片机的 定时 / 计数器](https://reader033.vdocuments.site/reader033/viewer/2022061323/56815723550346895dc4c2ed/html5/thumbnails/7.jpg)
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 单片机的 定时 / 计数器](https://reader033.vdocuments.site/reader033/viewer/2022061323/56815723550346895dc4c2ed/html5/thumbnails/8.jpg)
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 单片机的 定时 / 计数器](https://reader033.vdocuments.site/reader033/viewer/2022061323/56815723550346895dc4c2ed/html5/thumbnails/9.jpg)
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 单片机的 定时 / 计数器](https://reader033.vdocuments.site/reader033/viewer/2022061323/56815723550346895dc4c2ed/html5/thumbnails/10.jpg)
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 单片机的 定时 / 计数器](https://reader033.vdocuments.site/reader033/viewer/2022061323/56815723550346895dc4c2ed/html5/thumbnails/11.jpg)
6.3 定时器的四种工作方式
![Page 12: 第 6 章 MCS-51 单片机的 定时 / 计数器](https://reader033.vdocuments.site/reader033/viewer/2022061323/56815723550346895dc4c2ed/html5/thumbnails/12.jpg)
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 单片机的 定时 / 计数器](https://reader033.vdocuments.site/reader033/viewer/2022061323/56815723550346895dc4c2ed/html5/thumbnails/13.jpg)
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 单片机的 定时 / 计数器](https://reader033.vdocuments.site/reader033/viewer/2022061323/56815723550346895dc4c2ed/html5/thumbnails/14.jpg)
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 单片机的 定时 / 计数器](https://reader033.vdocuments.site/reader033/viewer/2022061323/56815723550346895dc4c2ed/html5/thumbnails/15.jpg)
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 单片机的 定时 / 计数器](https://reader033.vdocuments.site/reader033/viewer/2022061323/56815723550346895dc4c2ed/html5/thumbnails/16.jpg)
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 单片机的 定时 / 计数器](https://reader033.vdocuments.site/reader033/viewer/2022061323/56815723550346895dc4c2ed/html5/thumbnails/17.jpg)
6.4 定时器的应用• 1 、定时器的初始化编程初始化编程
• 2 、定时器的溢出处理溢出处理编程格式
• 3 、定时器的应用举例
![Page 18: 第 6 章 MCS-51 单片机的 定时 / 计数器](https://reader033.vdocuments.site/reader033/viewer/2022061323/56815723550346895dc4c2ed/html5/thumbnails/18.jpg)
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 单片机的 定时 / 计数器](https://reader033.vdocuments.site/reader033/viewer/2022061323/56815723550346895dc4c2ed/html5/thumbnails/19.jpg)
. 计算时间常数 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 单片机的 定时 / 计数器](https://reader033.vdocuments.site/reader033/viewer/2022061323/56815723550346895dc4c2ed/html5/thumbnails/20.jpg)
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 单片机的 定时 / 计数器](https://reader033.vdocuments.site/reader033/viewer/2022061323/56815723550346895dc4c2ed/html5/thumbnails/21.jpg)
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 单片机的 定时 / 计数器](https://reader033.vdocuments.site/reader033/viewer/2022061323/56815723550346895dc4c2ed/html5/thumbnails/22.jpg)
( 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 单片机的 定时 / 计数器](https://reader033.vdocuments.site/reader033/viewer/2022061323/56815723550346895dc4c2ed/html5/thumbnails/23.jpg)
![Page 24: 第 6 章 MCS-51 单片机的 定时 / 计数器](https://reader033.vdocuments.site/reader033/viewer/2022061323/56815723550346895dc4c2ed/html5/thumbnails/24.jpg)
解:①计算初值:方式 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 单片机的 定时 / 计数器](https://reader033.vdocuments.site/reader033/viewer/2022061323/56815723550346895dc4c2ed/html5/thumbnails/25.jpg)
解:①计算初值:方式 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 单片机的 定时 / 计数器](https://reader033.vdocuments.site/reader033/viewer/2022061323/56815723550346895dc4c2ed/html5/thumbnails/26.jpg)
解:频率 = 每秒钟内 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 单片机的 定时 / 计数器](https://reader033.vdocuments.site/reader033/viewer/2022061323/56815723550346895dc4c2ed/html5/thumbnails/27.jpg)
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 单片机的 定时 / 计数器](https://reader033.vdocuments.site/reader033/viewer/2022061323/56815723550346895dc4c2ed/html5/thumbnails/28.jpg)
MCS-51 定时 / 计数器 小结
• 1 、定时 / 计数器的结构?• 2 、定时 / 计数器的四种工作方式 ?
• 3 、定时 / 计数器的初始化编程 ?• 4 、定时 / 计数器的溢出处理方式?
• 作业: P112 一、二、三