MCS51存儲器訪問相關
51的程序存儲空間尋址地址長度有16位,可尋址64KB大小的OTP ROM或FLASH空間,其中這16位的地址線,有8位的地址線可用于內(nèi)部ROM的擴展,所以內(nèi)部ROM最大的尋址空間為4KB?;蛘?6位的地址空間全部用于片外擴展,這取決于EA腳置1或置0,當EA腳置1是程序從片內(nèi)ROM開始執(zhí)行,當PC值超過片內(nèi)ROM容量時會自動轉(zhuǎn)向外部ROM空間,當EA腳置0時程序直接從外部存儲器開始執(zhí)行,例如前面提到的片內(nèi)無ROM的8031單片機,在實際應用中就要把8031的引腳接為低電平。其中該程序地址空間有七個地址單元用于中斷向量:如下:每個向量包含8個地址單元
本文引用地址:http://www.ex-cimer.com/article/201611/315543.htm七個具有特殊含義的單元是:
0000H —— 系統(tǒng)復位,PC指向此處;
0003H —— 外部中斷0入口
000BH —— T0溢出中斷入口
0013H —— 外中斷1入口
001BH —— T1溢出中斷入口
0023H —— 串口中斷入口
002BH —— T2溢出中斷入口
數(shù)據(jù)存儲空間:
數(shù)據(jù)存儲器也稱為隨機存取數(shù)據(jù)存儲器。數(shù)據(jù)存儲器分為內(nèi)部數(shù)據(jù)存儲和外部數(shù)據(jù)存儲。MCS-51內(nèi)部RAM有128或256個字節(jié)的用戶數(shù)據(jù)存儲(不同的型號有分別),片外最多可擴展64KB的RAM,構成兩個地址空間,訪問片內(nèi)RAM用“MOV”指令,訪問片外RAM用“MOVX”指令。它們是用于存放執(zhí)行的中間結果和過程數(shù)據(jù)的。MCS-51的數(shù)據(jù)存儲器均可讀寫,部分單元還可以位尋址。
MCS-51單片機的內(nèi)部數(shù)據(jù)存儲器在物理上和邏輯上都分為兩個地址空間,即:
數(shù)據(jù)存儲器空間(低128單元);
特殊功能寄存器SFR空間(高128單元), 而與SFR重合的DATA空間因為只能做成間接尋址(indirect),所以叫iDATA空間;
這兩個空間是相連的,從用戶角度而言,低128單元才是真正的數(shù)據(jù)存儲器。下面我們就來詳細的與大家講解一下:
低128單元:
片內(nèi)數(shù)據(jù)存儲器為8位地址,所以最大可尋址的范圍為256個單元地址,對片外數(shù)據(jù)存儲器采用間接尋址方式,R0、R1和DPTR都可以做為間接尋址寄存器,R0、R1是8位的寄存器,即R0、R1的尋址范圍最大為256個單元,而DPTR是16位地址指針,尋址范圍就可達到64KB。也就是說在尋址片外數(shù)據(jù)存儲器時,尋址范圍超過了256B,就不能用R0、R1做為間接尋址寄存器,而必須用DPTR寄存器做為間接尋址寄存器。
< xmlnamespace prefix ="v" ns ="urn:schemas-microsoft-com:vml" />
從上圖中我們可以看到,8051單片機片內(nèi)RAM共有256個單元(00H-FFH),這256個單元共分為兩部分。其一是地址從00H—7FH單元(共128個字節(jié))為用戶數(shù)據(jù)RAM。從80H—FFH地址單元(也是128個字節(jié))為特殊寄存器(SFR)單元。從圖1中可清楚地看出它們的結構分布。
1、通用寄存器區(qū)(00H-1FH)
在00H—1FH共32個單元中被均勻地分為四塊,每塊包含八個8位寄存器,均以R0—R7來命名,我們常稱這些寄存器為通用寄存器。這四塊中的寄存器都稱為R0—R7,那么在程序中怎么區(qū)分和使用它們呢?聰明的INTEL工程師們又安排了一個寄存器——程序狀態(tài)字寄存器(PSW)來管理它們,CPU只要定義這個寄存的PSW的D3和D4位(RS0和RS1),即可選中這四組通用寄存器。對應的編碼關系如下表所示。惹程序中并不需要用4組,那么其余的可用做一般的數(shù)據(jù)緩沖器,CPU在復位后,選中第0組工作寄存器。
組< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" /> | 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é)尋址,也可對它們的位進行尋址。位尋址區(qū)共有16個字節(jié),128個位,位地址為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具有布爾處理功能,布爾處理的存儲空間指的就是這些為尋址區(qū)。
3、用戶RAM區(qū)(30H-7FH)
在片內(nèi)RAM低128單元中,通用寄存器占去32個單元,位尋址區(qū)占去16個單元,剩下的80個單元就是供用戶使用的一般RAM區(qū)了,地址單元為30H-7FH。對這部份區(qū)域的使用不作任何規(guī)定和限制,但應說明的是,堆棧一般開辟在這個區(qū)域。
高128單元:(80H-FFH)
前面提到,在片內(nèi)的RAM中,高128位是專用寄存器區(qū),因這節(jié)比較重要,所以我們單獨的安排一節(jié)課跟大家介紹。下節(jié)課我們就重點介紹51單片機片內(nèi)RAM的高128位,即專用寄存器區(qū)。
評論