MCS-51單片機(jī)在物理結(jié)構(gòu)上有四個(gè)存儲(chǔ)空間:
1、片內(nèi)程序存儲(chǔ)器
2、片外程序存儲(chǔ)器
3、片內(nèi)數(shù)據(jù)存儲(chǔ)器
4、片外數(shù)據(jù)存儲(chǔ)器
但在邏輯上,即從用戶的角度上,8051單片機(jī)有三個(gè)存儲(chǔ)空間:
1、片內(nèi)外統(tǒng)一編址的64K的程序存儲(chǔ)器地址空間(MOVC)
2、256B的片內(nèi)數(shù)據(jù)存儲(chǔ)器的地址空間(MOV)
3、以及64K片外數(shù)據(jù)存儲(chǔ)器的地址空間(MOVX)
在訪問(wèn)三個(gè)不同的邏輯空間時(shí),應(yīng)采用不同形式的指令(具體我們?cè)诤竺娴闹噶钕到y(tǒng)學(xué)習(xí)時(shí)將會(huì)講解),以產(chǎn)生不同的存儲(chǔ)器空間的選通信號(hào)。
程序存儲(chǔ)器
一個(gè)微處理器能夠聰明地執(zhí)行某種任務(wù),除了它們強(qiáng)大的硬件外,還需要它們運(yùn)行的軟件,其實(shí)微處理器并不聰明,它們只是完全按照人們預(yù)先編寫的程序而執(zhí)行之。那么設(shè)計(jì)人員編寫的程序就存放在微處理器的程序存儲(chǔ)器中,俗稱只讀程序存儲(chǔ)器(ROM)。程序相當(dāng)于給微處理器處理問(wèn)題的一系列命令。其實(shí)程序和數(shù)據(jù)一樣,都是由機(jī)器碼組成的代碼串。只是程序代碼則存放于程序存儲(chǔ)器中。
MCS-51具有64kB程序存儲(chǔ)器尋址空間,它是用于存放用戶程序、數(shù)據(jù)和表格等信息。對(duì)于內(nèi)部無(wú)ROM的8031單片機(jī),它的程序存儲(chǔ)器必須外接,空間地址為64kB,此時(shí)單片機(jī)的EA端必須接地。強(qiáng)制CPU從外部程序存儲(chǔ)器讀取程序。對(duì)于內(nèi)部有ROM的8051等單片機(jī),正常運(yùn)行時(shí),則需接高電平,使CPU先從內(nèi)部的程序存儲(chǔ)中讀取程序,當(dāng)PC值超過(guò)內(nèi)部ROM的容量時(shí),才會(huì)轉(zhuǎn)向外部的程序存儲(chǔ)器讀取程序。
當(dāng)EA=1時(shí),程序從片內(nèi)ROM開始執(zhí)行,當(dāng)PC值超過(guò)片內(nèi)ROM容量時(shí)會(huì)自動(dòng)轉(zhuǎn)向外部ROM空間。
當(dāng)EA=0時(shí),程序從外部存儲(chǔ)器開始執(zhí)行,例如前面提到的片內(nèi)無(wú)ROM的8031單片機(jī),在實(shí)際應(yīng)用中就要把8031的EA引腳接為低電平。
程序內(nèi)存ROM
尋址范圍:0000H ~ FFFFH 容量64KB
EA = 1,尋址內(nèi)部ROM;EA = 0,尋址外部ROM
地址長(zhǎng)度:16位
作用: 存放程序及程序運(yùn)行時(shí)所需的常數(shù)。
下圖是ROM的地址分配圖:

