1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
| ORG 0000H SJMP MAIN ORG 000BH ;T0(定时器)中断服务程序入口 LJMP T0_ISR ORG 0030H MAIN: MOV A,#0FFH MOV P1,A ;所有灯熄灭 MOV TMOD,#61H ;0110 0001:设置T1为计数器,方式2;设置T0为定时器,方式1 MOV TH0,#4CH MOV TL0,#01H SETB ET0 ;允许T0中断 SETB TR0 ;启动T0 SETB EA ;开中断总控 MOV TH1,#0DCH ;2s MOV TL1,#0DCH ;T1采用查询方式,不允许中断 MOV R4,#0H MODE1: MOV A,#0FEH MOV P1,A ;点亮P1.0所接的灯 LOOP1: ACALL DELAY RL A MOV P1,A INC R4 ;计算是否满8次 CJNE R4,#08H,LOOP1;不满8次,继续循环点亮 LCALL MODE_SWITHCING
MODE2: MOV A,#0FEH MOV P1,A MOV R4,#00H LOOP2: ACALL DELAY ADD A,ACC MOV P1,A INC R4 ;计算是否满8次 CJNE R4,#08H,LOOP2 ;不满8次,继续逐个点亮 LCALL MODE_SWITHCING MODE3: MOV A,#0FH MOV P1,A LOOP3: ACALL DELAY CPL A MOV P1,A INC R4 ;计算是否满8次 CJNE R4,#08H,LOOP3 ;不满8次,继续翻转 LCALL MODE_SWITHCING MODE4: MOV A,#33H ;0011 0011 MOV P1,A LOOP4: ACALL DELAY CPL A MOV P1,A INC R4 ;计算是否满8次 CJNE R4,#08H,LOOP4 ;不满8次,继续翻转 LCALL MODE_SWITHCING MODE5: MOV A,#55H ;0101 0101 MOV P1,A LOOP5: ACALL DELAY CPL A MOV P1,A INC R4 ;计算是否满8次 CJNE R4,#08H,LOOP5 ;不满8次,继续翻转 LCALL MODE_SWITHCING LJMP MODE1 DELAY: MOV R0,#0AH DELAY1: MOV R1,#00H DELAY2: MOV R2,#0C3H DJNZ R2,$ DJNZ R1,DELAY2 DJNZ R0,DELAY1 RET MODE_SWITHCING: MOV P1,#0FFH MOV R4,#0H SETB TR1 JNB TF1,$ CLR TR1 CLR TF1 RET T0_ISR: MOV TH0,#4CH MOV TL0,#01H CPL P2.1 RETI END
|