在網路上看到有人提問這張圖如何處理,覺得相當有趣與一般書上所提的範例皆不相同.
想試一下程度,這是我的第一支Assembly程式,程式碼如下:
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP TIMER0_INT
MAIN:
MOV TMOD,#00000000B
MOV TL0,#(8192-5000) MOD 32
MOV TH0,#(8192-5000)/32
MOV R0,#00
MOV DPTR,#TABLE
MOV R1,#00
MOV P1,#11111101B
SETB ET0
SETB EA
SETB TR0
LOOP: AJMP LOOP
;
ST0:
CJNE R0,#1,ST1
ACALL LED2
ST1:
CJNE R0,#2,ST2
ACALL LED2
ST2:
CJNE R0,#4,ST3
ACALL LED2
ST3:
CJNE R0,#10,ST4
ACALL LED1
ST4:
CJNE R0,#12,ST5
ACALL LED1
ST5:
CJNE R0,#16,ST6
ACALL LED1
ST6:
CJNE R0,#18,ST7
ACALL LED1
ST7:
CJNE R0,#24,ST8
ACALL LED1
ST8:
CJNE R0,#30,ST9
ACALL LED1
ST9:
CJNE R0,#48,ST10
ACALL LED1
ST10:
CJNE R0,#64,ST11
ACALL LED2
ST11:
CJNE R0,#82,ST12
ACALL LED2
ST12:
CJNE R0,#100,ST13
ACALL LED2
ST13:
CJNE R0,#106,ST14
ACALL LED2
ST14:
CJNE R0,#124,ST15
ACALL LED2
MOV R0,#0
MOV R1,#0
ST15:
RETI
// AJMP LOOP
TIMER0_INT:
MOV TL0,#(8192-5000) MOD 32
MOV TH0,#(8192-5000)/32
INC R0
ACALL ST0
RETI
;
LED2:
MOV A,R1
MOVC A,@A+DPTR
MOV P2,A
INC R1
RET
;
LED1:
MOV A,R1
MOVC A,@A+DPTR
MOV P1,A
INC R1
RET
;
TABLE: DB 11101111B ;P2.4 0.5MS
DB 01111111B ;P2.7 1MS
DB 10111111B ;P2.6 2MS
DB 11111100B ;P1.0 & P1.1 5MS
DB 11111001B ;P1.2 & P1.1 6MS
DB 11110101B ;P1.3 & P1.1 8MS
DB 11101101B ;P1.4 & P1.1 9MS
DB 10111101B ;P1.6 & P1.1 12MS
DB 01111101B ;P1.7 & P1.1 15MS
DB 11011101B ;P1.5 & P1.1 24MS
DB 11111110B ;P2.0 32MS
DB 11110111B ;P2.3 41MS
DB 11111101B ;P2.1 50MS
DB 11011111B ;P2.5 53MS
OVER: DB 11111011B ;P2.2 62MS
;
END