技術摘記

1999-07-09 單晶片8085與8051的比較

建立於 2010-12-06, 週一

二 一般硬體結構

Intel公司於1976年首先發展出MCS-48,它是一個八位元CPU,內部配有最多4K bytes的程式記憶體(即ROM或EPROM),和最多256
bytes的資料記憶體(RAM),以及一個8 bit的計時器和27條I/O。到了1980年的時候,Intel又根據MCS-48的架構改良而發展出MCS-51,這個單晶片仍使用8位元CPU,但程式記憶體的空間可達64
Kbytes,內部有256 bytes的資料記憶體(RAM)和兩個16 bit計時器和32條I/O。以下是一般我們常見的MCS-51的內部結構如下:

 

內部結

編號

內部記憶體

輸入/輸出

計時/計數器

RAM

ROM

EPROM

I/O

16位元

8031

128byte

0

0

32 pins

2個

8051

128byte

4K byte

0

32 pins

2個

8751

128byte

0

4K byte

32 pins

2個

89C51

128byte

0

4K byte

32 pins

2個

8032

256byte

0

0

32 pins

3個

8052

256byte

8K byte

0

32 pins

3個

8752

256byte

0

8K byte

32 pins

3個

89C52

256byte

0

8K byte

32 pins

3個

表1. MCS-51系列常用編號之內部結構

早在1971年12月,Intel公司就設計了第一部8位元微處理機8008,它是利用標準型半導體記憶體(ROM和RAM)以及TTL積體電路來組成一個系統,那是採用P通道MOS處理技術的一般用途處理機,以18
pins雙引線積體電路包裝(DIP)。到了1973/1974年,Intel公司在8008的基礎上利用N通道MOS處理技術設計出8080微處理機。 後來設計8080微處理機的工程師分成了兩組,一組仍留在Intel公司內改良8080而設計出8085;另一組脫離Intel公司自組成Zilog公司 而設計出Z80微處理機。

8085沒有內部的資料記憶體或程式記憶體,但只要利用8155/8156(RAM)或8355(ROM)就可以組成一部基本的微電腦系統。8155和8156都是含有256
bytes 記憶體,兩個位元輸入/輸出埠和一個6位元輸入/輸出埠,以及一個14位元可做程式規劃的計時/計數器。它們都是採用40 pins 雙引線積體電路包裝,工作電壓+5V。8155和8156的不同點在於選擇晶片的邏輯準位。也就是在晶片致能接腳(Chip
Enable),8155要求邏輯準位”0”,8156要求邏輯準位”1”,除此之外兩個裝置是一樣的。而8355是含有2K bytes的唯讀記憶體,兩個8位元可直接做程式規劃的輸入/輸出埠,也是採用40
pins 雙引線積體電路包裝,工作電壓+5V。

(一) 基本結構與功能

中央處理單元(CPU)

8051的CPU可以執行二進制的加,減,乘,除和BCD碼的加法,但無法執行BCD減法。8051除了有Byte邏輯運算能力外還提供所謂單位元邏輯運算能力,稱為布林運算器。

8085除了能夠做BCD算術,也能處理16位元資料的定址計算。它和8051一樣使用多工位址/資料通徑法。以下是8051與8085的俯視圖:

圖1. 8051接腳圖

圖2. 8085接腳圖

(二) 時脈產生器

一般的單晶片都留兩支接腳與外接的石英晶體連接,以決定振盪頻率,所產生的頻率決定了CPU執行程式的快慢。8051最高(晶體)工作頻率為 12MHz,1個機械週期為12個工作時脈,所以機械週期等於一微秒(1μs)。標準的8085所採用的晶體(工作頻率)最高為6.25MHz,這是雙倍 於內部時脈頻率。8085A-2可採用高達10MHz的晶體。以下是8085的時脈週期時間:

表2. 8085的時脈週期時間

 

符號

說明

8085AH

8085AH-2

8085AH-1

單位

最小

最大

最小

最大

最小

最大

tCYC

時脈週期時間

320

2000

200

2000

167

2000

ns

以下是data sheet所提供的時脈線路:

圖3-a.石英晶體驅動時脈線路

圖3-b. LC調變驅動時脈線路

圖3-c. RC驅動時脈線路

圖3-d. 外部輸入頻率0~4MHz驅動時脈線路

(三) 中斷控制器

