Contents ...
udn網路城邦
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                ; 結束
說明ˊ:
  1. LED 控制
    • LED 連接在 P1 端口,程式通過更新 P1 端口的值來控制哪些 LED 亮起。
    • 初始化累加器 A 為 10000000B,即點亮最左邊的 LED。
  2. 位移操作
    • 使用 RR A 指令,將累加器 A 的內容每次右移一位。
    • MOV P1, A 將右移後的值傳送到 P1 端口,更新 LED 顯示。
  3. 迴圈與延遲
    • SHIFT_LOOP 是控制位移和更新 LED 的主要迴圈。
    • 使用延遲子程式 DELAY 創造肉眼可見的 LED 點亮時間間隔。
  4. 循環控制
    • 當 A 變為 0 時,所有 LED 都會熄滅,程式重新回到 START,再次初始化 LED 顯示,實現循環效果。

這段程式碼會讓連接在 P1 端口的 8 個 LED 按順序從左到右點亮,並且重複此過程。

全站分類:興趣嗜好 其他
自訂分類:project
上一則: atmega328p 按鈕控制led
下一則: 組合語言點亮led
你可能會有興趣的文章:

限會員,要發表迴響,請先登入