//Logo Image
作者:蔡宗成(2001-04-21);推薦:徐業良(2001-04-27)

8051單晶片原理簡介

1. 微處理器概述

微處理器基本架構如圖1所示,一般而言,一個單晶片微處理器是由中央處理單元(Central Processing Unit,簡稱CPU)、記憶體(Memory,包括RAMROM)、輸出輸入單元(I/O, Input/Output)三個部份組成。

1. 微處理器基本架構

輸出輸入單元是用於將操作指令、數位與類比信號輸入至單晶片,經過單晶片內部程式作適當的處理與運算,得到結果再透過輸出單元去控制外界的電路、設備等,或是顯示訊息提供使用者知道。

CPU是微處理器的核心,控制整個微處理器的運作,並提供各種算術、邏輯運算及邏輯與判斷等各種功能。

記憶體是用來儲存程式碼與常數、變數及推疊等資料。RAM是隨機存取記憶體(Random Access Memory),用來作為程式設計中的變數;ROM是唯讀記憶體(Read Only Memory),用於儲存程式與程式中需要用到的常數。

8051是目前市面上很受歡迎使用的單晶片微處理器之一,是由INTEL公司所開發出來,普遍地應用在工業界中。由於其使用的普及,許多設計半導體晶片的公司也有製造與8051相容的單晶片,例如由ATMEL公司所生產製造的89C51單晶片便與INTEL公司的8051完全相容,其間最大的不同是89C51是可以重複燒錄的,而8051則否。其他較著名的有Microchip PIC(16CXX)系列,台灣國產品則有義隆電子EM78XX系列、合泰半導體HT-XXXX系列等等,可說相當豐富。本文針對89C51單晶片做介紹。

2. 89C51原理簡介

2.1 89C51特性

89C51是一個八位元(8-bit)CMOS單晶片微處理器,符合MCS-51工業標準。如圖2所示,89C51內含4K-byte的快閃記憶體(Flash Memory),可重複燒錄程式達1000次以上;128-byte RAM的程式記憶體,作為程式變數區;並提供32I/O信號線,216-bit的計時器(Timer)、或計數器(Counter),一個雙向串列埠(RS-232 Serial Port),和五個中斷向量功能。

2. 89C51內部方塊圖

89C51有三種形態的記憶體,分別為

1.      晶片內的記憶體(On Chip Memory)

2.      晶片外的ROM,外部程式碼記憶體,可擴充到64K

3.      晶片外的RAM,外接資料記憶體,可擴充到64K

晶片內的記憶體是指實際存在於89C51內部的記憶體,包括4K-byte快閃記憶體(Flash ROM)128-byte RAM和特殊功能暫存區(Special Function Register, SFR)

128-byte RAM通常分為六個區域,每一個區域佔有不同位址的RAM,分別為

1.      暫存器庫0(00H~07H)

2.      暫存器庫1(08H~0FH)

3.      暫存器庫2(10H~17H)

4.      暫存器庫3(18H~1FH)

5.      bit address位元定址區(20H~2FH)

6.      一般用途(30H~7FH)

特殊功能暫存器是一塊特殊的記憶體空間,提供89C51使用到的才可以存取。當使用者設計程式時,必須注意記憶體的規劃,避免無章法的安排,導致程式記憶體不足或是不合理的重複使用,使程式產生錯亂,無法達成所需要的功能。

2.2 89C51常用暫存器

l      A累加器(Accumulator)

A是一般性的暫存器,用來當作指令運算的主要媒介,是一個8-bit(1-byte)的暫存器,許多89C51的指令都用A暫存器,例如

MOV       A, #25

ADD        A, #35

此動作是將2535相加,結果為60,並將此結果存放入A中。

l      Rn暫存器

Rn暫存器包括R0R1…R7等八個暫存器,為8位元暫存器,通常當作輔助暫存器,以上述例子而言,如果R5已經包含35的數值,R5可當成一個變數,則程式改成:

MOV       A, #25

ADD        A, R5

此程式的A結果同樣為60

l      B暫存器

B暫存器是一個8位元暫存器,主要用於乘法與除法的指令,也可當作一般的暫存器使用。

l      程式狀態字元(Program Status Word, PSW)

