《定时器应用举例.ppt》由会员分享,可在线阅读,更多相关《定时器应用举例.ppt(40页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、定时器及应用定时/计数器的基本结构如图所示:l 例1、设单片机晶振频率为6MHZ,使用定时器1以方式0产生周期为500us 的等宽正方波连续脉冲,并由P1.0输出,以查询方式完成。解: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=0FC
2、H,低5位装入TL1,即TL1=03H。2、TMOD 寄存器初始化 为把定时器/计数器设定为方式0,则M1M0=00;为实现定时功能,应使C/T=0;为实现定时器/计数器1的运行控制,则GATE=0。定时器/计数器T0 不用,有关位设定为0,因此TMOD 寄存器初始化为00H。3、由定时器控制器TCON 中的TR1位控制定时的启动和停止,TR1=1 启动,TR1=0 停止。4、使用查询就禁止中断 IE=00Hl 5、程序设计:l MOV TMOD,#00H;设置T1 为工作方式0l MOV TH1,#0FCH;设置计数初值l MOV TL1,#03Hl MOV IE,#00H;禁止中断SETB
3、 TR1;启动定时l LOOP:JBC TF1,LOOP1;查询计数溢出l AJMP LOOPl LOOP1:MOV TH1,#0FCH;重新设置计数初值l MOV TL1,#03Hl CPL P1.0;输出取反l AJMP LOOP;重复循环例3、使用定时器0以工作方式2产生100us 定时,在P1.0输出周期为200us 的连续方波脉冲,已知晶振频率fosc=6MHZ。解:1、计算计数初值 6MHZ 晶振下,一个机器周期为2us,以TH0 作重装载的预置寄存器,TL0 作8位计数器,则:(28-X)*12*1/6=100,得X=206=11001110B=0CEH 把0CEH分别装入TH0
4、和TL0中。2、TMOD 初始化 为把定时器/计数器设定为方式2,则M1M0=10;为实现定时功能,应使C/T=0;为实现定时器/计数器0的运行控制,则GATE=0。定时器/计数器T1不用,有关位设定为0,因此TMOD 寄存器初始化为0000 0010,即:02H3、由定时器控制器TCON 中的TR0位控制定时的启动和停止,TR0=1 启动,TR0=0停止。4、使用中断方式,应开中断 EA 位和ET0位置“1”l 5、程序设计(查询方式)l MOV TMOD,#02H;设置T0为工作方式2l MOV TH0,#0CEH;设置计数初值l MOV TL0,#0CEHl MOV IE,#00H;禁止
5、中断l SETB TR0;启动定时l LOOP:JBC TF0,LOOP1;查询计数溢出l AJMP LOOPl LOOP1:CPL P1.0;输出取反l AJMP LOOP;重复循环l 5、程序设计(中断方式)l MOV TMOD,#02H;设置T0 为工作方式2l MOV TH0,#0CEH;设置计数初值l MOV TL0,#0CEHl SETB EA;开中断l SETB ET0;定时器1允许中断l SETB TR0;启动定时l SJMP$;等待中断l l ORG 000BHl CPL P1.0;输出取反l RETI;中断返回l 设某用户系统中已使用了两个外部中断源,并置定时器T1 工作在
6、模式2,作串行口波特率发生器用。现要求再增加一个外部中断源,并由P1.0 输出一个5KHz 的方波。Fosc=12MHz。l 分析:目的:1)增加一个外部中断;2)使P1.0 输出一个方波。条件:1)两个外部中断源已被使用 2)定时器T1 已用于串行口波特率发生器因此:可利用定时/计数器T0,使之工作在模式3,1)利用TL0 扩展外部中断源 2)利用TH0 作定时器使用,输出方波 l 设置初值:1)TL0=0FFH 2)因为输出方波f=5kHz,故方波周期为200us,用TH0 产生100us 的定时,故TH0 的初值X=256(定时时间/机器周期)=256-(100us*晶振频率/12)=1
7、56l 设定T0 工作方式,TMOD,TCON.l 程序:MOV TMOD,#27H;T0:模式3,计数方式;T1:模式2,定时方式 MOV TL0,#0FFH;一旦加1,马上溢出,申请中断 MOV TH0,#156;TH0 初值 MOV TH1,#data;根据波特率要求而定 MOV TL1,#data MOV TCON,#55H;01010101 MOV IE,#9FH;开放全部中断.ORG 000BHTL0INT:MOV TL0,#0FFH;TL0 重新赋值.RETI ORG 001BHTH0INT:MOV TH0,#156;TH0 重新赋值 CPL P1.0 RETI l 低频信号发生
8、器驱动程序设计一个控制程序,使89c51 的P1 口输出8路低频方波脉冲,频率分别为100,50,25,20,10,5,2,1Hz。1.计算定时器初值 使用T0,产生5ms 的定时,若晶振选12MHz,则5ms 相当于5000个机器周期,T0 应工作在模式1,初值x为:x=65536-5000=60536,用十六进制表示,则x=0EC78H。(注意TH,TL 分开赋值-因为T0/T1 都是16位)2.设立8个计数器 对应于P1.0P1.7,设立8个计数器,初值分别为1,2,4,5,10,20,50,100,由T0 的溢出中断服务程序对它们减“1”计数,当减为0时恢复初值,并使相应的口引脚改变状
9、态,这样就可以使P1 口输出所要求的方波。l 程序:ORG 0START:AJMP MAIN ORG 0BHPTP0:MOV TL0,#78H;T0 中断服务程序 MOV TH0,#0ECH CPL P1.0 DJNZ 31H,PF01;对各路时间计数器进行减1计数 MOV 31H,#2;计数器减为1,恢复计数初值 CPL P1.1;输出取反PF01:DJNZ 32H,PF02 MOV 32H,#4 CPL P1.2PF02:DJNZ 33H,PF03 MOV 33H,#5 CPL P1.3PF03:DJNZ 34H,PF04 MOV 34H,#10 CPL P1.4PF04:DJNZ 35H
10、,PF05 MOV 35H,#20 CPL P1.5PF05:DJNZ 36H,PF06 MOV 36H,#50 CPL P1.6PF06:DJNZ 37H,PF07 MOV 37H,#100 CPL P1.7PF07:RETIMAIN:MOV SP,#70H;主程序栈指针初始化 MOV 31H,#2;各路计数器置初值 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
11、 IE,#82H;允许T0 中断 SETB TR0;允许T0 计数HERE:SJMP HERE;以踏步表示CPU 可以处理其他工作例 利用定时器T1 的模式2对外部信号计数,要求每计满100次对P1.0 端取反。解:(1)计算计数初值X 100=28-X X=256-100=156=9CH(2)模式字 TMOD=0110*B=60H(3)程序清单;用中断方式 ORG 0000HMAIN:MOV TMOD,#60H MOV TL1,#156 MOV TH1,#156 MOV IE,#88H SETB TR1 SJMP$ORG 001BH CPL P1.0 RETI 例 脉冲参数测量GATE 功能
12、的使用。脉冲高电平(计数)长度值存于21H、20H 中,脉冲低电平长度存于23H、22H 中。电路连接如下图所示。解:复习GATE 的用法:GATE=0 时,TRi=1,即可启动Ti 定时/计数 GATE=1 时,TRi=1,且=1,才启动定时/计数。89C51P3.2P3.31被测信号2 1 a 3T0 计数 T1 计数 ORG 0000H LJMP MAIN ORG 2000HMAIN:MOV TMOD,#99H;T0、T1 均工作在定时,;模式1,GATE=1 MOV A,#00H;T0、T1 赋计数初值00H,;定时最长时间为0000 65536 MOV TL0,A MOV TH0,A
13、 MOV TL1,A MOV TH1,A 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,TL0TEST3:JB P3.3,TEST3;检测是否到3点 CLR TR1;到3点,停止T1 计数 MOV 22H,TH1;保存T1 计数结果 MOV 23H,TL1 LCALL DISP SJMP 运行中读定时器/计数器l 80C51 可以随时读写计数寄存器TLx 和THx(x 为0或1),用于实时显示计数值等。l 办法是:先读THx,后读TLx,再重读THx,若两次读得的THx 值是一样的,则可以确定读入的数据是正确的;若两次读得的THx 值不一致,则必须重读。
限制150内