定时计数器T0 作定时应用技术 (2)教材

上传人:最**** 文档编号:117972883 上传时间:2019-12-11 格式:PPT 页数:27 大小:6.22MB
返回 下载 相关 举报
定时计数器T0 作定时应用技术 (2)教材_第1页
第1页 / 共27页
定时计数器T0 作定时应用技术 (2)教材_第2页
第2页 / 共27页
定时计数器T0 作定时应用技术 (2)教材_第3页
第3页 / 共27页
定时计数器T0 作定时应用技术 (2)教材_第4页
第4页 / 共27页
定时计数器T0 作定时应用技术 (2)教材_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《定时计数器T0 作定时应用技术 (2)教材》由会员分享,可在线阅读,更多相关《定时计数器T0 作定时应用技术 (2)教材(27页珍藏版)》请在金锄头文库上搜索。

1、主讲:耿文波 Email:wenbogeng 2011年春 第10讲(二) 定时计数器T0 作定时 应用技术(二) 实验任务 电路原理图设计 程序设计内容 实训 实验任务 用AT89S51 的定时/计数器T0 产生2 秒钟 的定时,每当2 秒定时到来时,更换指示 灯闪烁,每个指示闪烁的频率为0.2 秒,也 就是说,开始L1 指示灯以0.2 秒的速率闪 烁,当2 秒定时到来之后,L2 开始以0.2 秒的速率闪烁,如此循环下去。0.2 秒的闪 烁速率也由定时/计数器T0 来完成。 硬件电路原理图 硬件设计 将单片机中的P1.0P1.3 用导线连接到四 个共阳发光二极管L1L4 上,四个发光二 极管

2、的阳极通过220电阻接Vcc 程序设计内容 (1)由于采用中断方式来完成,因此,对于中断源必须它的中断入口 地址,对于定时/计数器T0 来说,中断入口地址为000BH,因此在中 断入口地方加入长跳转指令来执行中断服务程序。书写汇编源程序格 式如下所示: ORG 00H LJMP START ORG 0BH ;定时/计数器T0 中断入口地址 LJMP INT_T0 START: NOP ;主程序开始 INT_T0: PUSH ACC ;定时/计数器T0 中断服务程序 PUSH PSW POP PSW POP ACC RETI ;中断服务程序返回 END 程序设计内容 (2)定时2 秒,采用16

3、位定时50ms,共定 时40 次才可达到2 秒,每50ms产生一中 断,定时的40 次数在中断服务程序中完成 ,同样0.2 秒的定时,需要4 次才可达到 0.2 秒。对于中断程序,在主程序中要对中 断开中断。 程序设计内容 (3)由于每次2 秒定时到时,L1L4 要交 替闪烁。采用ID 来号来识别。当ID0 时 ,L1 在闪烁,当ID1 时,L2 在闪烁;当 ID2 时,L3在闪烁;当ID3 时,L4 在 闪烁 程序框图 T0 中断服务程序框图 程序框图 主程序框图 汇编程序设计 TCOUNT2S EQU 30H TCNT02S EQU 31H ID EQU 32H ORG 00H LJMP

4、START ORG 0BH LJMP INT_T0 START: MOV TCOUNT2S,#00H MOV TCNT02S,#00H MOV ID,#00H MOV TMOD,#01H MOV TH0,#(65536- 50000) / 256 MOV TL0,#(65536- 50000) MOD 256 SETB TR0 SETB ET0 SETB EA SJMP $ INT_T0: MOV TH0,#(65536- 50000) / 256 MOV TL0,#(65536- 50000) MOD 256 INC TCOUNT2S MOV A,TCOUNT2S CJNE A,#40,NE

5、XT MOV TCOUNT2S,#00H INC ID 汇编程序设计 MOV A,ID CJNE A,#04H,NEXT MOV ID,#00H NEXT: INC TCNT02S MOV A,TCNT02S CJNE A,#4,DONE MOV TCNT02S,#00H MOV A,ID CJNE A,#00H,SID1 CPL P1.0 SJMP DONE SID1: CJNE A,#01H,SID2 CPL P1.1 SJMP DONE SID2: CJNE A,#02H,SID3 CPL P1.2 SJMP DONE SID3: CJNE A,#03H,SID4 CPL P1.3 SI

6、D4: SJMP DONE DONE: RETI END C语言程序设计 #include unsigned char tcount2s; unsigned char tcount02s; unsigned char ID; void main(void) TMOD=0 x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; ET0=1; EA=1; while(1); void t0(void) interrupt 1 using 0 tcount2s+; if(tcount2s=40) tcount2s=0; ID+; if(ID