8051片內(nèi)有4kB的程序存儲(chǔ)單元,其地址為0000H—0FFFH,單片機(jī)啟動(dòng)復(fù)位后,程序計(jì)數(shù)器的內(nèi)容為0000H,所以系統(tǒng)將從0000H單元開始執(zhí)行程序。但在程序存儲(chǔ)中有些特殊的單元,這在使用中應(yīng)加以注意:
其中一組特殊是0000H—0002H單元,系統(tǒng)復(fù)位后,PC為0000H,單片機(jī)從0000H單元開始執(zhí)行程序,從上圖中大家可以看到,0000H-0002H,只有三個(gè)存儲(chǔ)單元,3個(gè)存儲(chǔ)單元在我們的程序存放時(shí)是存放不了實(shí)際意義的程序的,通常我們?cè)趯?shí)際編寫程序時(shí)是在這里安排一條ORG指令,通過(guò)ORG指令跳轉(zhuǎn)到從0033H開始的用戶ROM區(qū)域,再來(lái)安排我們的程序語(yǔ)言。從0033開始的用戶ROM區(qū)域用戶可以通過(guò)ORG指令任意安排,但在應(yīng)用中應(yīng)注意,不要超過(guò)了實(shí)際的存儲(chǔ)空間,不然程序就會(huì)找不到。
另一組特殊單元是0003H—002AH,這40個(gè)單元各有用途,它們被均勻地分為五段,它們的定義如下:
0003H—000AH 外部中斷0中斷地址區(qū)。
000BH—0012H 定時(shí)/計(jì)數(shù)器0中斷地址區(qū)。
0013H—001AH 外部中斷1中斷地址區(qū)。
001BH—0022H 定時(shí)/計(jì)數(shù)器1中斷地址區(qū)。
0023H—002AH 串行中斷地址區(qū)。
可見以上的40個(gè)單元是專門用于存放中斷處理程序的地址單元,中斷響應(yīng)后,按中斷的類型,自動(dòng)轉(zhuǎn)到各自的中斷區(qū)去執(zhí)行程序。從上面可以看出,每個(gè)中斷服務(wù)程序只有8個(gè)字節(jié)單元,用8個(gè)字節(jié)來(lái)存放一個(gè)中斷服務(wù)程序顯然是不可能的。因此以上地址單元不能用于存放程序的其他內(nèi)容,只能存放中斷服務(wù)程序。但是通常情況下,我們是在中斷響應(yīng)的地址區(qū)安放一條無(wú)條件轉(zhuǎn)移指令,指向程序存儲(chǔ)器的其它真正存放中斷服務(wù)程序的空間去執(zhí)行,這樣中斷響應(yīng)后,CPU讀到這條轉(zhuǎn)移指令,便轉(zhuǎn)向其他地方去繼續(xù)執(zhí)行中斷服務(wù)程序。
數(shù)據(jù)存儲(chǔ)器
數(shù)據(jù)存儲(chǔ)器也稱為隨機(jī)存取數(shù)據(jù)存儲(chǔ)器。數(shù)據(jù)存儲(chǔ)器分為內(nèi)部數(shù)據(jù)存儲(chǔ)和外部數(shù)據(jù)存儲(chǔ)。MCS-51內(nèi)部RAM有128或256個(gè)字節(jié)的用戶數(shù)據(jù)存儲(chǔ)(不同的型號(hào)有分別),片外最多可擴(kuò)展64KB的RAM,構(gòu)成兩個(gè)地址空間,訪問(wèn)片內(nèi)RAM用“MOV”指令,訪問(wèn)片外RAM用“MOVX”指令。它們是用于存放執(zhí)行的中間結(jié)果和過(guò)程數(shù)據(jù)的。MCS-51的數(shù)據(jù)存儲(chǔ)器均可讀寫,部分單元還可以位尋址。
MCS-51單片機(jī)的內(nèi)部數(shù)據(jù)存儲(chǔ)器在物理上和邏輯上都分為兩個(gè)地址空間,即:
數(shù)據(jù)存儲(chǔ)器空間(低128單元);
特殊功能寄存器空間(高128單元);
這兩個(gè)空間是相連的,從用戶角度而言,低128單元才是真正的數(shù)據(jù)存儲(chǔ)器。下面我們就來(lái)詳細(xì)的與大家講解一下:
內(nèi)部數(shù)據(jù)存儲(chǔ)器RAM
物理上分為兩大區(qū):00H ~ 7FH即128B內(nèi)RAM 和 SFR區(qū)。
作用:作數(shù)據(jù)緩沖器用。

