發表文章

目前顯示的是有「8051」標籤的文章

輕輕鬆鬆玩 8x51 的 Serial Port 控制

圖片
使用 Serial Port 是一個很基礎且簡單的通訊方式,從中可以很容易了解到 RXD/TXD 的運作原理,而常見的網路卡、電話等等通訊都是建構在相同的原理之上。Serial Port 在電路上很單純,對兩個要互通的電路來說,就是『你的傳送 TXD 是我的接收 RXD 』,很簡單的觀念,只要跳線就可完成。 整個實作目標,是按下開始傳送按鈕後,將透過 Serial Port 傳送 2 Bytes 的資料到另一個外部裝置,當外部裝置傳送 2Bytes 的資料過來時,將此資料顯示在七段顯示器上。其中這 2 Bytes 分別為『個位數』和『十位數』,必需先加總成一個 8bits 的數值,再送到顯示器上。 其程式的設計流程大致如下: 詳細程式碼和註解: ORG 00H ; 程式開始處 JMP BEGIN ; 跳到 BEGIN ORG 03H ; 停止按鈕的外部中斷程式 JMP STOP ; 跳到 STOP ORG 13H ; 開始按鈕的外部中斷程式 JMP START ; 跳到 START BEGIN: ; 設定一組號碼 06,並拆成十位和個位兩數 MOV R0, #6 ; 設定第一個 Byte 記錄個位數 MOV R1, #0 ; 設定第二個 Byte 記錄十位數 MOV A, R0 ; R0 無法直接 mov 到 R2,故先暫存到 A MOV R2, A ; 將 A 的值移到 R2 MOV A, R1 ; R1 無法直接 mov 到 R3,故先暫存到 A MOV R3, A ; 將 A 的值移到 R3 CALL BOND ; 呼叫 BOND 去將兩個位數加總成一個數字到 A CALL INIT_SERIAL ; 初始化 Serial Port 相關設定 MOV IP, #00000000B ; 低位觸發 MOV IE,...

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 ...