(35)--[7.1.5] 定时器计数器的应用.ppt
-
资源ID:96450687
资源大小:19.31MB
全文页数:12页
- 资源格式: PPT
下载积分:15金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
(35)--[7.1.5] 定时器计数器的应用.ppt
定定 时时 器器 计计 数数器器 的的 应应 用用7.1.5 定时器/计数器的应用例设系统时钟频率为12MHz,利用定时器/计数器T0编程实现从P1.0输出周期为20ms的方波。从P1.0输出周期为20ms的方波,只需P1.0每隔10ms取反一次。当系统时钟为12MHz,定时器/计数器T0工作于方式1时,最大的定时时间为65536us,满足10ms的定时要求。系统时钟为12MHz,计数值为10000,初值X=65536-10000=D8F0H,则TH0=D8H、TL0=F0H。1采用查询方式编程汇编语言参考程序为:汇编语言参考程序为:ORG 0000HORG 0000H AJMP MAIN AJMP MAIN ORG 0300H ORG 0300H MAIN MAIN:MOV TMODMOV TMOD,#01H#01H ;定时器,计数嚣;定时器,计数嚣T0T0工作于方式工作于方式1 1 HH1 HH1:MOV TH0MOV TH0,#0D8H#0D8H MOV TL0 MOV TL0,#0F0H#0F0H SETB TR0 SETB TR0 LOOP LOOP:JBC TF0JBC TF0,NEXT NEXT ;查询计数溢出;查询计数溢出 SJMP LOOPSJMP LOOP NEXT NEXT:CPL P1.0CPL P1.0 SJMP HH1 SJMP HH1 SJMP$SJMP$7.1.5 定时器/计数器的应用1采用查询方式编程C C语言参考程序为:语言参考程序为:#include#include sbit P1_0=P1 sbit P1_0=P10;0;void main()void main()char i;char i;TMOD=0 x01;TMOD=0 x01;TR0=1;TR0=1;For(;)For(;)TH0=0 xD8;TL0=0 xF0;TH0=0 xD8;TL0=0 xF0;do while (!TF0)do while (!TF0)P1_0=!P1_0;TF0=0;/P1_0=!P1_0;TF0=0;/查询计数溢出查询计数溢出 7.1.5 定时器/计数器的应用2采用中断方式编程 ORG 0000H ORG 0000H LJMP MAIN LJMP MAIN ORG 000BH ORG 000BH ;中断处理程序;中断处理程序 CPL P1.0CPL P1.0 MOV TH0 MOV TH0,#0D8H#0D8H MOV TL0 MOV TL0,#0F0H#0F0H RETI RETI ORG 0200H ORG 0200H ;主程序;主程序7.1.5 定时器/计数器的应用MAINMAIN:MOV TMODMOV TMOD,#01H#01H MOV TH0 MOV TH0,#0D8H#0D8H MOV TL0 MOV TL0,#0F0H#0F0H SETB EA SETB EA SETB ET0 SETB ET0 SETB TR0 SETB TR0 SJMP$SJMP$汇编语言参考程序为:汇编语言参考程序为:2采用中断方式编程 C C语言参考程序为:语言参考程序为:#include /#include /包含特殊功能寄存嚣库包含特殊功能寄存嚣库sbit P1_0=P1sbit P1_0=P10;0;void main()void main()TMOD=0 x01;TMOD=0 x01;TH0=0 xD8;TL0=0 xF0;TH0=0 xD8;TL0=0 xF0;EA=1;ET0=1;EA=1;ET0=1;TR0=1;TR0=1;while(1);while(1);7.1.5 定时器/计数器的应用C C语言参考程序为:语言参考程序为:void time0_int(void)interrupt 1 /void time0_int(void)interrupt 1 /中断服务程序中断服务程序 P1_0=!P1_0;P1_0=!P1_0;TH0=0 xD8;TL0=0 xF0;TH0=0 xD8;TL0=0 xF0;n如果定时时间大于如果定时时间大于6553665536s s,这时用一个定,这时用一个定时时/计数器直接处理不能计数器直接处理不能实现,这时可用:实现,这时可用:1 1个个定时定时/计数器配合软件计计数器配合软件计数方式处理;数方式处理;2 2个定时个定时/计数器共同处理。计数器共同处理。7.1.5 定时器/计数器的应用例n当 fosc=6MHz时,工作方式0、1、2均不能满足定时1s的要求。如,16位定时最大为216 2s=131.072ms,显然不能满足要求,可用以下两种方法解决。如图所示,在P1.7端接一个发光二极管LED,要求利用定时控制使LED亮1s灭1s周而复始地闪烁,设时钟频率fosc=6MHZ。7.1.5 定时器/计数器的应用 ORG 0000H ORG 0000H AJMP MAIN AJMP MAIN ORG 000BH ORG 000BH ;T0T0中断服务程序入口中断服务程序入口 AJMP IP0AJMP IP0 ORG 0030H ORG 0030H ;主程序开始;主程序开始 MAINMAIN:CLR P1.7CLR P1.7 MOV TMOD MOV TMOD,#01H#01H ;T0T0定时定时100ms100ms MOV TH0 MOV TH0,#3CH#3CH MOV TL0 MOV TL0,#0B0H#0B0H SETB ET0 SETB ET0 SETB EA SETB EA MOV R4 MOV R4,#0AH#0AH ;中断;中断1010次计数次计数 SETB TR0SETB TR0 SJMP$SJMP$;等待中断;等待中断 IP0 IP0 :DJNZ R4DJNZ R4,RET0 RET0 ;未到;未到1010次转重新定时次转重新定时 MOV R4MOV R4,#0AH#0AH ;到;到1010次次 CPL P1.7 CPL P1.7 ;P1.7P1.7的灯变反的灯变反 RET0RET0:MOV TH0MOV TH0,#3CH#3CH ;重新定时;重新定时100ms100ms MOV TL0 MOV TL0,#0B0H#0B0H SETB TR0 SETB TR0 RETI RETI方法1:T0每隔100ms中断一次,利用软件对T0的中断次数进行计数,中断10次即实现了1s的定时。7.1.5 定时器/计数器的应用汇编参考程序为:汇编参考程序为:方法2:采用T0产生周期为200ms脉冲,即P1.0每100ms取反一次作为T1的计数脉冲,T1对下降沿计数,因此T1计5个脉冲正好1s。通过P1.7反相,改变LED的状态。T0采用方式1,定时100ms。计数初值为:X=216100103/2=3CB0H。T1采用方式2,计5个脉冲,计数初值:X=285=FBH。均采用查询方式,其流程图如图所示。7.1.5 定时器/计数器的应用7.1.5 定时器/计数器的应用ORG 0000H MAIN:CLR P1.7 SETB P1.0 MOV TMOD,#61H MOV TH1,#0FBH MOV TL1,#0FBH SETB TR1 LOOP1:CPL P1.7 LOOP2:MOV TH0,#3CH MOV TL0,#0B0H SETB TR0 LOOP3:JBC TF0,LOOP4 SJMP LOOP3 LOOP4:CPL P1.0 JBC TF1,LOOP1 AJMP LOOP2 END汇编参考程序为:汇编参考程序为:7.1.5 定时器/计数器的应用#includesbit P1_0=P10;sbit P1_7=P17;timer0 interrupt 1 using 1 /*T0中断服务程序*/P1_0=!P1_0;/*10ms定时时间到,P1.0反相*/TH0=(65536-50000)/256;/*计数初值重装载*/TL0=(65536-50000)%256;timer1 interrupt 3 using 2 /*T1中断服务程序入口*/P1_7=!P1_7;/*1s定时时间到,灯改变状态*/main()P1_7=0;/*置灯初始灭*/P1_0=1;/*保证第1次反相便开始计数*/TMOD=0 x61;/*T0工作在方式1定时,T1工作在方式2计数*/TH0=(65536-50000)/256;/*预置计数初值*/TL0=(65536-50000)%256;TH1=256-5;TL1=256-5;IP=0 x08;/*置优先级寄存器*EA=1;/*CPU开中断*/ET0=1;/*开T0中断*/ET1=1;/*开T1中断*/TR0=1;/*启动T0*/TR1=1;/*启动T1*for(;)C C语言参考程序为:语言参考程序为: