MCS-51單片機存儲器結構

admin @ 2014-03-14 , reply:0

MCS-51的存儲器可分為四類:

     程序存儲器
    一個微處理器能夠聰明地執行某種任務,除了它們強大的硬體外,還需要它們運行的軟體,其實微處理器並不聰明,它們只是完全按照人們預先編寫的程序而執行之。那麼設計人員編寫的程序就存放在微處理器的程序存儲器中,俗稱只讀程序存儲器(ROM)。程序相當於給微處理器處理問題的一系列命令。其實程序和數據一樣,都是由機器碼組成的代碼串。只是程序代碼則存放於程序存儲器中。

    MCS-51具有64kB程序存儲器定址空間,它是用於存放用戶程序、數據和表格等信息。對於內部無ROM的8031單片機,它的程序存儲器必須外接,空間地址為64kB,此時單片機的端必須接地。強制CPU從外部程序存儲器讀取程序。對於內部有ROM的8051等單片機,正常運行時,則需接高電平,使CPU先從內部的程序存儲中讀取程序,當PC值超過內部ROM的容量時,才會轉向外部的程序存儲器讀取程序。

    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個地址單元是不能存下完整的中斷服務程序的,因而一般也在中斷響應的地址區安放一條無條件轉移指令,指向程序存儲器的其它真正存放中斷服務程序的空間去執行,這樣中斷響應后,CPU讀到這條轉移指令,便轉向其他地方去繼續執行中斷服務程序。

     數據存儲器
    數據存儲器也稱為隨機存取數據存儲器。MCS-51單片機的數據存儲器在物理上和邏輯上都分為兩個地址空間,一個是內部數據存儲區和一個外部數據存儲區。MCS-51內部RAM有128或256個位元組的用戶數據存儲(不同的型號有分別),它們是用於存放執行的中間結果和過程數據的。MCS-51的數據存儲器均可讀寫,部分單元還可以位定址。

    8051內部RAM共有256個單元,這256個單元共分為兩部分。其一是地址從00H—7FH單元(共128個位元組)為用戶數據RAM。從80H—FFH地址單元(也是128個位元組)為特殊寄存器(SFR)單元。從圖1中可清楚地看出它們的結構分佈。

    在00H—1FH共32個單元中被均勻地分為四塊,每塊包含八個8位寄存器,均以R0—R7來命名,我們常稱這些寄存器為通用寄存器。這四塊中的寄存器都稱為R0—R7,那麼在程序中怎麼區分和使用它們呢?聰明的INTEL工程師們又安排了一個寄存器——程序狀態字寄存器(PSW)來管理它們,CPU只要定義這個寄存的PSW的第3和第4位(RS0和RS1),即可選中這四組通用寄存器。對應的編碼關係如圖2所示。

 
    內部RAM的20H—2FH單元為位定址區,既可作為一般單元用位元組定址,也可對它們的位進行定址。位定址區共有16個位元組,128個位,位地址為00H—7FH。位地址分配如表1所示,CPU能直接定址這些位,執行例如置“1”、清“0”、求“反”、轉移,傳送和邏輯等操作。我們常稱MCS-51具有布爾處理功能,布爾處理的存儲空間指的就是這些為定址區。
 
表1  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 08H
20H 07H 06H 05H 04H 03H 02H 01H 00H

  特殊功能寄存器
    特殊功能寄存器(SFR)也稱為專用寄存器,特殊功能寄存器反映了MCS-51單片機的運行狀態。很多功能也通過特殊功能寄存器來定義和控制程序的執行。

    MCS-51有21個特殊功能寄存器,它們被離散地分佈在內部RAM的80H—FFH地址中,這些寄存的功能已作了專門的規疾,用戶不能修改其結構。表2是特殊功能寄存器分佈一覽表,我們對其主要的寄存器作一些簡單的介紹。

     程序計數器PC(program Counter)
    程序計數器在物理上是獨立的,它不屬於特殊內部數據存儲器塊中。PC是一個16位的計數器,用於存放一條要執行的指令地址,定址範圍為64kB,PC有自動加1功能,即完成了一條指令的執行后,其內容自動加1。PC本身並沒有地址,因而不可定址,用戶無法對它進行讀寫,但是可以通過轉移、調用、返回等指令改變其內容,以控制程序按我們的要求去執行。

     累加器ACC(Accumulator)
    累加器A是一個最常用的專用寄存器,大部分單操作指令的一個操作數取自累加器,很多雙操作數指令中的一個操作數也取自累加器。加、減、乘、除法運算的指令,運算結果都存放於累加器A或AB累加器對中。大部分的數據操作都會通過累加器A進行,它形象於一個交通要道,在程序比較複雜的運算中,累加器成了制約軟體效率的“瓶頸”,它的功能較多,地位也十分重要。以至於後來發展的單片機,有的集成了多累加器結構,或者使用寄存器陣列來代替累加器,即賦予更多寄存器以累加器的功能,目的是解決累加器的“交通堵塞”問題。提高單片機的軟體效率。

 