7、=4) ID=0; tcount02s+; if(tcount02s=4) tcount02s=0; switch(ID) C语言程序设计 case 0:P1_0=P1_0;break; case 1:P1_1=P1_1;break; case 2:P1_2=P1_2;break; case 3:P1_3=P1_3;break; 第14讲(3) 99 秒马表设计 实验任务 电路原理图设计 程序设计内容 实训 实验任务 (1) 开始时,显示“00”,第1 次按下SP1 后 就开始计时。 (2) 第2 次按SP1 后,计时停止。 (3) 第3 次按SP1 后,计时归零。 硬件电路原理图 硬件设计

8、在Protues中设计出硬件电路图,连线方法如下 : (1)把单片机的P0口连接十位七段数码管。要 求:P0.0/AD0对应着a,P0.1/AD1 对应着b, ,P0.7/AD7 对应着h。 (2)把单片机的P2口连接个位七段数码管。要 求:P2.0/A8 对应着a,P2.1/A9 对应着b, ,P2.7/A15 对应着h。 (3) 把单片机的P3.5/T1 用接通过独立式按键 接地 程序框图 主程序框图 程序框图 T0 中断服务程序框图 汇编程序设计 TCNTA EQU 30H TCNTB EQU 31H SEC EQU 32H KEYCNT EQU 33H SP1 BIT P3.5 ORG

9、 00H LJMP START ORG 0BH LJMP INT_T0 START: MOV KEYCNT,#00H MOV SEC,#00H MOV A,SEC MOV B,#10 DIV AB MOV DPTR,#TABLE MOVC A,A+DPTR MOV P0,A MOV A,B MOV DPTR,#TABLE MOVC A,A+DPTR MOV P2,A MOV TMOD,#02H SETB ET0 SETB EA WT: JB SP1,WT LCALL DELY10MS JB SP1,WT 汇编程序设计 INC KEYCNT MOV A,KEYCNT CJNE A,#01H,KN

10、1 SETB TR0 MOV TH0,#06H MOV TL0,#06H MOV TCNTA,#00H MOV TCNTB,#00H LJMP DKN KN1: CJNE A,#02H,KN2 CLR TR0 LJMP DKN KN2: CJNE A,#03H,DKN MOV SEC,#00H MOV A,SEC MOV B,#10 DIV AB MOV DPTR,#TABLE MOVC A,A+DPTR MOV P0,A MOV A,B MOV DPTR,#TABLE MOVC A,A+DPTR MOV P2,A MOV KEYCNT,#00H DKN: JNB SP1,$ LJMP WT

11、汇编程序设计 DELY10MS: MOV R6,#20 D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 RET INT_T0: INC TCNTA MOV A,TCNTA CJNE A,#100,NEXT MOV TCNTA,#00H INC TCNTB MOV A,TCNTB CJNE A,#4,NEXT MOV TCNTB,#00H INC SEC MOV A,SEC CJNE A,#100,DONE MOV SEC,#00H DONE: MOV A,SEC MOV B,#10 DIV AB MOV DPTR,#TABLE MOVC A,A+DPTR MOV P0

12、,A MOV A,B MOV DPTR,#TABLE MOVC A,A+DPTR MOV P2,A NEXT: RETI 汇编程序设计 TABLE: DB 3FH,06H,5BH,4FH,66H, 6DH,7DH,07H,7FH,6FH END C 语言程序设计 #include unsigned char code dispcode=0 x3f,0 x06,0 x5b,0 x4f, 0 x66,0 x6d,0 x7d,0 x07, 0 x7f,0 x6f,0 x77,0 x7c, 0 x39,0 x5e,0 x79,0 x71,0 x00; unsigned char second; uns

13、igned char keycnt; unsigned int tcnt; void main(void) unsigned char i,j; TMOD=0 x02; ET0=1; EA=1; second=0; P0=dispcodesecond/10; P2=dispcodesecond%10; while(1) if(P3_5=0) for(i=20;i0;i-) for(j=248;j0;j-); if(P3_5=0) keycnt+; switch(keycnt) case 1:TH0=0 x06; TL0=0 x06;TR0=1;break; case 2:TR0=0;break; case3:keycnt=0;second=0; P0=dispcodesecond/10; P2=dispcodesecond%10; break; C 语言程序设计 while(P3_5=0); void t0(void) interrupt 1 using 0 tcnt+; if(tcnt=400) tcnt=0; second+; if(second=100) second=0; P0=dispcodesecond/10; P2=dispcodesecond%10;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号