单片机定时器实验.docx
- 文档编号:3940057
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:13
- 大小:69.04KB
单片机定时器实验.docx
《单片机定时器实验.docx》由会员分享,可在线阅读,更多相关《单片机定时器实验.docx(13页珍藏版)》请在冰豆网上搜索。
单片机定时器实验
实验三单片机内部定时器应用
实验目的
1、理解单片机内部定时器的工作原理及使用方法
2、了解单片机定时中断程序的编写和调试方法
3、掌握定时器的基本使用方法
实验仪器
单片机开发板、万利仿真机、稳压电源、计算机
实验原理
1、单片机定时器的工原理
MCS-51单片机内部有两个16位可编程的定时器/计数器T0和T1。
它们即可用作定时器方式,又可用作计数器方式。
其中T0由TH0和TL0计数器构成;T1由TH1和TL1计数器构成。
工作于定时器方式时,通过对机器周期(新型51单片机可以对振荡周期计数)的计数,即每一个机器周期定时器加1,来实现定时。
故系统晶振频率直接影响定时时间。
如果晶振频率为12MHZ,则定时器每隔(1/12MHZ)×12=1us加1。
工作于计数器方式时,对P3.4或P3.5管脚的负跳变(1→0)计数。
它在每个机器周期的S5P2时采样外部输入,当采样值在这个机器周期为高,在下一个机器周期为低时,计数器加1。
因此需要两个机器周期来识别一个有效跳变,故最高计数频率为晶振频率的1/24。
特殊功能寄存器TMOD用于定时器/计数器的方式控制。
高4位用于设置T1,低4位用于设置T0。
如图4-7所示。
图4-7定时器模式控制字格式
TCON寄存器用于定时器的计数控制和中断标志。
如图4-8所示。
图4-8定时控制寄存器数据格式
编写程序控制这两个寄存器就可以控制定时器的运行方式。
单片机内部定时器/计数器的使用,简而概之:
(1)如需用中断,则将EA和相关中断控制位置1;
(2)根据需要设置工作方式,即对TMOD设置;(3)然后启动计数,即对TR0或TR1置1。
(4)如使用中断,则计数溢出后硬件会自动转入中断入口地址;如使用查询,则必须对溢出中断标志位TF0或TF1进行判断。
2、用定时器编写一个秒计时器
假设系统使用的晶振频率为12MHZ,即每个机器周期为1us。
如使用方式1,则定时时间最长是216×1us=65536us=65.536ms,小于1s。
故必须设置一个软件计数单元,即假设定时器定时中断时间为50ms,则必须定时中断20次才达到1s并对秒计时单元加1,20即为软件计数次数。
最后再把秒计时单元的值转成显示数码送显示缓冲区。
图4-9定时器应用程序流程图
实验内容
1、单片机定时器秒计时器
LEDCLKBITP3.4;
LEDDINBITP2.3;
LEDDATADATAP0;
DSEGAT30H
dispbuf:
ds8;显示缓冲区
timetick:
ds1
second:
ds1
minute:
ds1
hour:
ds1
TIMECOUNTEQU50000
CSEGat0000H
SJMPMAIN
ORG000BH
LJMPP_T0
ORG0030;中断服务程序
P_T0:
PUSHPSW
PUSHACC
PUSHDPH
PUSHDPL
MOVTH0,#(65535-TIMECOUNT)/256
MOVTL0,#(65535-TIMECOUNT)MOD256
SETBRS0;后面所使用的R0~r7
DJNZtimetick,P_T02
MOVtimetick,#20
INCsecond
;cjnesecond,#60,P_T01
;MOVSECOND,#0
;incminute;
P_T01:
MOVA,second
MOVB,#100
DIVAB
MOVR0,#dispbuf+2
MOV@R0,A
DECR0
MOVA,B
MOVB,#10
DIVAB
MOV@R0,A
DECR0
MOV@R0,B
P_T02:
CLRRS0
POPDPL
POPDPH
POPACC
POPPSW
RETI
MAIN:
movsp,#60h
MOVdispbuf,#0
MOVdispbuf+1,#0
MOVdispbuf+2,#0
MOVdispbuf+3,#0
MOVdispbuf+4,#0
MOVdispbuf+5,#0
MOVdispbuf+6,#0
MOVdispbuf+7,#0
MOVTH0,#(65535-TIMECOUNT)/256;3CAF
MOVTL0,#(65535-TIMECOUNT)MOD256;
MOVTMOD,#01H;设定定时器的工作方式
SETBET0;允许T0溢出中断
SETBTR0;启动t0
SETBEA;开启总中断
MAIN1:
ACALLDISP
SJMPMAIN1
DISP:
MOVR6,#8
MOVR0,#dispbuf
CLRLEDCLK
CLRLEDDIN
NOP
DISP1:
SETBLEDCLK
MOVA,@R0
MOVDPTR,#LEDTAB
MOVCA,@A+DPTR
MOVLEDDATA,A;
MOVR7,#5
ACALLDelayNms
INCR0
SETBLEDDIN
CLRLEDCLK
DJNZR6,DISP1
RET;大延时
DelayNms:
D1:
ACALLDelay1ms
DJNZR7,D1
RET;延时子程序
Delay1ms:
push07
movR7,#250
delay1:
NOP
NOP
DJNZR7,delay1
POP07
RET
LEDTAB:
DB03H,9FH,25H,0DH;0,1,2,3
DB99H,49H,41H,1FH;4,5,6,7
DB01H,09H,11H,0C1H;8,9,A,B
DB63H,85H,61H,71H;C,D,E,F
END
2、修改上面的程序,设计一个N秒倒计时器(N为学号后两位)。
倒计时时间到后,重新开始计时。
LEDCLKBITP3.4;
LEDDINBITP2.3;
LEDDATADATAP0;
DSEGAT30H
dispbuf:
ds8;显示缓冲区
timetick:
ds1
second:
ds1
minute:
ds1
hour:
ds1
TIMECOUNTEQU50000
CSEGat0000H
SJMPMAIN
ORG000BH
LJMPP_T0
ORG0030H;中断服务程序
P_T0:
PUSHPSW
PUSHACC
PUSHDPH
PUSHDPL
MOVTH0,#(65535-TIMECOUNT)/256
MOVTL0,#(65535-TIMECOUNT)MOD256
SETBRS0;后面所使用的R0~r7
DJNZtimetick,P_T01
MOVtimetick,#20
decsecond
MOVA,second
CJNEA,#00,P_T01
MOVSECOND,#33
P_T01:
MOVA,second
MOVB,#100
DIVAB
MOVR0,#dispbuf+2
MOV@R0,A
DECR0
MOVA,B
MOVB,#10
DIVAB
MOV@R0,A
DECR0
MOV@R0,B
CLRRS0
POPDPL
POPDPH
POPACC
POPPSW
RETI
MAIN:
movsp,#60h
MOVdispbuf,#0
MOVdispbuf+1,#0
MOVdispbuf+2,#0
MOVdispbuf+3,#0
MOVdispbuf+4,#0
MOVdispbuf+5,#0
MOVdispbuf+6,#0
MOVdispbuf+7,#0
movtimetick,#20
movsecond,#33
MOVTH0,#(65535-TIMECOUNT)/256;3CAF
MOVTL0,#(65535-TIMECOUNT)MOD256;
MOVTMOD,#01H
SETBET0;允许T0溢出中断
SETBTR0;启动t0
SETBEA;开启总中断
MAIN1:
ACALLDISP
SJMPMAIN1
DISP:
MOVR6,#8
MOVR0,#dispbuf
CLRLEDCLK
CLRLEDDIN
NOP
DISP1:
SETBLEDCLK
MOVA,@R0
MOVDPTR,#LEDTAB
MOVCA,@A+DPTR
MOVLEDDATA,A;
MOVR7,#5
ACALLDelayNms
INCR0
SETBLEDDIN
CLRLEDCLK
DJNZR6,DISP1
RET;大延时
DelayNms:
D1:
ACALLDelay1ms
DJNZR7,D1
RET;延时子程序
Delay1ms:
push07
movR7,#250
delay1:
NOP
NOP
DJNZR7,delay1
POP07
RET
LEDTAB:
DB03H,9FH,25H,0DH;0,1,2,3
DB99H,49H,41H,1FH;4,5,6,7
DB01H,09H,11H,0C1H;8,9,A,B
DB63H,85H,61H,71H;C,D,E,F
END
思考题
1、在实验程序基础上编写一个24小时计时时钟。
LEDCLKBITP3.4;
LEDDINBITP2.3;
LEDDATADATAP0;
DSEGAT30H
dispbuf:
ds8;显示缓冲区
timetick:
ds1
second:
ds1
minute:
ds1
hour:
ds1
TIMECOUNTEQU50000
CSEGat0000H
SJMPMAIN
ORG000BH
LJMPP_T0
ORG0030H;中断服务程序
P_T0:
PUSHPSW
PUSHACC
PUSHDPH
PUSHDPL
MOVTH0,#(65535-TIMECOUNT)/256
MOVTL0,#(65535-TIMECOUNT)MOD256
SETBRS0;后面所使用的R0~r7
DJNZtimetick,P_T02
MOVtimetick,#20
INCsecond
MOVA,second
CJNEA,#60,P_T01;秒
MOVSECOND,#0
incminute;
MOVA,minute;分
CJNEA,#60,P-T01
INCHOUR;时
MOVA,HOUR
CJNEA,#12,P-T01
MOVHOUR,#0
P_T01:
MOVA,second
MOVB,#100
DIVAB
MOVR0,#dispbuf+2
MOV@R0,A
DECR0
MOVA,B
MOVB,#10
DIVAB
MOV@R0,A
DECR0
MOV@R0,B
P_T02:
CLRRS0
POPDPL
POPDPH
POPACC
POPPSW
RETI
MAIN:
movsp,#60h
MOVdispbuf,#0
MOVdispbuf+1,#0
MOVdispbuf+2,#0
MOVdispbuf+3,#0
MOVdispbuf+4,#0
MOVdispbuf+5,#0
MOVdispbuf+6,#0
MOVdispbuf+7,#0
MOVTH0,#(65535-TIMECOUNT)/256;3CAF
MOVTL0,#(65535-TIMECOUNT)MOD256;
MOVTMOD,#01H;设定定时器的工作方式
SETBET0;允许T0溢出中断
SETBTR0;启动t0
SETBEA;开启总中断
MAIN1:
ACALLDISP
SJMPMAIN1
DISP:
MOVR6,#8
MOVR0,#dispbuf
CLRLEDCLK
CLRLEDDIN
NOP
DISP1:
SETBLEDCLK
MOVA,@R0
MOVDPTR,#LEDTAB
MOVCA,@A+DPTR
MOVLEDDATA,A;
MOVR7,#5
ACALLDelayNms
INCR0
SETBLEDDIN
CLRLEDCLK
DJNZR6,DISP1
RET;大延时
DelayNms:
D1:
ACALLDelay1ms
DJNZR7,D1
RET;延时子程序
Delay1ms:
push07
movR7,#250
delay1:
NOP
NOP
DJNZR7,delay1
POP07
RET
LEDTAB:
DB03H,9FH,25H,0DH;0,1,2,3
DB99H,49H,41H,1FH;4,5,6,7
DB01H,09H,11H,0C1H;8,9,A,B
DB63H,85H,61H,71H;C,D,E,F
END
2、说说把显示程序放在主程序和定时中断程序的优缺点。
答:
显示程序放在主程序时会一直占用空间执行,但执行速度比较快
显示程序放在中断程序是通过中断服务程序中被调用而执行的,每中断一次调用一次,故执行耗时间。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 定时器 实验