程式存儲器
程式存儲器概念
程式存儲器是用於存放程式代碼的,是控制計算機動作的一系列命令,單片機只認識由“0”和“1”代碼構成的
機器指令。如前述用
助記符編寫的命令MOV A,#20H,換成機器認識的代碼74H、20H:(寫成二進制就是01110100B和00100000B)。在單片機處理問題之前必須事先將編好的
程式、
表格、常數彙編成機器代碼後存入單片機的
存儲器中,該存儲器稱為程式
存儲器。
介紹
程式存儲器可以放在片內或片外,亦可片內片外同時設定。由於PC
程式計數器為16位,使得
程式存儲器可用16位二進制地址,因此,內外
存儲器的地址最大可從0000H到FFFFH。8051內部有4k位元組的ROM,就占用了由0000H~0FFFH的最低4k個位元組,這時片外擴充的程式
存儲器地址編號應由1000H開始,如果將8051當做8031使用,不想利用片內4kROM,全用片
外存儲器,則地址編號仍可由0000H開始。不過,這時應使8051的第{31}腳(即EA腳)保持低電平。當EA為高電平時,用戶在0000H至0FFFH範圍內使用內部ROM,大於0FFFH後,單片機CPU自動訪問外部
程式存儲器。
數據存儲器
組成
介紹
其最大容量可擴展到64k,用於存儲實時輸入的數據。8051內部有256個單元的內部數據
存儲器,其中00H~7FH為內部隨機存儲器RAM,80H~FFH為專用
暫存器區。實際使用時應首先充分利用內部
存儲器,從使用角度講,搞清內部數據存儲器的結構和地址分配是十分重要的。因為將來在學習
指令系統和
程式設計時會經常用到它們。8051內部數據
存儲器地址由00H至FFH共有256個位元組的
地址空間,該空間被分為兩部分,其中內部數據RAM的地址為00H~7FH(即0~127)。而用做
特殊功能暫存器的地址為80H~FFH。在此256個位元組中,還開闢有一個所謂“位地址”區,該區域內不但可按位元組定址,還可按“位(bit)”定址。對於那些需要進行
位操作的數據,可以存放到這個區域。從00H到1FH安排了四組工作暫存器,每組占用8個RAM位元組,記為R0~R7。究竟選用那一組
暫存器,由前述
標誌暫存器中的RS1和RS0來選用。在這兩位上放入不同的二進制數,即可選用不同的
暫存器組,
特殊功能暫存器
介紹
特殊功能暫存器(SFR)的地址範圍為80H~FFH。在MCS-51中,除
程式計數器PC和四個工作暫存器區外,其餘21個
特殊功能暫存器都在這SFR塊中。其中5個是雙位元組
暫存器,它們共占用了26個位元組。各
特殊功能暫存器的符號和地址見附表。其中帶*號的
可位定址。
特殊功能暫存器反映了8051的狀態,實際上是8051的狀態字及控制字暫存器。用於CPU PSW便是典型一例。
分類
這些
特殊功能暫存器大體上分為兩類,一類與晶片的
引腳有關,另一類作片內功能的控制用。與晶片
引腳有關的
特殊功能暫存器是P0~P3,它們實際上是4個八位
鎖存器(每個I/O口一個),每個鎖存器附加有相應的輸出
驅動器和輸入緩衝器就構成了一個
並行口。MCS-51共有P0~P3四個這樣的
並行口,可提供32根I/O線,每根線都是雙向的,並且大都有第二功能。其餘用於晶片控制的
暫存器中,
累加器A、
標誌暫存器PSW、數據
指針DPTR等的功能前已提及,而另一些暫存器的功能在後面有關部分再作進一步介紹。
MCS-51單片機存儲器結構詳解
MCS-51單片機存儲器採用哈佛結構(har-vard),在物理結構上分為程式存儲器空間和數據存儲器空間,細分為:片內、片外程式存儲器和片內、片外數據存儲器從圖中可看出,這4個存儲空間存在地址衝突問題:數據存儲器與程式存儲器的64KB地址空間重疊;程式存儲器中片內與片外的低4KB地址重疊;數據存儲器中片內與片外最低的256B(8031僅有低128B)地址重疊。在程式存儲器中,片內地址0000日一OOZA日的存儲空間,留給系統使用。片內數據存儲器共256B地址空間,分為低128B和高128B。低128B又分為工作暫存器區、位定址區和用戶RAM區;高128B又叫特殊功能暫存器,這些暫存器的功能具有專門的規定,用戶不能修改其結構。存儲器中共有11個可位定址的位地址。其中,片內數據存儲器中有128個;特殊功能暫存器中有83個。
MCS-51程式存儲器
MCS-51中,程式存儲器通過16位程式計數器(PC)定址,具有64KB定址能力,也即可以在64KB的地址空間任意定址。其中,具有4KB片內程式存儲器空間,地址為000H-0FFFH(注:8031無片內程式存儲器);片外程式存儲器空間最大可擴展到64KB,地址為0000H-FFFFH,片內、外統一編址。
1、程式存儲器片內與片外地址
由於片內、外統一編址,所以片內4KB存儲空間地址000H-0FFFH與片外存儲器地址000H-0FFFH發生衝突。但是,CPU是訪問片記憶體儲器還是訪問片外存儲器,可由引腳上所接的電平來確定。
1)當EA引腳接高電平時,若程式計數器(
PC)值超出片記憶體儲空間,則自動轉向片外程式存儲器空間執行程式;
2)當EA引腳接低電平時,單片機只能執行片外程式存儲器的程式。
另外,因為8031沒有片內程式存儲器,所以就將EA引腳固定接低電平,通過外部擴展程式存儲器來存放程式;而對其它MCS-51,若沒有片外程式存儲器,那應將引腳固定接高電平。通過EA引腳所接電平不同,解決了程式存儲器中片內、片外地址衝突問題。
2、程式存儲器中的特殊單元
MCS-51程式存儲器中,有6個存儲單元具有特殊用途。
0000H單元為系統啟動地址。MCS-51單片機啟動復位後,程式計數器(PC)的內容為0000H,所以系統將從0000H單元取指令,並開始執行程式。程式設計時一般在該地址存放一條絕對跳轉指令,轉入主程式的入口地址。
另外0003H一002AH日被均勻地分成5段,用於5箇中斷服務程式的入口。
其中0003H、000BH、0013H、O01BH、0023H為5箇中斷源的中斷服務程式的入口地址。
中斷源的中斷服務程式的入口地址,即當中斷產生相應的中斷服務程式的起始地址被裝入程式計數器(PC),系統將從該地址取指令,並執行程式。
MCS-51數據存儲器
8051有256個單元的內片數據存儲器,其中00H-7FH為片內隨機存儲器RAM,也叫低128B;80H-FFH為特殊功能暫存器,也叫高128B。低128B又分為工作暫存器區、位定址區、用戶RAM區。
1.工作暫存器區(00H-1FH)
在00H-1FH共32個單元,被均勻地分為四組工作暫存器堆:RB0、RB1、RB2、RB3,每組暫存器堆包含8個工作暫存器,均以R0-R7來命名,這些暫存器被稱為通用暫存器。工作暫存器用於臨時存放8位信息。在使用時,由程式狀態字暫存器中的RS0、RS1來選擇工作暫存器堆。
2.位定址區(20H-2FH)
片內數據存儲器的20H-2FH存儲區為位定址區,既可作為一般單元按位元組定址,也可按位進行定址。位定址區有16個位元組,位地址為00H-7FH。
3.用戶RAM區(30H-7FH)
用戶RAM區主要用作數據緩衝區和堆疊。這個存儲區只能按位元組定址,用作存放數據及作為堆疊區。通常堆疊區被設定在這塊存儲區,由堆疊暫存器SP指定,CPU復位時SP=07H,使得堆疊實際上是從08H開始的,但08H-1FH屬於工作暫存器區。
附表
MCS-51單片機的特殊功能暫存器 |
符號 | 地址 | 功能介紹 |
| F0H | B暫存器 |
| E0H | 累加器 |
| D0H | 程式狀態字 |
TH2* | CDH | 定時器/計數器2(高8位) |
TL2* | CCH | 定時器/計數器2(低8位) |
RLDH* | CBH | 外部輸入(P1.1)計數器/自動再裝入模式時初值暫存器高八位 |
RLDL* | CAH | 外部輸入(P1.1)計數器/自動再裝入模式時初值暫存器低八位 |
T2CON* | C8H | T2定時器/計數器控制暫存器 |
| B8H | 中斷優先權控制暫存器 |
| B0H | P3口鎖存器 |
| A8H | 中斷允許控制暫存器 |
| A0H | P2口鎖存器 |
SBUF | 99H | 串列口鎖存器 |
| 98H | 串列口控制暫存器 |
P1 | 90H | P1口鎖存器 |
TH1 | 8DH | 定時器/計數器1(高8位) |
TH0 | 8CH | 定時器/計數器0(高8位) |
TL1 | 8BH | 定時器/計數器1(低8位) |
TL0 | 8AH | 定時器/計數器0(低8位) |
| 89H | T0、T1定時器/計數器方式控制暫存器 |
| 88H | T0、T1定時器/計數器控制暫存器 |
DPH | 83H | 數據地址指針(高8位) |
DPL | 82H | 數據地址指針(低8位) |
SP | 81H | 堆疊指針 |
P0 | 80H | P0口鎖存器 |
PCON | 87H | 電源控制暫存器 |