51單片機(jī)存儲(chǔ)器結(jié)構(gòu)介紹(1)
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)
在訪問三個(gè)不同的邏輯空間時(shí),應(yīng)采用不同形式的指令(具體我們?cè)诤竺娴?strong>指令系統(tǒng)學(xué)習(xí)時(shí)將會(huì)講解),以產(chǎn)生不同的存儲(chǔ)器空間的選通信號(hào)。
程序內(nèi)存ROM
尋址范圍:0000H ~ FFFFH 容量64KB
EA = 1,尋址內(nèi)部ROM;
EA = 0,尋址外部ROM
地址長(zhǎng)度:16位
作用: 存放程序及程序運(yùn)行時(shí)所需的常數(shù)。
七個(gè)具有特殊含義的單元是:
0000H —— 系統(tǒng)復(fù)位,PC指向此處;
0003H —— 外部中斷0入口
000BH —— T0溢出中斷入口
0013H —— 外中斷1入口
001BH —— T1溢出中斷入口
0023H —— 串口中斷入口
002BH —— T2溢出中斷入口
內(nèi)部數(shù)據(jù)存儲(chǔ)器RAM
物理上分為兩大區(qū):00H ~ 7FH即128B內(nèi)RAM 和 SFR區(qū)。
作用:作數(shù)據(jù)緩沖器用。
下圖是8051單片機(jī)存儲(chǔ)器的空間結(jié)構(gòu)圖
程序存儲(chǔ)器
一個(gè)微處理器能夠聰明地執(zhí)行某種任務(wù),除了它們強(qiáng)大的硬件外,還需要它們運(yùn)行的軟件,其實(shí)微處理器并不聰明,它們只是完全按照人們預(yù)先編寫的程序而執(zhí)行之。那么設(shè)計(jì)人員編寫的程序就存放在微處理器的程序存儲(chǔ)器中,俗稱只讀程序存儲(chǔ)器(ROM)。程序相當(dāng)于給微處理器處理問題的一系列命令。其實(shí)程序和數(shù)據(jù)一樣,都是由機(jī)器碼組成的代碼串。只是程序代碼則存放于程序存儲(chǔ)器中。
MCS-51具有64kB程序存儲(chǔ)器尋址空間,它是用于存放用戶程序、數(shù)據(jù)和表格等信息。對(duì)于內(nèi)部無(wú)ROM的8031單片機(jī),它的程序存儲(chǔ)器必須外接,空間地址為64kB,此時(shí)單片機(jī)的端必須接地。強(qiáng)制CPU從外部程序存儲(chǔ)器讀取程序。對(duì)于內(nèi)部有ROM的8051等單片機(jī),正常運(yùn)行時(shí),則需接高電平,使CPU先從內(nèi)部的程序存儲(chǔ)中讀取程序,當(dāng)PC值超過內(nèi)部ROM的容量時(shí),才會(huì)轉(zhuǎn)向外部的程序存儲(chǔ)器讀取程序。
當(dāng)#EA=1時(shí),程序從片內(nèi)ROM開始執(zhí)行,當(dāng)PC值超過片內(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的引腳接為低電平。
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單元開始,則應(yīng)在這三個(gè)單元中存放一條無(wú)條件轉(zhuǎn)移指令,讓CPU直接去執(zhí)行用戶指定的程序。
另一組特殊單元是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ù)程序。
下圖是ROM的地址分配圖:
從上圖中大家可以看到,0000H-0002H,只有三個(gè)存儲(chǔ)單元,3個(gè)存儲(chǔ)單元在我們的程序存放時(shí)是存放不了實(shí)際意義的程序的,通常我們?cè)趯?shí)際編寫程序時(shí)是在這里安排一條ORG指令,通過ORG指令跳轉(zhuǎn)到從0033H開始的用戶ROM區(qū)域,再來(lái)安排我們的程序語(yǔ)言。從0033開始的用戶ROM區(qū)域用戶可以通過ORG指令任意安排,但在應(yīng)用中應(yīng)注意,不要超過了實(shí)際的存儲(chǔ)空間,不然程序就會(huì)找不到。
但在邏輯上,即從用戶的角度上,8051單片機(jī)有三個(gè)存儲(chǔ)空間:
1、片內(nèi)外統(tǒng)一編址的64K的程序存儲(chǔ)器地址空間(MOVC)
在訪問三個(gè)不同的邏輯空間時(shí),應(yīng)采用不同形式的指令(具體我們?cè)诤竺娴?strong>指令系統(tǒng)學(xué)習(xí)時(shí)將會(huì)講解),以產(chǎn)生不同的存儲(chǔ)器空間的選通信號(hào)。
程序內(nèi)存ROM
尋址范圍:0000H ~ FFFFH 容量64KB
內(nèi)部數(shù)據(jù)存儲(chǔ)器RAM
下圖是8051單片機(jī)存儲(chǔ)器的空間結(jié)構(gòu)圖
程序存儲(chǔ)器
評(píng)論