對於8051內部週邊裝置(Time0,Time1和UART)而言,其中斷要求信號已在內部接到8051的中斷系統,因此不須再行連接,而8051外 部也提供了兩條中斷要求(INT0和INT1)以提供外部擴接的週邊的週邊裝置對8051提出中斷要求。8051的INT0與INT1相當於8085的 INTR。8085沒有像8051的內部中斷。

8051可以接受5個(2個外部,3個內部)中斷要求信號,若5個中斷要求同時被檢 知,8051會根據內部的中斷優先權暫存器來決定對誰先服務。透過規劃這個中斷優先權暫存器,這5個中斷的優先權順序就可以由使用者加以安排。但若有兩個 具有相同優先權的中斷請求”同時”發生,則8051會按照表4
之中斷優先順序來決定其執行中斷副程式的順序。而8085的中斷優先順序由高至低依次為TRAP, RST7.5, RST6.5, RST5.5,INTR。

8051中斷優先權的規劃只分成兩個層次,即高優先權和低優先權,其設定的方法是規劃IP暫存器裡各個中斷源的優先權控制位元,被設為1的就到高優先權層,設為0的就到低優先權層。

8051的中斷結構是屬於二層式的中斷,即主程式被其中一個中斷源中斷後跳至這個中斷副程式執行,若在此刻有另一個較高優先權層的中斷要求在此時提出, 則這個較低優先權的中斷副程式會被中斷,如此中斷再被中斷稱為二層式中斷。其中斷的原則是相同優先權層裡的中斷源不能互相中斷,所以高優先權的副程式是能 再被中斷。

中斷的型態有兩種類別,即所謂的中斷要求(IRQ)和不可遮罩式中斷(NMI),所謂NMI是當週邊對NMI提出中斷要求 時,微處理機會無條件地接收這個中斷要求。而IRQ則是當週邊對IRQ提出中斷要求時,微處理機不一定去理會這個中斷要求,要看這個中斷要求是否在先前已 被允許狀態。至於允不允許IRQ的中斷?是由8051內部提供的中斷允許(或稱致能)暫存器(IE),這個暫存器中的前5個位元控制了8051的5個中斷 源是否被允許,而這些位元可透過軟體加以設定。因此8051的中斷型態是屬於IRQ的型態。(8051不提供NMI)。而8085除了能提供IRQ之外, 它還能提供NMI,那就是TRAP中斷。

8085A提供5個硬體中斷輸入,可劃分成下面三組:

1. INTR
2. RST7.5
RST7.6
RST5.5
3. TRAP

INTR中斷輸入是可罩除的,利用指令EI和DI可使INTR中斷致能或除能。

RST5.5,RST6.5,RST7.5硬體中斷在功能上與INTR有所不同.它們可經由指令SIM罩除。SIM指令借累加器裡的值清除或設置相應的 罩除旗標來使這些中斷致能或除能。而利用指令RIM可以讀到先前設置的中斷罩除狀況。利用EI和DI指令也可以分別使 RST5.5,RST6.5,RST7.5致能或除能。INTR,RST5.5和RST6.5是準位觸發,RST7.5是邊緣觸發。

TRAP中斷是無法罩除,也不接受任何中斷致能或除能的影響。TRAP輸入接腳上的正向邊緣觸發8085硬體中斷順序,但是此邊緣觸發脈動必須維持於高狀 態直至內部認可為止。所有中斷的取樣偵測都發生在中斷輸入被激化的那一指令週期結束前一個時脈週期的CLK下降邊緣。

當8051接受了中斷要求信號後就會跳至某個固定的位址去執行這裡的中斷服務程式,這些起始的位置稱為中斷向量。8085亦是如此,以下分別是8051與8085的中斷向量表:

表4. 8051中斷向量表

 

SOURCE

POLLING PRIORITY

REQUEST BITS

VECTOR ADDRESS

INT0

1

IE0

03H

Timer0

2

TF0

0BH

INT1

3

IE1

13H

Timer1

4

TF1

1BH

UART

5

RI,TI

23H

(四) 串列通信介面