表2   特殊功能寄存器
標識符號 地址 寄存器名稱
ACC 0E0H 累加器
B 0F0H B寄存器
PSW 0D0H 程序狀態字
SP 81H 堆棧指針
DPTR 82H、83H 數據指針(16位)含DPL和DPH
IE 0A8H 中斷允許控制寄存器
IP 0B8H 中斷優先控制寄存器
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 串列數據緩衝寄存器
TCON 88H 定時控制寄存器
TMOD 89H 定時器方式選擇寄存器
TL0 8AH 定時器0低8位
TH0 8CH 定時器0高8位
TL1 8BH 定時器1低8位
TH1 8DH 定時器1高8位
     寄存器B
    在乘除法指令中,乘法指令中的兩個操作數分別取自累加器A和寄存器B,其結果存放於AB寄存器對中。除法指令中,被除數取自累加器A,除數取自寄存器B,結果商存放於累加器A,餘數存放於寄存器B中。

     程序狀態字(Program Status Word)
    程序狀態字是一個8位寄存器,用於存放程序運行的狀態信息,這個寄存器的一些位可由軟體設置,有些位則由硬體運行時自動設置的。寄存器的各位定義如下,其中PSW.1是保留位,未使用。下表是它的功能說明,並對各個位的定義介紹如下:

 
