www.pudn.com > wildman.rar > wildman.asm
LEDBUF EQU 60H ;显示缓冲区 HOUR EQU 40H MINUTE EQU 41H SECOND EQU 42H C100US EQU 43H TICK EQU 10000 ;中断次数计数器 T100US EQU 256-50 ;100US定时初值 ORG 0000H ;复位入口 LJMP START ORG 000BH ;定时器T0中断入口 LJMP T0INT ORG 0030H LEDMAP: DB 0C0H,0F9H,0A4H,0B0H,99H DB 92H,82H,0F8H,80H,90H DB 40H,0F9H,24H,30H,19H ;数码管显示代码 DB 12H,02H,78H,00H,10H DELAY: MOV R7,#0 ;延时子程序 DELAYLOOP: DJNZ R7,DELAYLOOP DJNZ R6,DELAYLOOP RET DISPLAYLED: ;显示子程序 MOV 50H,#0FBH MOV 51H,#0F7H MOV 52H,#0EFH MOV 53H,#0DFH MOV 54H,#0BFH MOV 55H,#7FH MOV R0,#LEDBUF MOV R2,#6 ;共6个数码管 MOV R1,#50H ;从左边开始显示 LOOP: MOV A,@R0 MOV P0,A MOV A,@R1 MOV P2,A ;显示一位八段管 MOV R6,#1 CALL DELAY INC R1 INC R0 DJNZ R2,LOOP RET TOLED: MOV DPTR,#LEDMAP ;查表取显示代码子程序 MOVC A,@A+DPTR RET START: MOV TMOD,#02H ;主程序 MOV TH0,#T100US ;设置T0工作方式及初值 MOV TL0,#T100US MOV IE,#10000010B ;开中断 MOV HOUR,#0 MOV MINUTE,#0 MOV SECOND,#0 MOV C100US,#HIGH(TICK) MOV C100US+1,#LOW(TICK) SETB TR0 ;启动T0 MLOOP: MOV A,HOUR MOV B,#10 DIV AB CALL TOLED MOV LEDBUF,A MOV A,B CALL TOLED ORL A,#80H MOV LEDBUF+1,A MOV A,MINUTE MOV B,#10 DIV AB CALL TOLED MOV LEDBUF+2,A MOV A,B CALL TOLED ORL A,#80H MOV LEDBUF+3,A MOV A,SECOND MOV B,#10H DIV AB CALL TOLED MOV LEDBUF+4,A MOV A,B CALL TOLED MOV LEDBUF+5,A CALL DISPLAYLED LJMP MLOOP T0INT: PUSH PSW ;定时器T0中断服务程序 PUSH ACC MOV A,C100US+1 JNZ GOON DEC C100US GOON: DEC C100US+1 MOV A,C100US ORL A,C100US+1 JNZ EXIT MOV C100US,#HIGH(TICK) MOV C100US+1,#LOW(TICK) INC SECOND MOV A,SECOND CJNE A,#60,EXIT MOV SECOND,#0 INC MINUTE MOV A,MINUTE CJNE A,#60,EXIT MOV MINUTE,#0 INC HOUR MOV A,HOUR CJNE A,#24,EXIT MOV HOUR,#0 EXIT: POP ACC POP PSW RETI END