400 likes | 554 Views
第 6 章 定时器及应用. 定时 / 计数器是一种应用非常广泛的硬件逻辑电路,它有两种不同的工作方式 ---- “ 定时 ” 、 “ 计数 ” 。. 6.1 定时器概述. 1 、 定时 : 产生一个标准的时间间隔 ( 对等间隔脉冲计数)。 如 20mS,100mS 或 1000 mS 等。单片机使用这种方式可以产生一个符合某一要求的脉冲方波 ( 如下图 ) 。. 输出波形. MCS-51 P x.y. 20mS. 40mS. 2 、 计数 : 对外部的事件 ( 脉冲 ) 进行统计。
E N D
定时/计数器是一种应用非常广泛的硬件逻辑电路,它有两种不同的工作方式----“定时”、“计数”。定时/计数器是一种应用非常广泛的硬件逻辑电路,它有两种不同的工作方式----“定时”、“计数”。 6.1 定时器概述
1、定时:产生一个标准的时间间隔(对等间隔脉冲计数)。1、定时:产生一个标准的时间间隔(对等间隔脉冲计数)。 如20mS,100mS或1000mS等。单片机使用这种方式可以产生一个符合某一要求的脉冲方波(如下图)。 输出波形 MCS-51 P x.y 20mS 40mS
2、计数:对外部的事件(脉冲)进行统计。 很明显外部事件的发生是随机的,单片机不可能预知外部事件何时发生,但能对间隔可能不相等的脉冲进行统计计数。当达到所要求的计数值时,单片机进行相应的操作。 MCS-51 T0 ( T1) 端口 外部 设备 外部脉冲
定时/计数器的基本模型 溢出标志 计数脉冲 CP TF 8位的加1计数器
8051定时/计数器的工作原理 (1):何时控制启动计数器? 思考: (2):如何控制是定时还是计数? (3):如何控制定时/计数的长短? 系统内部 时钟fosc/12 C/T=0 计数脉冲CP 定时/计数 控制C/T TF N位增量计数器 计数器溢出 (中断信号) C/T=1 N位初值寄存器 外部脉冲 T0或T1引脚 启动控制 TR MCS-51单片机定时器模型
由启动控制开关TR来控制计数器是否计数: 当TR=0时:计数器计数脉冲被断开,所以停止工作; 当TR=1时:计数器的计数脉冲输入端与信号源接通, 计数器开始计数(工作)。 定时、计数方式由C/T控制。 当C/T=1时:多路器选择的是系统时钟(fosc/12), 即定时方式; 当C/T=1时:多路器选择的是外部(T0或T1引脚)输入, 即计数方式。 定时/计数的长短由初值寄存器中的计数初值来设定。
作定时器用:每个机器周期计数器加1,计数速率是fosc/12.作定时器用:每个机器周期计数器加1,计数速率是fosc/12. 作计数器用:用2个机器周期识别一个脉冲下降沿,故最快计数速率是fosc/24.
模式0 :13位计数器模式 模式1 :16位计数器模式 模式2 :8位自动重装初值模式 模式3 :拆分/组合扩展8位模式 定时/计数器的四种工作模式
1、模式0:13位计数器模式 13位计数器在某一个初值的基础上加1计数,当计数器计满为全“1”,再来一个计数脉冲时,就产生一个“溢出中断信号”TF1=1。 启动控制 震荡器 1/12 13位加1计数器 C/T=0 TF1 TH1 TL1 中断 C/T=1 T1 引脚 (8位) (低5位) TR1 高三位弃用 GATE INT1
GATE=0时,TR1=1开始定时/计数; GATE=1时(门控方式), TR=1且INT1=1时,开始工作.此种方式主要用于测量加在INT1脚上一个正脉冲的脉宽。 启动控制 16位加1计数器 震荡器 1/12 C/T=0 TL1 TH1 TF1 中断 C/T=1 T1 引脚 (8位) (8位) TR1 GATE INT1 2、模式1 :既16位计数器模式(以T1为例)
由TL1做计数器,TH1做初值寄存器, 工作前TL1,TH1分别预置相同的初值。 TL1计数时, 当产生溢出的同时, 将TH1中的初值自动重装TL1。TL1继续计数……,此模式主要用于做串行口波特率发生器。 震荡器 1/12 控制 8位加1计数器 C/T=0 TL1(8位) TF1 中断 C/T=1 T1 引脚 TR1 TH1(8位) GATE 8位初值寄存器 INT1 3、模式2: 8位自动重装初值模式
在这种模式中,单片机将T0和T1重新进行“拆分、组合”,将T0变为由TH0,TL0组成的两个独立的8位定时/计数器。在这种模式中,单片机将T0和T1重新进行“拆分、组合”,将T0变为由TH0,TL0组成的两个独立的8位定时/计数器。 将T1设定在模式3则相当于停止工作。 震荡器 1/12 控制 C/T=0 TL0 TF0 中断 C/T=1 T0 引脚 TR0 GATE 控制 INT0 TH0 TF1 中断 Fosc/12 TR1 4、模式3拆分/组合扩展模式 在模式3时的模式中定时器T0的结构图
模式3下T0(TH0,TL0)及T1的各自特点: 1、TH0计数脉冲来自内部fosc,所以它只能处于”定时”方式; 2、TH0分别借用了定时器T1的TR1和TF1为自己服务,使TH0能象TL0那样用TR1启动定时,并用TF1来作为TH0的溢出中断的标志; 3、 此时,由于T1缺少了启动控制信号TR1和溢出中断标志TR1,那么在模式3时,T1是如何启动和工作? 没有溢出中断标志TF1,则T1就不用中断方式工作(实际上连查询也不行);没有启动控制信号TR1,可以让它在模式3之前就开始工作,并且让它事先设定为自动重装模式. 4、 模式3就是将单片机原有的T0,T1两个计数器变成三个独立的计数器,其中T1要事先设定为模式2(串行口的波特率发生器)并启动起来。 注:8051系统只有T1能作串行口的波特率发生器。
TL0八位定时/计数器 TF0 将T0分解为两个计数器 TL0和TH0,其中TH0借 用了T1的TR1和TF1 TH0八位定时器 TF1 T1已无TR1,TF1功能, 建议T1做波特率发生器 T1(TL1,TH1)自动重装模式 TH0,TL0和T1三个计数器 模式3时T0,T1的电路结构
6.2.1 工作模式寄存器TMOD 6.2 定时器的控制
6.3.1模式0应用 6.3 定时器四种模式应用 模式0定时时间计算公式:
例1:设定时器T0选择工作模式0,定时时间为1ms,fosc=6MHz,试确定T0初值,计算最大定时时间.例1:设定时器T0选择工作模式0,定时时间为1ms,fosc=6MHz,试确定T0初值,计算最大定时时间. 解:X=8192-500=7692=1111000001100B (TH0)=0F0H,(TL0)=0CH 最大定时T=16.384ms 例2:设T0工作在模式0,定时时间为1ms,fosc=6MHz.在P1.0引脚输出2ms方波,编写其定时功能程序 解:(1)分析: (2)选择工作方式:计算T0初值X (3)程序: a.采用中断方式 b.采用查询方式
ORG 0000H AJMP MAIN ORG 000BH AJMP ITOP ORG 0100H MAIN: MOV SP,#60H ACALL PTOMD HERE: AJMP HERE PTOMD: MOV TMOD,#00H MOV TL0,#0CH MOV TH0,#F0H SETB TR0 SETB ET0 SETB EA RET ;中断服务程序 ORG 0120H ITOP: MOV TL0,#0CH MOV TH0,#0F0H CPL P1.0 RETI
查询方式: ORG 0000H AJMP MAIN ORG 0100H MAIN: MOV SP,#60H MOV TMOD,#00H MOV TL0,#0CH MOV TH0,#0F0H SETB TR0 LOOP: JBC TF0,NEXT SJMP LOOP NEXT: MOV TL0,#0CH MOV TH0,#0F0H CPL P1.0 SJMP LOOP
6.3.2 模式1应用 模式1定时时间计算公式:
例3:用定时器T1产生一个50hz的方波,由P1.1输出,程序使用查询方式,fosc=12MHz.例3:用定时器T1产生一个50hz的方波,由P1.1输出,程序使用查询方式,fosc=12MHz. 解:(1)求定时器初值:T=1/50=0.02s,T1定时10ms,初值X=D8F0h (2)程序: MOV TMOD,#10H SETB TR1 LOOP: MOV TH1,#0D8H MOV TL1,#0F0H JNB TF1,$ CLR TF1, CPL P1.1 SJMP LOOP
模式2定时时间公式: 6.3.3 模式2应用
例4:当P3.4引脚上的电平发生负跳变时,从P1.0输出一个500us的同步脉冲。例4:当P3.4引脚上的电平发生负跳变时,从P1.0输出一个500us的同步脉冲。 解: (1) 模式选择: 先设T0为模式2,外部计数方式(TMOD:06H) 当P3.4负跳变时,T0计数器加1溢出,改为T0为500us定时工作方式(TMOD:02H) (2) 初值计算: 外部计数方式: X+1=2^8,X=0ffh 定时方式:X=(2^8-250)=6h (3) 程序:
START: MOV TMOD,#06H MOV TH0,#0FFH MOV TL0,#0FFH SETB TR0 LOOP1: JBC TF0,PTFO1 SJMP LOOP1 PTFO1: CLR TR0 MOV TMOD,#02H MOV TL0,#06H MOV TH0,#06H CLR P1.0 SETB TR0 LOOP2: JBC TF0,PTFO2 SJMP LOOP2 PTFO2: SETB P1.0 CLR TR0 SJMP START
解: (1)模式选择: 模式2,计数方式 (2)计算T1的初值:156(9CH) (3)程序 MAIN:MOV TMOD,#60H MOV TL1,#9CH MOV TH1,#9CH MOV IE,#88H SETB TR1 HERE:SJMP HERE ORG 001BH CPL P1.0 RETI 例5: 利用T1的模式2对外部信号计数,要求每计满100次,将P1.0端取反.
6.3.4 模式3应用例6:某用户系统中已使用了两个外部中断源,并置定时器T1工作在模式2,作为波特率发生器,现要求再增加一个外部中断源,并由P1.0输出一个5khz的方波,fosc=12Mhz。6.3.4 模式3应用例6:某用户系统中已使用了两个外部中断源,并置定时器T1工作在模式2,作为波特率发生器,现要求再增加一个外部中断源,并由P1.0输出一个5khz的方波,fosc=12Mhz。 根据输出信号频率= 5khz,则周期=200us. 由此得: 定时时间=100us.
(3)程序: 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 RETI TH0INT: MOV TH0,#156 CPL P1.0 RETI 解: (1)模式选择: 将T0工作在模式3计数方式,把T0的引脚作为附加的外部中断端,TL0作计数用,TH0作定时用。 (2)初值计算: TL0=ffh TH0 =256-100*12/12=156
例7:设时钟频率为6Mhz,试编写利用T0产生的1s定时的程序例7:设时钟频率为6Mhz,试编写利用T0产生的1s定时的程序 例8:设计实时时钟程序 6.3.5 综合应用举例
7解:(1)定时器T0工作模式的确定 模式0最长可定时16.384ms 模式1最长可定时131.072ms 模式2最长可定时512us 题中要求定时1s,可选模式1,每间隔100ms中断1次,中断10次为1s (2)求计算值X (2^16-X)×12/6×10^6=100×10^-3s X=15 536 =3CB0H 因此(TL0)=0B0H;(TH0)=3CH (3)程序
ORG 0000H LJMP MAIN ORG 000BH AJMP SERVE ORG 2000H MAIN: MOV SP,#60H MOV B,#0AH MOV TMOD,#01H MOV TL0,#0B0H MOV TH0,#3CH SETB TR0 SETB ET0 SETB EA SJMP $ SERVE:MOV TL0,#0B0H MOV TH0,#3CH DJNZ B,LOOP CLR TR0 LOOP: RETI END
8解:(1) 实现时钟计时的基本方法 a、计算计数初值,时钟计时的最小单元是秒,可以方式1,定时时间为100ms,计数溢出10次得到时钟计时最小单位1秒 b、采用中断方式进行溢出次数的累计 c、从秒到分和从分到时的计时是通过累加和数值比较实现 (2)程序
ORG 0000H AJMP MAIN ORG 001BH AJMP SERVE MAIN: MOV TMOD,#10H MOV 20H,#0AH CLR A MOV 30H,A ; 时单元清0 MOV 31H,A ;分单元清0 MOV 32H,A ;秒单元清0 SETB ET1 SETB EA MOV TH1,#3CH MOV TL1,#0B0H SETB TR1 SJMP $
SERVE: PUSH PSW PUSH ACC MOV TH1,#3CH MOV TL1,#0B0H DJNZ 20H,RETUNT MOV 20H,#0AH MOV A,#01H ADD A,32H DA A MOV 32H,A CJNE A,#60h,RETUNT MOV 32H,#0 MOV A,#01H ADD A,31H
DA A MOV 31H,A CJNE A,#60h,RETUNT MOV 31H,#0 MOV A,#01H ADD A,30H DA A MOV 30H,A CJNE A,#24h,RETUNT MOV 30H,#00H RETUNT: POP ACC POP PSW RETI END
作业 P 111 2、8、18、