定时器及应用-PPT精品
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2020/11/7
2、TMOD寄存器初始化
为把定时器/计数器设定为方式0,则 M1M0= 00 ;为实现定时功能,应使 C/T=0;为实现定时器/计数器1的运行控 制,则GATE =0。定时器/计数器T0不用 ,有关位设定为0,因此TMOD寄存器初 始化为00H。
3、由定时器控制器TCON中的TR1位控制定 时的启动和停止,TR1=1启动 ,TR1=0停 止。
TEST3:JB P3.3,TEST3 ;检测是否到3点 CLR TR1 ;到3点,停止T1计数 MOV 22H,TH1 ;保存T1计数结果 MOV 23H,TL1 LCALL DISP
2020/11S/7JMP $
运行中读定时器/计数器
• 80C51可以随时读写计数寄存器TLx和 THx (x为0或1) ,用于实时显示计数值等 。
2) 使P1.0输出一个方波。 条件:1)两个外部中断源已被使用
2)定时器T1已用于串行口波特率发生器
因此:可利用定时/计数器T0,使之工作在模式3 , 1)利用TL0扩展外部中断源 2)利用TH0作定时器使用,输出方波
2020/11/7
• 设置初值: 1) TL0 = 0FFH 2) 因为输出方波f = 5kHz,故方波周期为 200us,用TH0产生100us的定时,故TH0 的初值X = 256 – (定时时间/机器周期) = 256 - (100us*晶振频率/12) = 156
• 设定T0工作方式,TMOD,TCON.
2020/11/7
• 程序: MOV TMOD,#27H
MOV TL0,#0FFH MOV TH0,#156 MOV TH1,#data MOV TL1, #data MOV TCON,#55H MOV IE,#9FH TL0INT: MOV TL0,#0FFH
•
MOV IE ,#00H
•
SETB TR0
• LOOP: JBC TF0,LOOP1
•
AJMP LOOP
• LOOP1:CPL P1.0
•
AJMP LOOP
; 设置T0为工作方
;设置计数初值
;禁止中断 ;启动定时 ;查询计数溢出
;输出取反 ;重复循环
2020/11/7
• 5、程序设计(中断方式)
2020/11/7
(TH0)=3CH
② 采用定时方式进行溢出次数的累计,计 满10次即得到秒计时。
….. RETI TH0INT: MOV TH0,#156 CPL P1.0 RETI
;T0:模式3,计数方式 ;T1:模式2,定时方式
;一旦加1,马上溢出,申请中断 ;TH0初值 ;根据波特率要求而定
;01010101 ;开放全部中断 ;TL0重新赋值
;TH0重新赋值
2020/11/7
• 低频信号发生器驱动程序 设计一个控制程序,使89c51的P1口输出8
MOV 32H, #4
MOV 33H, #5
MOV 34H, #10
源自文库
MOV 35H, #20
MOV 36H, #50
MOV 37H, #100
MOV TMOD, #1 ;GATE = 0, C/T=0, M1M0 = 01
MOV TL0, #78H ;初值——〉T0
MOV TH0, #0ECH
MOV IE, #82H ;允许T0中断
LJMP MAIN
ORG 2000H
MAIN:MOV TMOD,#99H ;T0、T1均工作在定时,
;模式1,GATE=1
MOV A,#00H
;T0、T1赋计数初值00H,
; 定时最长时间为0000 ~ 65536
MOV TL0,A MOV TH0,A
MOV TL1,A
MOV 2020/11/7 TH1,A
2020/11/7
3、由定时器控制器TCON中的TR0位控制 定时的启动和停止,TR0=1启动 , TR0=0停止。
4、使用中断方式,应开中断 EA 位和ET0位置“1”
2020/11/7
• 5、程序设计(查询方式)
•
MOV TMOD ,#02H
式2
•
MOV TH0 ,#0CEH
•
MOV TL0,#0CEH
PTP0: MOV TL0,#78H MOV TH0,#0ECH CPL P1.0 DJNZ 31H, PF01
数 MOV 31H,#2 CPL P1.1
PF01: DJNZ 32H, PF02 MOV 32H, #4 CPL P1.2
PF02: DJNZ 33H, PF03 MOV 33H, #5
;开中断 ; 定时器1允许中 ;启动定时 ; 等待中断
;输出取反 ;中断返回
• 设某用户系统中已使用了两个外部中断源 ,并置定时器T1工作在模式2,作串行口 波特率发生器用。现要求再增加一个外部 中断源,并由P1.0输出一个5KHz的方波 。Fosc = 12MHz。
2020/11/7
• 分析: 目的:1) 增加一个外部中断;
34H, PF04 34H, #10 P1.4 35H, PF05 35H, #20 P1.5 36H, PF06 36H, #50 P1.6 37H, PF07 37H, #100 P1.7
MAIN: HERE:
MOV SP, #70H ;主程序栈指针初始化
MOV 31H, #2 ;各路计数器置初值
2020/11/7
解:
1、计算计数初值
6MHZ晶振下,一个机器周期为2us,以TH0作重装 载的预置寄存器,TL0作8位计数器,则:
(28-X)*12*1/6=100 ,得 X=206=11001110B=0CEH
把0CEH分别装入TH0和TL0中。 2、TMOD初始化
为把定时器/计数器设定为方式2,则M1M0=10;为 实现定时功能,应使C/T=0;为实现定时器/计数器 0的运行控制,则GATE=0。定时器/计数器T1不用 ,有关位设定为0,因此TMOD寄存器初始化为 0000 0010,即:02H
2020/11/7
解:1、计算计数初值
要产生500us的等宽正方波脉冲,只需在P1.0 端以250us为周期交替输出高低电平即可实 现,为此定时时间为250us。使用6MHZ晶 振,则一个机器周期为2us,方式0为13位 计数结构,设初值为X,则:
(213-X)*12*1/6 =250
得:X=8067,二进制数表示为:11111100 00011,十六进制表示为,高8位为: 0FCH,低5位为:03H。其中高8位装入 TH1,即TH1 = 0FCH,低5位装入TL1, 即 TL1 = 03H。
2020/11/7 CPL P1.3
;T0中断服务程序
;对各路时间计数器进行减1计 ;计数器减为1,恢复计数初值 ;输出取反
PF03: PF04: PF05: PF06: PF07:
2020/11/7
DJNZ MOV CPL DJNZ MOV CPL DJNZ MOV CPL DJNZ MOV CPL RETI
2 . 设立8个计数器
对应于P1.0~P1.7,设立8个计数器,初值分别为1,2,4, 5,10,20,50,100,由T0的溢出中断服务程序对它们 减“1”计数,当减为0时恢复初值,并使相应的口引脚改 变状态,这样就可以使P1口输出所要求的方波。
2020/11/7
• 程序: ORG 0
START: AJMP MAIN ORG 0BH
从秒到分,从分到时是通过软件累加并进行比较的方法来实现 的。
2020/11/7
①假定使用定时器T0,以工作模式1进行 100ms的定时。如fosc=6MHz,则计数初值X 为: ∵ (216-X)×12/(6 × 106 )=100×10-3 s ∴ X=15536=3CB0H 因此 :
(TL0)=0B0H
• 办法是:先读THx,后读TLx,再重读 THx,若两次读得的THx值是一样的,则 可以确定读入的数据是正确的;若两次 读得的THx值不一致,则必须重读。
2020/11/7
例. 飞读
RDTIME: MOV A,TH0 ;读TH0
MOV R0,TL0 ;读TL0并存入R0
CJNE A,TH0,RDTIME ;再读TH0,与上次 ;读入的TH0比较,若不等,重读
•
AJMP LOOP
;查询计数溢出
• LOOP1:MOV TH1,#0FCH
•
MOV TL1,#03H
•
CPL P1.0
•
AJMP LOOP
;重新设置计数初值
;输出取反 ;重复循环
2020/11/7
例3、使用定时器0以工作方式2产生100us定 时,在P1.0输出周期为200us的连续方波脉 冲,已知晶振频率fosc=6MHZ。
SETB TR0
;允许T0计数
SJMP
HERE ;以踏步表示CPU可以处理其他工作
2020/11/7
例 利用定时器T1的模式2对外部信号计 数,要求每计满100次对P1.0端取反。
2020/11/7
解:(1)计算计数初值X 100=28-X X=256-100=156=9CH (2)模式字 TMOD=0110****B=60H (3)程序清单 ;用中断方式 ORG 0000H
MOV R1,A
;存TH0在R1中
RET
2020/11/7
实时时钟的设计
(1)实时时钟实现的基本思想
时钟 就是以秒、分、时为单位进行计时。用定时器与中断的联 合应用。
如何获得1秒的定时,可把定时时间定为100ms,采用中断方式 进行溢出次数的累计,计满10次,即得到秒计时。
片内RAM中规定3个单元作为秒、分、时单元,具体安排如下: 32H:“秒”单元 ;31H:“分”单元;30H:“时”单元
4、使用查询就禁止中断 IE=00H
2020/11/7
• 5、程序设计:
•
MOV TMOD ,#00H ; 设置T1为工作方式
0
•
MOV TH1 ,#0FCH ;设置计数初值
•
MOV TL1,#03H
•
MOV IE ,#00H
;禁止中断
SETB TR1
;启动定时
• LOOP: JBC TF1,LOOP1
定时器及应用
2020/11/7
定时/计数器的基本结构如图所示 :
晶体振荡器
÷12 A S
TL(8) TH(8)
外部计数源 输入引脚
B
控制逻辑
TMOD TCON
图 5-1 定时/计数器结构框图
2020/11/7
• 例1、设单片机晶振频率为6MHZ,使用 定时器1以方式0产生周期为500us的等宽 正方波连续脉冲,并由P1.0输出,以查询 方式完成。
TEST0: JB P3.2,TEST0 ;检测是否到a点 SETB TR0 ;到a点,TR0 = 1,做好取计时值准备。
TEST1: JNB P3.2,TEST1 ;检测是否到1点 SETB TR1 ;到1点T0计时;TR1 = 1,做好T1计时准备。
TEST2:JB P3.2,TEST2 ;检测是否到2点 CLR TR0 ;到2点,停止T0计时,T1开始计时。 MOV 20H,TH0 ;保存T0计时结果 MOV 21H,TL0
MAIN:MOV TMOD,#60H MOV TL1,#156 MOV TH1,#156 MOV IE,#88H SETB TR1 SJMP $
ORG 001BH CPL P1.0 RETI
2020/11/7
例 脉冲参数测量——GATE功能的使用。
脉冲高电平(计数)长度值存于21H、20H中,
脉冲低电平长度存于23H、22H中。
电路连接如下图所示。
被测信号
a
1
2
3
T0计数 T1计数
89C51
P3.2 INT 0
1
P3.3 INT 1
解: 复习GATE的用法: GATE = 0时,TRi = 1,即可启动Ti定时 / 计数
GATE = 1时,TRi = 1,且 INTi =1,才启动定时 / 计数。
2020/11/7
ORG 0000H
路低频方波脉冲,频率分别为100,50, 25,20,10,5,2,1Hz。
2020/11/7
1. 计算定时器初值
使用T0,产生5ms的定时,若晶振选12MHz,则5ms相当 于5000个机器周期,T0应工作在模式1,初值x为: x= 65536-5000=60536,用十六进制表示,则x=0EC78H。 (注意TH,TL分开赋值---因为T0/T1都是16位)
•
MOV TMOD ,#02H
式2
•
MOV TH0 ,#0CEH
•
MOV TL0,#0CEH
•
SETB EA
• 断
SETB ET0
• LOOP: SETB TR0 • HERE: SJMP $
•
AJMP LOOP
• 中断服务程序:
• • 2020/11/7
CPL P1.0 RETI
; 设置T0为工作方 ;设置计数初值
2、TMOD寄存器初始化
为把定时器/计数器设定为方式0,则 M1M0= 00 ;为实现定时功能,应使 C/T=0;为实现定时器/计数器1的运行控 制,则GATE =0。定时器/计数器T0不用 ,有关位设定为0,因此TMOD寄存器初 始化为00H。
3、由定时器控制器TCON中的TR1位控制定 时的启动和停止,TR1=1启动 ,TR1=0停 止。
TEST3:JB P3.3,TEST3 ;检测是否到3点 CLR TR1 ;到3点,停止T1计数 MOV 22H,TH1 ;保存T1计数结果 MOV 23H,TL1 LCALL DISP
2020/11S/7JMP $
运行中读定时器/计数器
• 80C51可以随时读写计数寄存器TLx和 THx (x为0或1) ,用于实时显示计数值等 。
2) 使P1.0输出一个方波。 条件:1)两个外部中断源已被使用
2)定时器T1已用于串行口波特率发生器
因此:可利用定时/计数器T0,使之工作在模式3 , 1)利用TL0扩展外部中断源 2)利用TH0作定时器使用,输出方波
2020/11/7
• 设置初值: 1) TL0 = 0FFH 2) 因为输出方波f = 5kHz,故方波周期为 200us,用TH0产生100us的定时,故TH0 的初值X = 256 – (定时时间/机器周期) = 256 - (100us*晶振频率/12) = 156
• 设定T0工作方式,TMOD,TCON.
2020/11/7
• 程序: MOV TMOD,#27H
MOV TL0,#0FFH MOV TH0,#156 MOV TH1,#data MOV TL1, #data MOV TCON,#55H MOV IE,#9FH TL0INT: MOV TL0,#0FFH
•
MOV IE ,#00H
•
SETB TR0
• LOOP: JBC TF0,LOOP1
•
AJMP LOOP
• LOOP1:CPL P1.0
•
AJMP LOOP
; 设置T0为工作方
;设置计数初值
;禁止中断 ;启动定时 ;查询计数溢出
;输出取反 ;重复循环
2020/11/7
• 5、程序设计(中断方式)
2020/11/7
(TH0)=3CH
② 采用定时方式进行溢出次数的累计,计 满10次即得到秒计时。
….. RETI TH0INT: MOV TH0,#156 CPL P1.0 RETI
;T0:模式3,计数方式 ;T1:模式2,定时方式
;一旦加1,马上溢出,申请中断 ;TH0初值 ;根据波特率要求而定
;01010101 ;开放全部中断 ;TL0重新赋值
;TH0重新赋值
2020/11/7
• 低频信号发生器驱动程序 设计一个控制程序,使89c51的P1口输出8
MOV 32H, #4
MOV 33H, #5
MOV 34H, #10
源自文库
MOV 35H, #20
MOV 36H, #50
MOV 37H, #100
MOV TMOD, #1 ;GATE = 0, C/T=0, M1M0 = 01
MOV TL0, #78H ;初值——〉T0
MOV TH0, #0ECH
MOV IE, #82H ;允许T0中断
LJMP MAIN
ORG 2000H
MAIN:MOV TMOD,#99H ;T0、T1均工作在定时,
;模式1,GATE=1
MOV A,#00H
;T0、T1赋计数初值00H,
; 定时最长时间为0000 ~ 65536
MOV TL0,A MOV TH0,A
MOV TL1,A
MOV 2020/11/7 TH1,A
2020/11/7
3、由定时器控制器TCON中的TR0位控制 定时的启动和停止,TR0=1启动 , TR0=0停止。
4、使用中断方式,应开中断 EA 位和ET0位置“1”
2020/11/7
• 5、程序设计(查询方式)
•
MOV TMOD ,#02H
式2
•
MOV TH0 ,#0CEH
•
MOV TL0,#0CEH
PTP0: MOV TL0,#78H MOV TH0,#0ECH CPL P1.0 DJNZ 31H, PF01
数 MOV 31H,#2 CPL P1.1
PF01: DJNZ 32H, PF02 MOV 32H, #4 CPL P1.2
PF02: DJNZ 33H, PF03 MOV 33H, #5
;开中断 ; 定时器1允许中 ;启动定时 ; 等待中断
;输出取反 ;中断返回
• 设某用户系统中已使用了两个外部中断源 ,并置定时器T1工作在模式2,作串行口 波特率发生器用。现要求再增加一个外部 中断源,并由P1.0输出一个5KHz的方波 。Fosc = 12MHz。
2020/11/7
• 分析: 目的:1) 增加一个外部中断;
34H, PF04 34H, #10 P1.4 35H, PF05 35H, #20 P1.5 36H, PF06 36H, #50 P1.6 37H, PF07 37H, #100 P1.7
MAIN: HERE:
MOV SP, #70H ;主程序栈指针初始化
MOV 31H, #2 ;各路计数器置初值
2020/11/7
解:
1、计算计数初值
6MHZ晶振下,一个机器周期为2us,以TH0作重装 载的预置寄存器,TL0作8位计数器,则:
(28-X)*12*1/6=100 ,得 X=206=11001110B=0CEH
把0CEH分别装入TH0和TL0中。 2、TMOD初始化
为把定时器/计数器设定为方式2,则M1M0=10;为 实现定时功能,应使C/T=0;为实现定时器/计数器 0的运行控制,则GATE=0。定时器/计数器T1不用 ,有关位设定为0,因此TMOD寄存器初始化为 0000 0010,即:02H
2020/11/7
解:1、计算计数初值
要产生500us的等宽正方波脉冲,只需在P1.0 端以250us为周期交替输出高低电平即可实 现,为此定时时间为250us。使用6MHZ晶 振,则一个机器周期为2us,方式0为13位 计数结构,设初值为X,则:
(213-X)*12*1/6 =250
得:X=8067,二进制数表示为:11111100 00011,十六进制表示为,高8位为: 0FCH,低5位为:03H。其中高8位装入 TH1,即TH1 = 0FCH,低5位装入TL1, 即 TL1 = 03H。
2020/11/7 CPL P1.3
;T0中断服务程序
;对各路时间计数器进行减1计 ;计数器减为1,恢复计数初值 ;输出取反
PF03: PF04: PF05: PF06: PF07:
2020/11/7
DJNZ MOV CPL DJNZ MOV CPL DJNZ MOV CPL DJNZ MOV CPL RETI
2 . 设立8个计数器
对应于P1.0~P1.7,设立8个计数器,初值分别为1,2,4, 5,10,20,50,100,由T0的溢出中断服务程序对它们 减“1”计数,当减为0时恢复初值,并使相应的口引脚改 变状态,这样就可以使P1口输出所要求的方波。
2020/11/7
• 程序: ORG 0
START: AJMP MAIN ORG 0BH
从秒到分,从分到时是通过软件累加并进行比较的方法来实现 的。
2020/11/7
①假定使用定时器T0,以工作模式1进行 100ms的定时。如fosc=6MHz,则计数初值X 为: ∵ (216-X)×12/(6 × 106 )=100×10-3 s ∴ X=15536=3CB0H 因此 :
(TL0)=0B0H
• 办法是:先读THx,后读TLx,再重读 THx,若两次读得的THx值是一样的,则 可以确定读入的数据是正确的;若两次 读得的THx值不一致,则必须重读。
2020/11/7
例. 飞读
RDTIME: MOV A,TH0 ;读TH0
MOV R0,TL0 ;读TL0并存入R0
CJNE A,TH0,RDTIME ;再读TH0,与上次 ;读入的TH0比较,若不等,重读
•
AJMP LOOP
;查询计数溢出
• LOOP1:MOV TH1,#0FCH
•
MOV TL1,#03H
•
CPL P1.0
•
AJMP LOOP
;重新设置计数初值
;输出取反 ;重复循环
2020/11/7
例3、使用定时器0以工作方式2产生100us定 时,在P1.0输出周期为200us的连续方波脉 冲,已知晶振频率fosc=6MHZ。
SETB TR0
;允许T0计数
SJMP
HERE ;以踏步表示CPU可以处理其他工作
2020/11/7
例 利用定时器T1的模式2对外部信号计 数,要求每计满100次对P1.0端取反。
2020/11/7
解:(1)计算计数初值X 100=28-X X=256-100=156=9CH (2)模式字 TMOD=0110****B=60H (3)程序清单 ;用中断方式 ORG 0000H
MOV R1,A
;存TH0在R1中
RET
2020/11/7
实时时钟的设计
(1)实时时钟实现的基本思想
时钟 就是以秒、分、时为单位进行计时。用定时器与中断的联 合应用。
如何获得1秒的定时,可把定时时间定为100ms,采用中断方式 进行溢出次数的累计,计满10次,即得到秒计时。
片内RAM中规定3个单元作为秒、分、时单元,具体安排如下: 32H:“秒”单元 ;31H:“分”单元;30H:“时”单元
4、使用查询就禁止中断 IE=00H
2020/11/7
• 5、程序设计:
•
MOV TMOD ,#00H ; 设置T1为工作方式
0
•
MOV TH1 ,#0FCH ;设置计数初值
•
MOV TL1,#03H
•
MOV IE ,#00H
;禁止中断
SETB TR1
;启动定时
• LOOP: JBC TF1,LOOP1
定时器及应用
2020/11/7
定时/计数器的基本结构如图所示 :
晶体振荡器
÷12 A S
TL(8) TH(8)
外部计数源 输入引脚
B
控制逻辑
TMOD TCON
图 5-1 定时/计数器结构框图
2020/11/7
• 例1、设单片机晶振频率为6MHZ,使用 定时器1以方式0产生周期为500us的等宽 正方波连续脉冲,并由P1.0输出,以查询 方式完成。
TEST0: JB P3.2,TEST0 ;检测是否到a点 SETB TR0 ;到a点,TR0 = 1,做好取计时值准备。
TEST1: JNB P3.2,TEST1 ;检测是否到1点 SETB TR1 ;到1点T0计时;TR1 = 1,做好T1计时准备。
TEST2:JB P3.2,TEST2 ;检测是否到2点 CLR TR0 ;到2点,停止T0计时,T1开始计时。 MOV 20H,TH0 ;保存T0计时结果 MOV 21H,TL0
MAIN:MOV TMOD,#60H MOV TL1,#156 MOV TH1,#156 MOV IE,#88H SETB TR1 SJMP $
ORG 001BH CPL P1.0 RETI
2020/11/7
例 脉冲参数测量——GATE功能的使用。
脉冲高电平(计数)长度值存于21H、20H中,
脉冲低电平长度存于23H、22H中。
电路连接如下图所示。
被测信号
a
1
2
3
T0计数 T1计数
89C51
P3.2 INT 0
1
P3.3 INT 1
解: 复习GATE的用法: GATE = 0时,TRi = 1,即可启动Ti定时 / 计数
GATE = 1时,TRi = 1,且 INTi =1,才启动定时 / 计数。
2020/11/7
ORG 0000H
路低频方波脉冲,频率分别为100,50, 25,20,10,5,2,1Hz。
2020/11/7
1. 计算定时器初值
使用T0,产生5ms的定时,若晶振选12MHz,则5ms相当 于5000个机器周期,T0应工作在模式1,初值x为: x= 65536-5000=60536,用十六进制表示,则x=0EC78H。 (注意TH,TL分开赋值---因为T0/T1都是16位)
•
MOV TMOD ,#02H
式2
•
MOV TH0 ,#0CEH
•
MOV TL0,#0CEH
•
SETB EA
• 断
SETB ET0
• LOOP: SETB TR0 • HERE: SJMP $
•
AJMP LOOP
• 中断服务程序:
• • 2020/11/7
CPL P1.0 RETI
; 设置T0为工作方 ;设置计数初值