这是99秒倒计时汇编程序:
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H
MOV TH0,#HIGH(65536-10000)
MOV TL0,#LOW(65536-10000)
SETB ET0
SETB EA
MOV R0,#9
MOV R1,#9
MOV R2,#0
MOV R3,#9
CLR 00H
CLR 01H
LOOP:
JB P10,LP01
JNB P10,$
SETB TR0
CLR 01H
SJMP LOOP0
LP01:
JB P11,LP02
JNB P11,$
SETB 01H
SJMP LOOP0
LP02:
JB P12,LOOP0
JNB P11,$
CLR TR0
MOV P3,#0FDH
MOV P2,#0
MOV P3,#0FEH
MOV P2,#0
SJMP MAIN
LOOP0:
JB 00H,LOOP1
MOV A,R0
SJMP LOOP2
LOOP1:
MOV A,R1
LOOP2:
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV R3,A
SJMP LOOP
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-10000)
MOV TL0,#LOW(65536-10000)
SETB TR0
JB 01H,T0C
INC R2
T0C:
CPL 00H
MOV A,R3
JB 00H,T001
MOV P3,#0FDH
MOV P2,A
SJMP T002
T001:
MOV P3,#0FEH
MOV P2,A
T002:
MOV A,R2
CJNE A,#100,T0E
MOV R2,#0
MOV A,R0
JZ T003
DEC R0
SJMP T0E
T003:
MOV A,R1
JZ T004
DEC R1
MOV R0,#9
T0E:
RETI
T004:
CLR TR0
RETI
TABLE: ; 共阴极数码管显示代码表
DB 3FH,06H,5BH,4FH,66H ;01234
DB 6DH,7DH,07H,7FH,6FH ;56789
END
从60秒到30秒再到90秒并循环倒计时显示。
----
有点不好理解。
从60秒到30秒,看来,是倒计时。
到了30之后,怎么办?是立即改为90吗?
到了90之后,再怎么办?是立即改为60吗?
查询方式: ORG 00H START: MOV R0,#20 MOV R4,#60 LP0: MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H MOV DPTR,#TABLE SETB TR0 LP1: JBC TF0,LP2 ACALL DISP AJMP LP1 LP2: DJNZ R0,LP0 CLR TR0 MOV R0,#20 MOV A,R4 CJNE A,#0,DEC1 MOV R4,#60 AJMP JP1 DEC1: DEC A MOV R4,A JP1: ACALL DISP AJMP LP0 DISP: MOV A,R4 MOV B,#10 DIV AB ;当前值除以10 MOV 20H,A ;得出的商送给十位 MOV 21H,B ;得出的余数送给个位 MOV A,20H ;十位显示 MOVC A,@A+DPTR MOV P0,A SETB P21 LCALL DELAY CLR P21 MOV A,21H ;个位显示 MOVC A,@A+DPTR MOV P0,A SETB P20 LCALL DELAY CLR P20 RET DELAY: ;误差 0us MOV R6,#10 DL0: MOV R5,#50 DJNZ R5,$ DJNZ R6,DL0 RET TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H ;共阳极0-9显示代码 DB 92H,82H,0F8H,80H,90H END 中断方式: ORG 00H AJMP MAIN ORG 0BH AJMP T0INT ORG 30H MAIN: MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H ;50MS一中断 MOV R0,#20 ;20次为1S MOV R4,#60 ;60S开始倒计时 SETB EA SETB ET0 SETB TR0 MOV DPTR,#TABLE MAIN1: ACALL DISP AJMP MAIN1 DISP: MOV A,R4 MOV B,#10 DIV AB ;当前值除以10 MOV 20H,A ;得出的商送给十位 MOV 21H,B ;得出的余数送给个位 MOV A,20H ;十位显示 MOVC A,@A+DPTR MOV P0,A SETB P21 LCALL DELAY CLR P21 MOV A,21H ;个位显示 MOVC A,@A+DPTR MOV P0,A SETB P20 LCALL DELAY CLR P20 RET T0INT: MOV TH0,#3CH MOV TL0,#0B0H DJNZ R0,RTI MOV R0,#20 DEC R4 CJNE R4,#0,RTI MOV R4,#60 RTI: RETI DELAY: ;误差 0us MOV R6,#10 DL0: MOV R5,#50 DJNZ R5,$ DJNZ R6,DL0 RET TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H ;共阳极0-9显示代码 DB 92H,82H,0F8H,80H,90H END
以上就是关于急求一个基于STC15F204EA单片机和四位数码管动态显示的1-100秒的倒计时程序 最好是汇编语言全部的内容,包括:急求一个基于STC15F204EA单片机和四位数码管动态显示的1-100秒的倒计时程序 最好是汇编语言、求C51单片机汇编语言控制两位数码管倒计时程序,从60秒到30秒再到90秒并循环倒计时显示。、求用单片机汇编语言帮我写一个数码管倒计时程序,用中断延时50ms循环20次得到1秒,P0口为双位7等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)