MCS-51單片機在物理結構上有四個儲存空間:
1、片內程式儲存空間
2、片外程式儲存空間
3、片內資料存放區器
4、片外資料存放區器
但在邏輯上,即從使用者的角度上,8051單片機有三個儲存空間:
1、片內外統一編址的64K的程式儲存空間地址空間(MOVC)
2、256B的片內資料存放區器的地址空間(MOV)
3、以及64K片外資料存放區器的地址空間(MOVX)
在訪問三個不同的邏輯空間時,應採用不同形式的指令(具體我們在後面的指令系統學習時將會講解),以產生不同的儲存空間空間的選通訊號。
程式記憶體ROM
定址範圍:0000H ~ FFFFH 容量64KB
EA = 1,定址內部ROM;EA = 0,定址外部ROM
地址長度:16位
作用: 存放程式及程式運行時所需的常數。
七個具有特殊含義的單元是:
0000H —— 系統複位,PC指向此處;
0003H —— 外部中斷0入口
000BH —— T0溢出中斷入口
0013H —— 外中斷1入口
001BH —— T1溢出中斷入口
0023H —— 串口中斷入口
002BH —— T2溢出中斷入口
內部資料存放區器RAM
物理上分為兩大區:00H ~ 7FH即128B內RAM 和 SFR區。
作用:作資料緩衝器用。
是8051單片機儲存空間的空間結構圖
程式儲存空間
一個微處理器能夠聰明地執行某種任務,除了它們強大的硬體外,還需要它們啟動並執行軟體,其實微處理器並不聰明,它們只是完全按照人們預先編寫的程式而執行之。那麼設計人員編寫的程式就存放在微處理器的程式儲存空間中,俗稱唯讀程式儲存空間(ROM)。程式相當於給微處理器處理問題的一系列命令。其實程式和資料一樣,都是由機器碼組成的代碼串。只是程式碼則存放於程式儲存空間中。
MCS-51具有64kB程式儲存空間定址空間,它是用於存放使用者程式、資料和表格等資訊。對於內部無ROM的8031單片機,它的程式儲存空間必須外接,空間地址為64kB,此時單片機的端必須接地。強制CPU從外部程式儲存空間讀取程式。對於內部有ROM的8051等單片機,正常運行時,則需接高電平,使CPU先從內部的程式儲存中讀取程式,當PC值超過內部ROM的容量時,才會轉向外部的程式儲存空間讀取程式。
當=1時,程式從片內ROM開始執行,當PC值超過片內ROM容量時會自動轉向外部ROM空間。
當=0時,程式從外部儲存空間開始執行,例如前面提到的片內無ROM的8031單片機,在實際應用中就要把8031的引腳接為低電平。
8051片內有4kB的程式儲存單元,其地址為0000H—0FFFH,單片機啟動複位後,程式計數器的內容為0000H,所以系統將從0000H單元開始執行程式。但在程式儲存中有些特殊的單元,這在使用中應加以注意:
其中一組特殊是0000H—0002H單元,系統複位後,PC為0000H,單片機從0000H單元開始執行程式,如果程式不是從0000H單元開始,則應在這三個單元中存放一條無條件轉移指令,讓CPU直接去執行使用者指定的程式。
另一組特殊單元是0003H—002AH,這40個單元各有用途,它們被均勻地分為五段,它們的定義如下:
0003H—000AH 外部中斷0中斷地址區。
000BH—0012H 定時/計數器0中斷地址區。
0013H—001AH 外部中斷1中斷地址區。
001BH—0022H 定時/計數器1中斷地址區。
0023H—002AH 串列中斷地址區。
可見以上的40個單元是專門用於存放中斷處理常式的地址單元,中斷響應後,按中斷的類型,自動轉到各自的中斷區去執行程式。從上面可以看出,每個中斷服務程式只有8個位元組單元,用8個位元組來存放一個中斷服務程式顯然是不可能的。因此以上地址單元不能用於存放程式的其他內容,只能存放中斷服務程式。但是通常情況下,我們是在中斷響應的地址區安放一條無條件轉移指令,指向程式儲存空間的其它真正存放中斷服務程式的空間去執行,這樣中斷響應後,CPU讀到這條轉移指令,便轉向其他地方去繼續執行中斷服務程式。
是ROM的地址分配圖:
從中大家可以看到,0000H-0002H,只有三個儲存單元,3個儲存單元在我們的程式存放時是存放不了實際意義的程式的,通常我們在實際編寫程式時是在這裡安排一條ORG指令,通過ORG指令跳轉到從0033H開始的使用者ROM地區,再來安排我們的程式語言。從0033開始的使用者ROM地區使用者可以通過ORG指令任意安排,但在應用中應注意,不要超過了實際的儲存空間,不然程式就會找不到。
資料存放區器
資料存放區器也稱為隨機存取資料存放區器。資料存放區器分為內部資料存放區和外部資料儲存。MCS-51內部RAM有128或256個位元組的使用者資料存放區(不同的型號有分別),片外最多可擴充64KB的RAM,構成兩個地址空間,訪問片內RAM用“MOV”指令,訪問片外RAM用“MOVX”指令。它們是用於存放執行的中間結果和過程資料的。MCS-51的資料存放區器均可讀寫,部分單元還可以位定址。
MCS-51單片機的內部資料存放區器在物理上和邏輯上都分為兩個地址空間,即:
資料存放區器空間(低128單元);
特殊功能寄存器空間(高128單元);
這兩個空間是相連的,從使用者角度而言,低128單元才是真正的資料存放區器。下面我們就來詳細的與大家講解一下:
低128單元:
片內資料存放區器為8位地址,所以最大可定址的範圍為256個單元地址,對片外資料存放區器採用間接定址方式,R0、R1和DPTR都可以做為間接定址寄存器,R0、R1是8位的寄存器,即R0、R1的定址範圍最大為256個單元,而DPTR是16位地址指標,定址範圍就可達到64KB。也就是說在定址片外資料存放區器時,定址範圍超過了256B,就不能用R0、R1做為間接定址寄存器,而必須用DPTR寄存器做為間接定址寄存器。
從中我們可以看到,8051單片機片內RAM共有256個單元(00H-FFH),這256個單元共分為兩部分。其一是地址從00H—7FH單元(共128個位元組)為使用者資料RAM。從80H—FFH地址單元(也是128個位元組)為特殊寄存器(SFR)單元。從圖1中可清楚地看出它們的結構分布。
1、通用寄存器區(00H-1FH)
在00H—1FH共32個單元中被均勻地分為四塊,每塊包含八個8位寄存器,均以R0—R7來命名,我們常稱這些寄存器為通用寄存器。這四塊中的寄存器都稱為R0—R7,那麼在程式中怎麼區分和使用它們呢?聰明的INTEL工程師們又安排了一個寄存器——程式狀態字寄存器(PSW)來管理它們,CPU只要定義這個寄存的PSW的D3和D4位(RS0和RS1),即可選中這四組通用寄存器。對應的編碼關係如下表所示。惹程式中並不需要用4組,那麼其餘的可用做一般的資料緩衝器,CPU在複位後,選中第0組工作寄存器。
|
組 |
RS1 RS0 |
R0 |
R1 |
R2 |
R3 |
R4 |
R5 |
R6 |
R7 |
|
0
1
2
3 |
0 0
0 1
1 0
1 1 |
00H
08H
10H
18H |
01H
09H
11H
19H |
02H
0AH
12H
1AH |
03H
0BH
13H
1BH |
04H
0CH
14H
1CH |
05H
0DH
15H
1DH |
06H
0EH
16H
1EH |
07H
0FH
17H
1FH |
2、位定址區(20H-2FH)
片內RAM的20H—2FH單元為位定址區,既可作為一般單元用位元組定址,也可對它們的位進行定址。位定址區共有16個位元組,128個位,位地址為00H—7FH。位地址分配如下表所示:
|
RAM位定址區地址表 |
|
單元地址 |
MSB 位地址 LSB |
|
|
2FH |
7FH |
7EH |
7DH |
7CH |
7BH |
7AH |
79H |
78H |
|
|
2EH |
77H |
76H |
75H |
74H |
73H |
72H |
71H |
70H |
|
|
2DH |
6FH |
6EH |
6DH |
6CH |
6BH |
6AH |
69H |
68H |
|
|
2CH |
67H |
66H |
65H |
64H |
63H |
62H |
61H |
60H |
|
|
2BH |
5FH |
5EH |
5DH |
5CH |
5BH |
5AH |
59H |
58H |
|
|
2AH |
57H |
56H |
55H |
54H |
53H |
52H |
51H |
50H |
|
|
29H |
4FH |
4EH |
4DH |
4CH |
4BH |
4AH |
49H |
48H |
|
|
28H |
47H |
46H |
45H |
44H |
43H |
42H |
41H |
40H |
|
|
27H |
3FH |
3EH |
3DH |
3CH |
3BH |
3AH |
39H |
38H |
|
|
26H |
37H |
36H |
35H |
34H |
33H |
32H |
31H |
30H |
|
|
25H |
2FH |
2EH |
2DH |
2CH |
2BH |
2AH |
29H |
28H |
|
|
24H |
27H |
26H |
25H |
24H |
23H |
22H |
21H |
20H |
|
|
23H |
1FH |
1EH |
1DH |
1CH |
1BH |
1AH |
19H |
18H |
|
|
22H |
17H |
16H |
15H |
14H |
13H |
12H |
11H |
10H |
|
|
21H |
0FH |
0EH |
0DH |
0CH |
0BH |
0AH |
09H |
08
H |
|
|
20H |
07H |
06H |
05H |
04H |
03H |
02H |
01H |
00H |
|
CPU能直接定址這些位,執行例如置“1”、清“0”、求“反”、轉移,傳送和邏輯等操作。我們常稱MCS-51具有布爾處理功能,布爾處理的儲存空間指的就是這些為定址區。
3、使用者RAM區(30H-7FH)
在片內RAM低128單元中,通用寄存器佔去32個單元,位定址區佔去16個單元,剩下的80個單元就是供使用者使用的一般RAM區了,地址單元為30H-7FH。對這部份地區的使用不作任何規定和限制,但應說明的是,堆棧一般開闢在這個地區。
高128單元:(80H-FFH)
前面提到,在片內的RAM中,高128位是專用寄存器區,因這節比較重要,所以我們單獨的安排一節課跟大家介紹。下節課我們就重點介紹51單片機片內RAM的高128位,即專用寄存器區