查询方式: 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
DEL1S:MOV R7,#10
D1: MOV R6,#200
D2: MOV R5,#250
DJNZ R5,$
DJNZ R6,D2
DJNZ R7,D1
RET
说明:1、如果不使用R5、R6、R7可以用别的单元替换,比如换成30H、31H、32H等等
2、这个程序是12M时钟,如果时钟不同,要修改数值。如6M时钟,要把MOV R7,#10 修改成:MOV R7,#5
以上就是关于求用单片机汇编语言帮我写一个数码管倒计时程序,用中断延时50ms循环20次得到1秒,P0口为双位7全部的内容,包括:求用单片机汇编语言帮我写一个数码管倒计时程序,用中断延时50ms循环20次得到1秒,P0口为双位7、用汇编怎么写51单片机的延时程序、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)