8051程式記憶體
8050是一個8位元的單晶片,它有獨立最大64K的程式記憶體,當然,市售的805X族系晶片,程式記憶體大半在4K,8K,16K為主,和個人電腦以G為單位的記憶體相比,8051的記憶體算是很小了。
64K記憶體中,最前面的00—0X3F的記憶體較為特別,0的位址是單晶片冷開機時啟動的位址,一般會放一個LJMP指令,跳躍至真正的開機程式,其他03—0X3F的位址,則是8051發生各種中斷時(如串列埠中斷,計時中斷),程式的執行位址,一般也是以一個LJMP指令,跳躍至中斷程式。
在常見的C51編譯器,為了方便工程師可以只用C程式,來開發整個專案,所以在編譯時候,會在程式碼的最前面,由C51加入一段由C51先寫好的STARTUPCODE,這段程式碼處理一些原本由組合語言的工作,比如設定堆壘(SP),RESET及中斷程式的LJMP程式碼,還可能包括一些清除資料記憶體的動作等等,程式碼約占用60H左右的程式記憶體長度。
#include "at89x52.h"
//*********************************************************
// main program
//*********************************************************
void main (void) { while (1) {} }
這是一個最簡單的C程式,編譯出來的程式碼如下:
全部用C程式寫作,好處是簡單,壞處則是缺少彈性,該如何取捨,就由工程師自行選擇。
8051資料記憶體
8051是以價格取勝的單晶片,所以ROM不大,RAM更小。其設計程式記憶體和資料記憶體是分別獨立的,最大也是64K,不過實際上常常只有256 BYTES,實在少得可憐。
只有很小的資料記憶體,又要劃分給堆壘,函式的公共變數,陣列,暫存器等等使用,所以傳統上工程師必須小心的使用資料記憶體,8051的設計者應該也了解工程師的為難,所以8051的指令集相當複雜,規劃了好幾種定址模式,好讓工程師用最少的程式記憶體,少得可憐的資料記憶體,寫出運行良好的單晶片專案程式。
8051特殊功能暫存器
單晶片不同於微處理機,它還要負責進行輸出/輸入的動作,所以8051有一組特殊功能暫存器,舉凡一些本來應該由周邊元件完成的動作,都由特殊功能暫存器,和單晶片的IO腳來完成。
特殊功能暫存器是8位元的暫存器,所以最多只有256位元組特殊功能暫存器,多數情形下,8051的特殊功能暫存器,應少於256這個數目。
8051位元定址暫存器
8051還有一個特異功能,叫作位元定址暫存器,它可以單獨對特定記憶體8位元中其中一個位設定為0或1,有整組的位元定址指令專門處理這些動作。
這種位元定址暫存器總共也有256個,其中128個是資料暫存器部分,另外128個則是特殊功能暫存器。
會用位元暫存器的原因很簡單,8051設計的年代,記憶體很貴,而使用位元定址,可以用最少的資料,一樣可以設計出好用的單晶片設計。以今日因為技術進步,有些族系的單晶片,其記憶體都是以K計算,程式記憶體8K起跳,資料記憶體至少1K,51這一類的特異功能,因為晶片生產技術的進步,已經完成不重要了。
