单片机定时器实验.docx

上传人:scccc 文档编号:12622948 上传时间:2021-12-05 格式:DOCX 页数:8 大小:53.07KB
返回 下载 相关 举报
单片机定时器实验.docx_第1页
第1页 / 共8页
单片机定时器实验.docx_第2页
第2页 / 共8页
单片机定时器实验.docx_第3页
第3页 / 共8页
单片机定时器实验.docx_第4页
第4页 / 共8页
单片机定时器实验.docx_第5页
第5页 / 共8页
亲,该文档总共8页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《单片机定时器实验.docx》由会员分享,可在线阅读,更多相关《单片机定时器实验.docx(8页珍藏版)》请在三一文库上搜索。

1、实验三单片机内部定时器应用实验目的1、理解单片机内部定时器的工作原理及使用方法2、了解单片机定时中断程序的编写和调试方法3、掌握定时器的基本使用方法实验仪器单片机开发板、万利仿真机、稳压电源、计算机实验原理1、 单片机定时器的工原理MCS-51 单片机内部有两个 16 位可编程的定时器 /计数器 T0 和T1。它们即可用作定时器方式, 又 可用作计数器方式。其中 T0 由TH0 和TL0 计数器构成; T1 由TH1 和TL1 计数器构成。工作于定时器方式时,通过对机器周期(新型51单片机可以对振荡周期计数)的计数,即每一个机器周期定时器加 1,来实现定时。故系统晶振频率直接影响定时时间。如果

2、晶振频率为12MHZ,则定时器每隔( 1/12MHZ)× 12=1us 加 1。工作于计数器方式时,对 或 管脚的负跳变( 10)计数。它在每个机器周期的 S5P2 时采样外 部输入,当采样值在这个机器周期为高,在下一个机器周期为低时,计数器加1。因此需要两个机器周期来识别一个有效跳变,故最高计数频率为晶振频率的1/24 。特殊功能寄存器 TMOD用 于定时器 / 计数器的方式控制。高 4 位用于设置 T1,低 4 位用于设置 T0。 如图 4-7 所示。图 4-7 定时器模式控制字格式TCON寄 存器用于定时器的计数控制和中断标志。如图4-8 所示。图 4-8 定时控制寄存器数据格

3、式 编写程序控制这两个寄存器就可以控制定时器的运行方式。单片机内部定时器 / 计数器的使用,简而概之: (1)如需用中断,则将 EA和相关中断控制位置 1; ( 2)根据需要设置工作方式,即对 TMOD设置;(3)然后启动计数,即对 TR0或 TR1置1。(4)如使用中 断,则计数溢出后硬件会自动转入中断入口地址;如使用查询,则必须对溢出中断标志位TF0或TF1进行判断。2、 用定时器编写一个秒计时器假设系统使用的晶振频率为 12MHZ,即每个机器周期为 1us 。如使用方式 1,则定时时间最长是 216 × 1us=65536us=,小于 1s。故必须设置一个软件计数单元,即假设定

4、时器定时中断时间为50ms,则必须定时中断 20次才达到 1s并对秒计时单元加 1, 20即为软件计数次数。最后再把秒计时单元的值转成 显示数码送显示缓冲区。图 4-9恢复现场LEDDIN BIT ; LEDDATA DATA P0;DSEG AT 30H dispbuf: ds 8;显示缓冲区timetick: ds 1 second: ds 1 minute: ds 1 hour: ds 1 TIMECOUNT EQU 50000CSEG at 0000H SJMP MAINORG 000BH LJMP P_T0ORG 0030;中断服务程序P_T0:PUSH PSWPUSH ACC PU

5、SH DPHPUSH DPLMOV TH0,#(65535-TIMECOUNT)/256 MOV TL0,#(65535-TIMECOUNT)MOD 256SETB RS0;后面所使用的 R0r7DJNZ timetick,P_T02 MOV timetick,#20 INC second; cjne second,#60,P_T01 ; MOV SECOND,#0 ; inc minute;P_T01: MOV A,secondMOV B,#100DIV ABMOV R0,#dispbuf+2MOV R0,A DEC R0MOV A,B MOV B,#10 DIV ABMOV R0,A DE