從上圖中我們可以看到,8051單片機(jī)片內(nèi)RAM共有256個(gè)單元(00H-FFH),這256個(gè)單元共分為兩部分。其一是地址從00H—7FH單元(共128個(gè)字節(jié))為用戶數(shù)據(jù)RAM。從80H—FFH地址單元(也是128個(gè)字節(jié))為特殊寄存器(SFR)單元。從圖1中可清楚地看出它們的結(jié)構(gòu)分布。
低128單元:
片內(nèi)數(shù)據(jù)存儲(chǔ)器為8位地址,所以最大可尋址的范圍為256個(gè)單元地址,對(duì)片外數(shù)據(jù)存儲(chǔ)器采用間接尋址方式,R0、R1和DPTR都可以做為間接尋址寄存器,R0、R1是8位的寄存器,即R0、R1的尋址范圍最大為256個(gè)單元,而DPTR是16位地址指針,尋址范圍就可達(dá)到64KB。也就是說(shuō)在尋址片外數(shù)據(jù)存儲(chǔ)器時(shí),尋址范圍超過(guò)了256B,就不能用R0、R1做為間接尋址寄存器,而必須用DPTR寄存器做為間接尋址寄存器。
1、通用寄存器區(qū)(00H-1FH)
在00H—1FH共32個(gè)單元中被均勻地分為四塊,每塊包含八個(gè)8位寄存器,均以R0—R7來(lái)命名,我們常稱這些寄存器為通用寄存器。這四塊中的寄存器都稱為R0—R7,那么在程序中怎么區(qū)分和使用它們呢?聰明的INTEL工程師們又安排了一個(gè)寄存器——程序狀態(tài)字寄存器(PSW)來(lái)管理它們,CPU只要定義這個(gè)寄存的PSW的D3和D4位(RS0和RS1),即可選中這四組通用寄存器。對(duì)應(yīng)的編碼關(guān)系如下表所示。惹程序中并不需要用4組,那么其余的可用做一般的數(shù)據(jù)緩沖器,CPU在復(fù)位后,選中第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、位尋址區(qū)(20H-2FH)
片內(nèi)RAM的20H—2FH單元為位尋址區(qū),既可作為一般單元用字節(jié)尋址,也可對(duì)它們的位進(jìn)行尋址。位尋址區(qū)共有16個(gè)字節(jié),128個(gè)位,位地址為00H—7FH。位地址分配如下表所示:
RAM位尋址區(qū)地址表
|
單元地址
|
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能直接尋址這些位,執(zhí)行例如置“1”、清“0”、求“反”、轉(zhuǎn)移,傳送和邏輯等操作。我們常稱MCS-51具有布爾處理功能,布爾處理的存儲(chǔ)空間指的就是這些為尋址區(qū)。
3、用戶RAM區(qū)(30H-7FH)
在片內(nèi)RAM低128單元中,通用寄存器占去32個(gè)單元,位尋址區(qū)占去16個(gè)單元,剩下的80個(gè)單元就是供用戶使用的一般RAM區(qū)了,地址單元為30H-7FH。對(duì)這部份區(qū)域的使用不作任何規(guī)定和限制,但應(yīng)說(shuō)明的是,堆棧一般開辟在這個(gè)區(qū)域。
高128單元:(80H-FFH)
符號(hào)
|
地址
|
功能介紹
|
B
|
F0H
|
B寄存器
|
ACC
|
E0H
|
累加器
|
PSW
|
D0H
|
程序狀態(tài)字
|
IP
|
B8H
|
中斷優(yōu)先級(jí)控制寄存器
|
P3
|
B0H
|
P3口鎖存器
|
IE
|
A8H
|
中斷允許控制寄存器
|
P2
|
A0H
|
P2口鎖存器
|
SBUF
|
99H
|
串行口鎖存器
|
SCON
|
98H
|
串行口控制寄存器
|
P1
|
90H
|
P1口鎖存器
|
TH1
|
8DH
|
定時(shí)器/計(jì)數(shù)器1(高8位)
|
TH0
|
8CH
|
定時(shí)器/計(jì)數(shù)器1(低8位)
|
TL1
|
8BH
|
定時(shí)器/計(jì)數(shù)器0(高8位)
|
TL0
|
8AH
|
定時(shí)器/計(jì)數(shù)器0(低8位)
|
TMOD
|
89H
|
定時(shí)器/計(jì)數(shù)器方式控制寄存器
|
TCON
|
88H
|
定時(shí)器/計(jì)數(shù)器控制寄存器
|
DPH
|
83H
|
數(shù)據(jù)地址指針(高8位)
|
DPL
|
82H
|
數(shù)據(jù)地址指針(低8位)
|
SP
|
81H
|
堆棧指針
|
P0
|
80H
|
P0口鎖存器
|
PCON
|
87H
|
電源控制寄存器
|
|