51单片机设计计时器

2025-01-02 15:24:40
推荐回答(3个)
回答1:

;P1口接显示个位数字的数码管,P2口接显示十位数字的数码管
;preteus 仿真成功
ORG 0000H
LJMP MAIN
ORG 001BH ;定时器T1,中断入口
LJMP T1_ISR

ORG 0030H
;主程序
MAIN: MOV TMOD,#10H ;定时器初始化
MOV TH1,#3CH ;设定时时间50ms
MOV TL1,#0B0H
SETB EA ;开中断
SETB ET1
SETB TR1 ;启动T1
MOV R0,#20 ;中断计数器(循环次数)
MOV A,#00 ;显示计时初值
LCALL TRAN ;调转换显示程序
LCALL DISP
SJMP $
;定时中断子程序
T1_ISR: DJNZ R0,ISR_OUT ;一秒不到退出
MOV R0,#20 ;到了,重赋计数器初值
INC A ;计时值加1
LCALL TRAN ;调转换显示程序
LCALL DISP
CJNE A,#99,ISR_OUT ;判断计时值是否大于99,不是退出
MOV A,#00 ;大于99,重新赋0
ISR_OUT:MOV TH1,#3CH ;重新给计数器赋初值
MOV TL1,#0B0H
RETI
;二转十子程序,你自己把它读一下吧,解释起来太麻烦,相信他能用
TRAN: PUSH ACC
MOV R1,A
MOV R2,#00H
MOV R3,#08H
LOOP: CLR C
MOV A,R1
RLC A
MOV R1,A
MOV A,R2
ADDC A,R2
DA A
MOV R2,A
DJNZ R3,LOOP
POP ACC
RET
;显示子程序,很常规,读一下就懂了
DISP: MOV DPTR,#TAB
MOV R4,A
MOV A,R2
ANL A,#0FH ;取低位显示
MOVC A,@A+DPTR
MOV P1,A
MOV A,R2
SWAP A ;取高位显示
ANL A,#0FH
MOVC A,@A+DPTR
MOV P2,A
MOV A,R4
RET
;字符表,共阳接法0~9
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

END

回答2:

在这里见到和你需求的东西一样,http://www.51yutong.com/?p=69&a=view&c=46&r=221,你可以打开看看,还配有视频文件!http://v.youku.com/v_show/id_XMTc0NzM4MDY4.html

回答3:

我加你啦,我加小宇时代