MCS-51內部提供了一組標準週邊串列介面,稱為UART。UART是一個全雙工串列介面,共有四種工作模式:MODE0~MODE3。基本上資料位 元都是8個bit,因為工作模式的不同,傳輸的格式有不同的bit數:8,10,11。當每筆資料傳送或接收完畢,TI或RI就會被設為1。8085是利用外部的通信介面晶片8251A
USART來作串列資料傳輸
。8251A USART可以從微處理機那裡接受並列的資料,將之轉換成並列的資料。同時,也可以接收串列資料,將之轉換為並列的資料傳送給微處理機。它的資料緩衝器也 是8位元,但是它無法像8051的UART做到全雙工。8051的接腳RXD與TXD分別負責串列資料的接收與傳送。8251A的接腳RXD與TXD 分別負責串列資料的接收與傳送。8085是利用接腳SID與SOD作為串列資料輸入與輸出。當指令RIM執行時,SID接腳上的狀態資訊就被讀入累加器的 位元7中;而當SIM指令執行時,累加器位元7的值就經由一個內部正反器SOD接腳上輸出給串列輸入/輸出埠。此時累加器位元6被設置為1。SID可做一 般目的的試驗輸入,而SOD可用做一個1位元控制輸出。

(五) 週期時間與基本操作

(i)多工通徑之週期時間

任何8085程式的執行都是由一系列的READ和WRITE操作組成。這些操作在8085和特定的記憶體或輸入/輸出位置間轉移一位元組資料。8085 執行的每個指令由一到五個順序機械週期組成,而每個機械週期由三個到六個時脈週期組成,至少要有三個時脈週期。對於相同的外部時脈而言,8085的內部工 作時脈較快,但是8085需要較多的工作時脈來完成一個指令,所以在程式執行上8085比8051慢很多。以下分別是8085與8051的讀取資料的時序圖:

圖4. 8085讀取資料時序圖

圖5. 8051讀取外部資料記憶體時序圖

圖6. 8051讀取外部程式記憶體時序圖

8085與8051有相同的8位元三態雙向時間多工通道AD0-AD7來轉移資料,這個通道也轉移16位元低位元部的8位元位址,而16位元高位部的8位元位址則由位址通道A8-A15來轉移。8051每一隻埠腳皆由閂鎖(D型正反器;latch),輸出驅動電路及輸入緩衝器所組成。8085是利用資料通道狀態線S0,S1來決定資料通道處於暫停-HALT(S0=0,S1=0),寫-WRITE(S0=1,S1=0),讀-READ(S0=0,S1=1),取出指令-FETCH(S0=S1=1)。8051與8085在對外部裝置存取資料時,都是利用ALE接腳輸出脈波的負緣來鎖住(LATCH)由AD0-AD7
送出的低位元組位址。因8051有內部程式記憶體,所以在對外部記憶體做存取時,必須利用PSEN接腳對外部程式記憶體致能。8051欲 讀取外部程式記憶體的內容時,PSEN會自動產生負脈波,8051讀取內部程式記憶體或是資料記憶體,是不會有此動作。以下是8051與8085對記憶體 寫入資料的時序圖:

圖7. 8085寫入資料時序圖

圖8. 8051寫入外部資料記憶體時序圖

(ii)狀態轉換順序

一個指令的執行是由一系列機械週期所組成其性質和順序是由在 第一機械週期M1內取出的操縱碼來決定。所有指令週期都不能含有多過5個機械週期,每個機械週期可為七種不同的操作之一。這七種不同的機械週期由三條狀態 線(IO/M,S1,S0)和三條控制線(RD,WR,和INTA)的狀態來決定。以下是8085的機械週期表:

表5. 8085機械週期表

8085在每一機械週期的開始所做的第一件事是送出三個狀況訊號IO/M,S1,S0 ,這三個狀況訊號定義即將發生的機械週期的操作類別。IO/M訊號認定機械週期為記憶體或輸入/輸出操作;S1狀況訊號認定機械週期為讀或寫;SO和S1狀況訊號一起認定讀,寫或操作碼取出機械週期以及暫停狀態。

因為AD0-AD7上的位址資訊只有瞬息性,它必須被保存在特殊多工通徑元件,而8085就是利用ALE(Address
Latch Enable)來便利A0-A7的保存。8051亦是利用相同的方式保存資料。

大多數機械週期都含有三個T狀態(即CLK輸出週期),但取出操作碼的第一機械週期M1例外,M1通常含有4或6個T狀態。不過執行任何指令所需要的實際狀態數目則由執行中的指令其指令週期內特定的機械週期和利用8085
READY和HOLD輸入訊號插入每個機械週期內的WAIT和HOLD狀態數目來決定。以下是8085系統基本的時序圖:

圖9. 8085系統基本時序圖

Sunday the 16th. ISUAL. All rights reserved.