一、程序存儲(chǔ)器空間
本文引用地址:http://m.butianyuan.cn/article/201611/320631.htmMCS-51單片機(jī)具有64kB程序存儲(chǔ)器尋址空間,它是用于存放用戶(hù)程序、數(shù)據(jù)和表格等信息。
1、對(duì)于內(nèi)部無(wú)ROM的8031單片機(jī),它的程序存儲(chǔ)器必須外接,空間地址為64kB,此時(shí)單片機(jī)的使能端端必須接地。強(qiáng)制CPU從外部程序存儲(chǔ)器讀取程序。
2、對(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ǔ)器讀取程序。
8051片內(nèi)有4kB的程序存儲(chǔ)單元,其地址為0000H—0FFFH,單片機(jī)啟動(dòng)復(fù)位后,程序計(jì)數(shù)器的內(nèi)容為0000H,所以系統(tǒng)將從0000H單元開(kāi)始執(zhí)行程序。但在程序存儲(chǔ)中有些特殊的單元,這在使用中應(yīng)加以注意:
其中一組特殊是0000H—0002H單元,系統(tǒng)復(fù)位后,PC為0000H,單片機(jī)從0000H單元開(kāi)始執(zhí)行程序,如果程序不是從0000H單元開(kāi)始,則應(yīng)在這三個(gè)單元中存放一條無(wú)條件轉(zhuǎn)移指令,讓CPU直接去執(zhí)行用戶(hù)指定的程序。
另一組特殊單元是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ū)。
可見(jiàn)以上的40個(gè)單元是專(zhuān)門(mén)用于存放中斷處理程序的地址單元,中斷響應(yīng)后,按中斷的類(lèi)型,自動(dòng)轉(zhuǎn)到各自的中斷區(qū)去執(zhí)行程序。因此以上地址單元不能用于存放程序的其他內(nèi)容,只能存放中斷服務(wù)程序。但是通常情況下,每段只有8個(gè)地址單元是不能存下完整的中斷服務(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ǔ)器也稱(chēng)為隨機(jī)存取數(shù)據(jù)存儲(chǔ)器。MCS-51單片機(jī)的數(shù)據(jù)存儲(chǔ)器在物理上和邏輯上都分為兩個(gè)地址空間,一個(gè)是內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)和一個(gè)外部數(shù)據(jù)存儲(chǔ)區(qū)。
MCS-51內(nèi)部RAM有128或256個(gè)字節(jié)的用戶(hù)數(shù)據(jù)存儲(chǔ)(不同的型號(hào)有分別),它們是用于存放執(zhí)行的中間結(jié)果和過(guò)程數(shù)據(jù)的。MCS-51的數(shù)據(jù)存儲(chǔ)器均可讀寫(xiě),部分單元還可以位尋址。
1、 8051內(nèi)部RAM共有256個(gè)單元,這256個(gè)單元共分為兩部分。其一是地址從00H—7FH單元(共128個(gè)字節(jié))為用戶(hù)數(shù)據(jù)RAM。從80H—FFH地址單元(也是128個(gè)字節(jié))為特殊寄存器(SFR)單元。從圖1中可清楚地看出它們的結(jié)構(gòu)分布。
在00H—1FH共32個(gè)單元中被均勻地分為四塊,每塊包含八個(gè)8位寄存器,均以R0—R7來(lái)命名,我們常稱(chēng)這些寄存器為通用寄存器。這四塊中的寄存器都稱(chēng)為R0—R7,那么在程序中怎么區(qū)分和使用它們呢?聰明的INTEL工程師們又安排了一個(gè)寄存器——程序狀態(tài)字寄存器(PSW)來(lái)管理它們,CPU只要定義這個(gè)寄存的PSW的第3和第4位(RS0和RS1),即可選中這四組通用寄存器。對(duì)應(yīng)的編碼關(guān)系如圖2所示。
內(nèi)部RAM的20H—2FH單元為位尋址區(qū),既可作為一般單元用字節(jié)尋址,也可對(duì)它們的位進(jìn)行尋址。位尋址區(qū)共有16個(gè)字節(jié),128個(gè)位,位地址為00H—7FH。位地址分配如表1所示,CPU能直接尋址這些位,執(zhí)行例如置“1”、清“0”、求“反”、轉(zhuǎn)移,傳送和邏輯等操作。我們常稱(chēng)MCS-51具有布爾處理功能,布爾處理的存儲(chǔ)空間指的就是這些為尋址區(qū)。
表1 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 08H
20H 07H 06H 05H 04H 03H 02H 01H 00H
--------------------------------------------------------------------------------
特殊功能寄存器
特殊功能寄存器(SFR)也稱(chēng)為專(zhuān)用寄存器,特殊功能寄存器反映了MCS-51單片機(jī)的運(yùn)行狀態(tài)。很多功能也通過(guò)特殊功能寄存器來(lái)定義和控制程序的執(zhí)行。
MCS-51有21個(gè)特殊功能寄存器,它們被離散地分布在內(nèi)部RAM的80H—FFH地址中,這些寄存的功能已作了專(zhuān)門(mén)的規(guī)定,用戶(hù)不能修改其結(jié)構(gòu)。表2是特殊功能寄存器分布一覽表,我們對(duì)其主要的寄存器作一些簡(jiǎn)單的介紹。
程序計(jì)數(shù)器PC(program Counter)
程序計(jì)數(shù)器在物理上是獨(dú)立的,它不屬于特殊內(nèi)部數(shù)據(jù)存儲(chǔ)器塊中。PC是一個(gè)16位的計(jì)數(shù)器,用于存放一條要執(zhí)行的指令地址,尋址范圍為64kB,PC有自動(dòng)加1功能,即完成了一條指令的執(zhí)行后,其內(nèi)容自動(dòng)加1。PC本身并沒(méi)有地址,因而不可尋址,用戶(hù)無(wú)法對(duì)它進(jìn)行讀寫(xiě),但是可以通過(guò)轉(zhuǎn)移、調(diào)用、返回等指令改變其內(nèi)容,以控制程序按我們的要求去執(zhí)行。
累加器ACC(Accumulator)
累加器A是一個(gè)最常用的專(zhuān)用寄存器,大部分單操作指令的一個(gè)操作數(shù)取自累加器,很多雙操作數(shù)指令中的一個(gè)操作數(shù)也取自累加器。加、減、乘、除法運(yùn)算的指令,運(yùn)算結(jié)果都存放于累加器A或AB累加器對(duì)中。大部分的數(shù)據(jù)操作都會(huì)通過(guò)累加器A進(jìn)行,它形象于一個(gè)交通要道,在程序比較復(fù)雜的運(yùn)算中,累加器成了制約軟件效率的“瓶頸”,它的功能較多,地位也十分重要。以至于后來(lái)發(fā)展的單片機(jī),有的集成了多累加器結(jié)構(gòu),或者使用寄存器陣列來(lái)代替累加器,即賦予更多寄存器以累加器的功能,目的是解決累加器的“交通堵塞”問(wèn)題。提高單片機(jī)的軟件效率。
表2 特殊功能寄存器
標(biāo)識(shí)符號(hào) 地址 寄存器名稱(chēng)
ACC 0E0H 累加器
B 0F0H B寄存器
PSW 0D0H 程序狀態(tài)字
SP 81H 堆棧指針
DPTR 82H、83H 數(shù)據(jù)指針(16位)含DPL和DPH
IE 0A8H 中斷允許控制寄存器
IP 0B8H 中斷優(yōu)先控制寄存器
P0 80H I/O口0寄存器
P1 90H I/O口1寄存器
P2 0A0H I/O口2寄存器
P3 0B0H I/O口3寄存器
PCON 87H 電源控制及波特率選擇寄存器
SCON 98H 串行口控制寄存器
SBUF 99H 串行數(shù)據(jù)緩沖寄存器
TCON 88H 定時(shí)控制寄存器
TMOD 89H 定時(shí)器方式選擇寄存器
TL0 8AH 定時(shí)器0低8位
TH0 8CH 定時(shí)器0高8位
TL1 8BH 定時(shí)器1低8位
TH1 8DH 定時(shí)器1高8位
評(píng)論