表3   程序狀態字
位序 PSW.7 PSW.6 PSW.5 PSW.4 PSW.3 PSW.2 PSW.1 PSW.0
位標誌 CY AC F0 RS1 RS0 OV - P

     PSW.7(CY) 進位標誌位,此位有兩個功能:一是存放執行某寫算數運算時,存放進位標誌,可被硬體或軟體置位或清零。二是在位操作中作累加位使用。

     PSW.6(AC) 輔助進位標誌位,當進行加、減運算時當有低4位向高4位進位或借位時,AC置位,否則被清零。AC輔助進位位也常用於十進位調整。

     PSW.5(F0) 用戶標誌位,供用戶設置的標誌位。

     PSW.4、PSW.3(RS1和 RS0) 寄存器組選擇位。可參見本章的圖2定義。

     PSW.2(OV) 溢出標誌。帶符號加減運算中,超出了累加器A所能表示的符號數有效範圍(-128—+127)時,即產生溢出,OV=1。表明運算運算結果錯誤。如果OV=0,表明運算結果正確。
    執行加法指令ADD時,當位6向位7進位,而位7不向C進位時,OV=1。或者位6不向位7進位,而位7向C進位時,同樣OV=1。
    除法指令,乘積超過255時,OV=1。表面乘積在AB寄存器對中。若OV=0,則說明乘積沒有超過255,乘積只在累加器A中。
    除法指令,OV=1,表示除數為0,運算不被執行。否則OV=0。

     PSW.0(P) 奇偶校驗位。聲明累加器A的奇偶性,每個指令周期都由硬體來置位或清零,若值為1的位數奇數,則P置位,否則清零。

  數據指針(DPTR)
    數據指針為16位寄存器,編程時,既可以按16位寄存器來使用,也可以按兩個8位寄存器來使用,即高位位元組寄存器DPH和低位位元組DPL。
    DPTR主要是用來保存16位地址,當對64kB外部數據存儲器定址時,可作為間址寄存器使用,此時,使用如下兩條指令:

            MOVX    A, @DPTR
            MOVX    @DPTR, A

    在訪問程序存儲器時,DPTR可用來作基址寄存器,採用基址+變址定址方式訪問程序存儲器,這條指令常用於讀取程序存儲器內的表格數據。

            MOVC    A, @A+@DPTR

     堆棧指針SP(Stack Pointer)
    堆棧是一種數據結構,它是一個8位寄存器,它指示堆棧頂部在內部RAM中的位置。系統複位后,SP的初始值為07H,使得堆棧實際上是從08H開始的。但我們從RAM的結構分佈中可知,08H—1FH隸屬1—3工作寄存器區,若編程時需要用到這些數據單元,必須對堆棧指針SP進行初始化,原則上設在任何一個區域均可,但一般設在30H—1FH之間較為適宜。



    轉入中斷服務程序或子程序時,需要保存的數據可能有若干個,都需要一一地保留。如果微處理器進行多重子程序或中斷服務程序嵌套,那麼需保存的數據就更多,這要求堆棧還需要有相當的容量。否則會造成堆棧溢出,丟失應備份的數據。輕者使運算和執行結果錯誤,重則使整個程序紊亂。

    MCS-51的堆棧是在RAM中開闢的,即堆棧要佔據一定的RAM存儲單元。同時MCS-51的堆棧可以由用戶設置,SP的初始值不同,堆棧的位置則不一定,不同的設計人員,使用的堆棧區則不同,不同的應用要求,堆棧要求的容量也有所不同。堆棧的操作只有兩種,即進棧和出棧,但不管是向堆棧寫入數據還是從堆棧中讀出數據,都是對棧頂單元進行的,SP就是即時指示出棧頂的位置(即地址)。在子程序調用和中斷服務程序響應的開始和結束期間,CPU都是根據SP指示的地址與相應的RAM存儲單元交換數據。

    堆棧的操作有兩種方法:其一是自動方式,即在中斷服務程序響應或子程序調用時,返回地址自動進棧。當需要返回執行主程序時,返回的地址自動交給PC,以保證程序從斷點處繼續執行,這種方式是不需要編程人員干預的。第二種方式是人工指令方式,使用專有的堆棧操作指令進行進出棧操作,也只有兩條指令:進棧為PUSH指令,在中斷服務程序或子程序調用時作為現場保護。出棧操作POP指令,用於子程序完成時,為主程序恢復現場。

     I/O口專用寄存器(P0、P1、P2、P3)
    I/O口寄存器P0、P1、P2和P3分別是MCS-51單片機的四組I/O口鎖存器。MCS-51單片機並沒有專門的I/O口操作指令,而是把I/O口也當作一般的寄存器來使用,數據傳送都統一使用MOV指令來進行,這樣的好處在於,四組I/O口還可以當作寄存器直接定址方式參與其他操作。

     定時/計數器(TL0、TH0、TL1和TH1)
    MCS-51單片機中有兩個16位的定時/計數器T0和T1,它們由四個8位寄存器組成的,兩個16位定時/計數器卻是完全獨立的。我們可以單獨對這四個寄存器進行定址,但不能把T0和T1當作16位寄存來使用。

     定時/計數器方式選擇寄存器(TMOD)
    TMOD寄存器是一個專用寄存器,用於控制兩個定時計數器的工作方式,TMOD可以用位元組傳送指令設置其內容,但不能位定址,各位的定義如下,更詳細的內容,我們將在《MCS-51定時器和中斷系統》章節中敘述。

 
表4   定時/計數器工作方式控制寄存器 TMOD
位序 D7 D6 D5 D4 D3 D2 D1 D0
位標誌 GATE M1 M0 GATE M1 M0
  定時/計數器1 定時/計數器0
 
     串列數據緩衝器(SBUF)
    串列數據緩衝器SBUF用來存放需發送和接收的數據,它由兩個獨立的寄存器組成,一個是發送緩衝器,另一個是接收緩衝器,要發送和接收的操作其實都是對串列數據緩衝器進行。

     其他控制寄存器(TMOD)
    除了以上我們簡述的幾個專用寄存外,還有IP、IE、TCON、SCON和PCON等幾個寄存器,這幾個控制寄存器主要用於中斷和定時的,我們將在《MCS-51定時器和中斷系統》中詳細說明。
 



[admin via 研發互助社區 ] MCS-51單片機存儲器結構已經有1161次圍觀

http://cocdig.com/docs/show-post-857.html