Senior Member
|
紅色 LED 32顆 和 藍色 LED 32顆
紅藍色 LED各自從 P0.6出發,各自無限迴圈一直繞(紅藍色 LED
都只亮一顆LED 做移位);都是透過 P0&P1&P2&P3 顯示
.CHIP 8052
;----------------------------------------------
ORG 0000H
LCALL DELAY \ 呼叫延遲時間約 2 秒
LCALL DELAY / 讓電路穩定
;----------------------------------------------
MOV 40H,#DFH \ 紅色LED初始值
MOV 41H,#FFH \ 只有亮P0.6
MOV 42H,#FFH /
MOV 43H,#FFH /
MOV 44H,#DFH \ 藍色LED初始值
MOV 45H,#FFH \ 只有亮P0.6
MOV 46H,#FFH /
MOV 47H,#FFH /
;----------------------------------------------
LOOP:
LCALL L_DATA 呼叫左旋程式,紅色 LED 從 P0.6
LCALL DELAY1 往 P1 P2 P3 移動
MOV A,40H 40H = 紅色 LED P0埠
MOV P0,A
MOV A,41H 41H = 紅色 LED P1埠
MOV P1,A
MOV A,42H 42H = 紅色 LED P2埠
MOV P2,A
MOV A,43H 43H = 紅色 LED P3埠
MOV P3,A
;----------------------------------------------
LCALL R_DATA 呼叫右旋程式,紅色 LED 從 P0.6
MOV A,44H 44H = 藍色 LED P0埠
MOV P0,A
MOV A,45H 45H = 藍色 LED P1埠
MOV P1,A
MOV A,46H 46H = 藍色 LED P2埠
MOV P2,A
MOV A,47H 47H = 藍色 LED P3埠
MOV P3,A
LJMP LOOP 再跳回 LOOP 無限迴圈
;-------------------------------------------
L_DATA: 左旋初始設定
MOV R0,#40H
MOV R1,#43H
CALL L_CHANGE 左旋資料移動
RET
;-------------------------------------------
R_DATA: 右旋初始設定
MOV R0,#44H
MOV R1,#45H
CALL R_CHANGE 右旋資料移動
RET
;--------------------------------------------
L_CHANGE: 40H和41H和42H和43H 左旋資料移動
MOV A,@R1
RLC A
MOV A,@R0
RLC A
MOV @R0,A
INC R0
MOV A,@R0
RLC A
MOV @R0,A
INC R0
MOV A,@R0
RLC A
MOV @R0,A
MOV A,@R1
RLC A
MOV @R1,A
RET
;-------------------------------------
R_CHANGE: 44H和45H和46H和47H 右旋資料移動
MOV A,@R1
RRC A
MOV @R1,A
MOV A,@R0
RRC A
MOV @R0,A
INC R0
INC R0
INC R0
MOV A,@R0
RRC A
MOV @R0,A
DEC R0
MOV A,@R0
RRC A
MOV @R0,A
RET
;--------------------------------------
DELAY: 約 1 秒的延遲時間
MOV R5,#20
CD01: MOV R6,#200
CD02: MOV R7,#250
DJNZ R7,$
DJNZ R6,CD02
DJNZ R5,CD01
RET
;--------------------------------------
DELAY1: 約 0.5 秒的延遲時間
MOV R5,#10
CD03: MOV R6,#200
CD04: MOV R7,#250
DJNZ R7,$
DJNZ R6,CD04
DJNZ R5,CD03
RET
;--------------------------------------
END
用記事本寫,用8051編譯,用LINK聯結,但結果是
.....只有右旋有動作;左旋確沒有動作
小弟有各自測試左旋和右旋,動作都正常OK
但現在加在一起卻,只有右旋有動作,小弟哪邊寫錯了嗎!?
|