程式狀態字元用於儲存一些重要控制訊息,常用到有進位旗標(Carry Flag)和溢位旗標(Overflow Flag),進位旗標的功能有加減法的進位、溢位與布林運算之累加器;溢位旗標的功能為當作加減法之運算結果。

2.3 89C51定址模式與組合語言

定址模式的主要目的是提供使用者如何存取某一記憶體位置,89C51所提供的定址模式包括以下六種:

1.      立即定址法

2.      直接定址法

3.      間接定址法

4.      暫存器定址法

5.      索引定址法

6.      位元定址法

一般常用的定址模式為立即定址法、直接定址法、間接定址法與暫存器定址法,分別說明如下:

1. 立即定址法

將某一數值代入某個暫存器或內部RAM位址內,數值前面必須加#符號。說明如下:

MOV       A, #30H                   ;將數值30H存入A暫存器,A30H

MOV       45H, #60H               ;將記憶體45H內容設定為60H

MOV       R3, #50H                 ;將R3暫存器設定為50H

2. 直接定址法

此模式是將某一資料記憶體的內容拿出來運算,並放入某個暫存器裡。說明如下:

MOV       A, 40H                     ;將記憶體40H內容的值存入A暫存器

MOV       A, WORD, 20H       ;將記憶體20H內容的值存入變數WORD

3. 間接定址法

間接定址法是使用暫存器R0R1等做為指標,間接取得該指標內的值,前面需加上前置符號@。說明如下:

MOV       R0, #20H                 ;將記憶體20H存入暫存器R0

MOV       A, @R0                   ;將暫存器R0的值存入A中,A20H

4. 暫存器定址法

此模式均在特殊功能暫存器裡作運算,使用ARn等,說明如下:

MOV       A, R5                       ;將R5的內容存入A暫存器裡

MOV       R1, A                       ;將A的內容存入R1暫存器裡

由以上說明,89C51的組合語言指令格式分為四個部份,如下所示:

l      標記

標記前不可有空格,標記名稱第一個字必須是英文字母,大小寫均可,標記後面必須加上冒號()。可作為副程式名稱或是程式執行條件跳躍時的程式跳躍位址。

l      運算碼

運算碼由易記符號組成,也可表示指令的意義,例如“MOV”是作資料搬移的動作指令。

l      運算元

運算元是運算碼所需處理的資料,運算元個數依指令的需要而定。

l      註解

註解以一個分號()作為開頭,最重要功能在於增加程式的可讀性與維護性,可說明程式設計的目的與方法,幫助設計者了解此程式的功用。

3. 89C51程式發展流程

程式語言一般分為高階語言與低階語言,高階語言如BASICCPASCAL等;低階語言如機械語言與組合語言。89C51程式發展流程如圖3所示,可以使用高階語言或程式語言,若是使用高階語言來設計,例如C語言,必須經過高階語言編譯器編譯成組合語言,再經組譯的過程產生機器碼,最後由連結器進行連結,必要時可以載入函數庫,產生可執行檔。若使用組合語言來寫控制程式,則直接送入組譯器進行組譯的工作。以高階語言進行程式設計,效率較高,可省下大量開發除錯的時間,加速產品上市的時間,而89C51等單晶片最常使用C語言編譯器,有各種版本與不同的功能,但價格通常在數萬元以上,對於學生或是一般業餘玩家是一個不小的負擔。

3. 89C51程式發展流程

8051/89C51是目前市面上相當受歡迎的單晶片微處理器之一,其相關產品與種類非常多,由於網際網路的盛行、PC的普及,許多有關8051的網頁、線上資料庫以及免費發展應用工具等,都可以從網路上下載獲得,學習8051/89C51單晶片相當方便。8051/89C51單晶片除了控制功能外,可利用原有的串列界面,搭配與PC的溝通程式,透過TCP/IP原理,使單晶片增加最先進的網路功能,應用範圍可說無遠弗屆。

參考資料

鍾自立、張正賢著,8051實作與燒錄器製作,宏友書局,2000

陳龍三著,8051入門與介面控制,松崗書局,1999

李齊雄、游國幹著,8051單晶片微電腦原理與實作,儒林書局,1995