8051 組合語言 LED右移
2024/09/17 14:52
瀏覽807
迴響0
推薦0
引用0
ORG 0H ; 起始地址
START:
MOV A, #01111111B ; 初始化 A 為 10000000B,點亮最左邊的 LED
MOV P1, A ; 將 A 的值傳到 P1,點亮對應的 LED
SHIFT_LOOP:
ACALL DELAY ; 呼叫延遲程式,讓每個 LED 點亮一段時間
RR A ; 將 A 的內容右移一位
MOV P1, A ; 將更新後的 A 值傳到 P1 端口,更新 LED 顯示
JNZ SHIFT_LOOP ; 如果 A 不是 0,繼續右移
SJMP START ; 當 A 變為 0 時,重新開始循環
; 延遲子程式
DELAY:
MOV R1, #255 ; 設置延遲計數器
DELAY_LOOP1:
MOV R2, #255 ; 內層延遲循環
DELAY_LOOP2:
DJNZ R2, DELAY_LOOP2 ; 內層迴圈
DJNZ R1, DELAY_LOOP1 ; 外層迴圈
RET ; 返回主程式
END ; 結束
說明ˊ:
- LED 控制:
- LED 連接在 P1 端口,程式通過更新 P1 端口的值來控制哪些 LED 亮起。
- 初始化累加器 A 為
10000000B,即點亮最左邊的 LED。
- 位移操作:
- 使用
RR A指令,將累加器 A 的內容每次右移一位。 MOV P1, A將右移後的值傳送到 P1 端口,更新 LED 顯示。
- 使用
- 迴圈與延遲:
SHIFT_LOOP是控制位移和更新 LED 的主要迴圈。- 使用延遲子程式
DELAY創造肉眼可見的 LED 點亮時間間隔。
- 循環控制:
- 當 A 變為 0 時,所有 LED 都會熄滅,程式重新回到
START,再次初始化 LED 顯示,實現循環效果。
- 當 A 變為 0 時,所有 LED 都會熄滅,程式重新回到
這段程式碼會讓連接在 P1 端口的 8 個 LED 按順序從左到右點亮,並且重複此過程。
你可能會有興趣的文章:
限會員,要發表迴響,請先登入



