8x51 起手式 -LED 跑馬燈
講到自動控制一定會提到『 8x51 系列』的應用,這系列的晶片在近二十幾年來已經被廣泛開發到爛掉,無處不見其縱影呀,從燈號控制、定時裝置到各種自動化的家電、工業產品,都可以找到它的存在。因此,凡是講到要學習自動控制的應用與設計,『 8x51 系列』可說是必學的項目。 這學期因為專題教授強烈的『口頭勸說』和為了順便湊畢業學分,就跑去選修了『 8x51 微處理機』的課程,重溫了以前零星的經驗。話說這堂課有多次實作的作業,過程中玩弄電路板和程式非常有意思。不過課程免不了從最簡單的 LED 跑馬燈開始教,雖然乏味但也是一個惡搞經驗的開始〔尤其是不依照老師要求時 :D〕。 這是第一次作業的電路示意圖〔圖的標示和真實腳位不一樣,請參考 8x51 的腳位定義資料。〕: 作業目標是讓 LED 燈號從第一個燈開始,每 0.2 秒變一次燈號,向左旋轉三圈後,再往右反方向旋轉三圈,如此以重覆動作跑下去。程式設計流程大致上是: 程式是用 ASM 寫的,原始程式碼和詳細註解如下: MOV R0, #24 ; 設定切換 LED 次數:跑三圈共23次 ; 因為包括起始燈號,所以要設定成 n+1 次 MOV A, #11111110B ; 以 bit 為單位,設 1 代表該腳位會輸出 5V 電壓 ; 設 0 則腳位輸出 0V 電壓,會讓 LED 有電位差而亮燈 ; 這裡設最右邊第一顆 LED 燈泡為起始燈 RUNL: MOV P0, A ; 使用 A 的設定值來設定 P0 ,以控制 LED CALL SLEEP ; 呼叫 SLEEP 副程式,暫停 0.2 秒 RL A ; 將燈泡設定值向左平移 DJNZ R0, RUNL ; R0=R0-1 ; 然後判斷 R0是否為 0