6、C R0MOV R0,B P_T02: CLR RS0POP DPLPOP DPHPOP ACC POP PSWRETIMAIN: mov sp,#60h MOV dispbuf,#0 MOV dispbuf+1,#0 MOV dispbuf+2,#0 MOV dispbuf+3,#0 MOV dispbuf+4,#0 MOV dispbuf+5,#0 MOV dispbuf+6,#0 MOV dispbuf+7,#0 MOV TH0,#(65535-TIMECOUNT)/256;3CAF MOV TL0,#(65535-TIMECOUNT)MOD 256; MOV TMOD,#01H设; 定

7、定时器的工作方式 SETB ET0;允许 T0 溢出中断 SETB TR0;启动 t0 SETB EA;开启总中断MAIN1: ACALL DISP SJMP MAIN1DISP:MOV R6,#8MOV R0,#dispbuf CLR LEDCLK CLR LEDDIN NOPDISP1: SETB LEDCLK MOV A,R0 MOV DPTR,#LEDTAB MOVC A,A+DPTR MOV LEDDATA,A; MOV R7,#5 ACALL DelayNms INC R0 SETB LEDDIN CLR LEDCLK DJNZ R6,DISP1 RET; 大延时DelayNms:

8、D1: ACALL Delay1msDJNZ R7,D1 RET; 延时子程序Delay1ms: push 07 mov R7,#250delay1:NOPNOPDJNZ R7,delay1POP 07RETLEDTAB:DB 03H,9FH,25H,0DH;0,1,2,3DB 99H,49H,41H,1FH;4,5,6,7DB 01H,09H,11H,0C1H;8,9,A,BDB 63H,85H,61H,71H;C,D,E,FEND2、修改上面的程序,设计一个N秒倒计时器( N为学号后两位) 。倒计时时间到后,重新开始计时。LEDCLK BIT ;LEDDIN BIT ;LEDDATA DA

9、TA P0;DSEG AT 30Hdispbuf: ds 8;显示缓冲区timetick: ds 1second: ds 1minute: ds 1hour: ds 1TIMECOUNT EQU 50000CSEG at 0000HSJMP MAINORG 000BHLJMP P_T0ORG 0030H;中断服务程序P_T0:PUSH PSWPUSH ACCPUSH DPHPUSH DPLMOV TH0,#(65535-TIMECOUNT)/256MOV TL0,#(65535-TIMECOUNT)MOD 256SETB RS0;后面所使用的 R0r7DJNZ timetick,P_T01MO

10、V timetick,#20dec secondMOV A,secondCJNE A,#00,P_T01MOV SECOND,#33P_T01: MOV A,secondMOV B,#100DIV ABMOV R0,#dispbuf+2MOV R0,ADEC R0MOV A,BMOV B,#10DIV ABMOV R0,ADEC R0MOV R0,BCLR RS0POP DPLPOP DPHPOP ACCPOP PSWRETIMAIN:mov sp,#60hMOV dispbuf,#0MOV dispbuf+1,#0MOV dispbuf+2,#0MOV dispbuf+3,#0MOV dis

11、pbuf+4,#0MOV dispbuf+5,#0MOV dispbuf+6,#0MOV dispbuf+7,#0mov timetick,#20mov second,#33MOV TH0,#(65535-TIMECOUNT)/256;3CAFMOV TL0,#(65535-TIMECOUNT)MOD 256;MOV TMOD,#01HSETB ET0;允许 T0 溢出中断SETB TR0;启动 t0SETB EA;开启总中断MAIN1:ACALL DISPSJMP MAIN1DISP:MOV R6,#8MOV R0,#dispbufCLR LEDCLKCLR LEDDINNOPDISP1:

12、SETB LEDCLKMOV A,R0MOV DPTR,#LEDTABMOVC A,A+DPTRMOV LEDDATA,A;MOV R7,#5 ACALL DelayNms INC R0SETB LEDDIN CLR LEDCLKDJNZ R6,DISP1 RET; 大延时DelayNms:D1: ACALL Delay1ms DJNZ R7,D1 RET; 延时子程序Delay1ms: push 07 mov R7,#250delay1:NOPNOPDJNZ R7,delay1 POP 07 RETLEDTAB: DB 03H,9FH,25H,0DH;0,1,2,3DB 99H,49H,41

13、H,1FH;4,5,6,7 DB 01H,09H,11H,0C1H;8,9,A,BDB 63H,85H,61H,71H;C,D,E,F END思考题1、在实验程序基础上编写一个 24 小时计时时钟。 LEDCLK BIT ;LEDDIN BIT ; LEDDATA DATA P0;DSEG AT 30H dispbuf: ds 8; 显示缓冲区 timetick: ds 1 second: ds 1 minute: ds 1 hour: ds 1 TIMECOUNT EQU 50000CSEG at 0000H SJMP MAIN ORG 000BH LJMP P_T0ORG 0030H;中断

14、服务程序P_T0:PUSH PSWPUSH ACCPUSH DPHPUSH DPLMOV TH0,#(65535-TIMECOUNT)/256MOV TL0,#(65535-TIMECOUNT)MOD 256 SETB RS0;后面所使用的 R0r7DJNZ timetick,P_T02MOV timetick,#20INC secondMOV A,secondCJNE A,#60,P_T01; 秒MOV SECOND,#0 inc minute;MOV A,minute ; 分CJNE A,#60,P-T01INC HOUR; 时MOV A,HOURCJNE A,#12,P-T01MOV H

15、OUR,#0P_T01: MOV A,secondMOV B,#100DIV ABMOV R0,#dispbuf+2MOV R0,A DEC R0 MOV A,BMOV B,#10 DIV ABMOV R0,A DEC R0MOV R0,BP_T02: CLR RS0POP DPLPOP DPHPOP ACCPOP PSW RETIMAIN:mov sp,#60hMOV dispbuf,#0MOV dispbuf+1,#0MOV dispbuf+2,#0MOV dispbuf+3,#0MOV dispbuf+4,#0MOV dispbuf+5,#0MOV dispbuf+6,#0MOV dis

16、pbuf+7,#0MOV TH0,#(65535-TIMECOUNT)/256;3CAFMOV TL0,#(65535-TIMECOUNT)MOD 256;MOV TMOD,#01H设; 定定时器的工作方式SETB ET0;允许 T0 溢出中断SETB TR0;启动 t0SETB EA;开启总中断MAIN1:ACALL DISPSJMP MAIN1DISP:MOV R6,#8MOV R0,#dispbufCLR LEDCLKCLR LEDDINNOPDISP1: SETB LEDCLKMOV A,R0MOV DPTR,#LEDTABMOVC A,A+DPTRMOV LEDDATA,A;MOV

17、R7,#5ACALL DelayNmsINC R0SETB LEDDINCLR LEDCLKDJNZ R6,DISP1RET; 大延时DelayNms:D1: ACALL Delay1msDJNZ R7,D1RET; 延时子程序Delay1ms:push 07mov R7,#250delay1:NOPNOPDJNZ R7,delay1POP 07RETLEDTAB: DB 03H,9FH,25H,0DH;0,1,2,3DB 99H,49H,41H,1FH;4,5,6,7DB 01H,09H,11H,0C1H;8,9,A,BDB 63H,85H,61H,71H;C,D,E,FEND2、说说把显示程序放在主程序和定时中断程序的优缺点。 答:显示程序放在主程序时会一直占用空间执行,但执行速度比较快 显示程序放在中断程序是通过中断服务程序中被调用而执行的,每中断一次调用一次,故执行 耗时间。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1