<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > MCS-51的存儲器

MCS-51的存儲器

作者: 時(shí)間:2016-11-26 來(lái)源:網(wǎng)絡(luò ) 收藏
MCS-51存儲器可分為四類(lèi):

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

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

8051片內有4kB的程序存儲單元,其地址為0000H—0FFFH,單片機啟動(dòng)復位后,程序計數器的內容為0000H,所以系統將從0000H單元開(kāi)始執行程序。但在程序存儲中有些特殊的單元,這在使用中應加以注意:

其中一組特殊是0000H—0002H單元,系統復位后,PC為0000H,單片機從0000H單元開(kāi)始執行程序,如果程序不是從0000H單元開(kāi)始,則應在這三個(gè)單元中存放一條無(wú)條件轉移指令,讓CPU直接去執行用戶(hù)指定的程序。

另一組特殊單元是0003H—002AH,這40個(gè)單元各有用途,它們被均勻地分為五段,它們的定義如下:

0003H—000AH外部中斷0中斷地址區。

000BH—0012H定時(shí)/計數器0中斷地址區。

0013H—001AH外部中斷1中斷地址區。

001BH—0022H定時(shí)/計數器1中斷地址區。

0023H—002AH串行中斷地址區。

可見(jiàn)以上的40個(gè)單元是專(zhuān)門(mén)用于存放中斷處理程序的地址單元,中斷響應后,按中斷的類(lèi)型,自動(dòng)轉到各自的中斷區去執行程序。因此以上地址單元不能用于存放程序的其他內容,只能存放中斷服務(wù)程序。但是通常情況下,每段只有8個(gè)地址單元是不能存下完整的中斷服務(wù)程序的,因而一般也在中斷響應的地址區安放一條無(wú)條件轉移指令,指向程序存儲器的其它真正存放中斷服務(wù)程序的空間去執行,這樣中斷響應后,CPU讀到這條轉移指令,便轉向其他地方去繼續執行中斷服務(wù)程序。

數據存儲器
數據存儲器也稱(chēng)為隨機存取數據存儲器。MCS-51單片機的數據存儲器在物理上和邏輯上都分為兩個(gè)地址空間,一個(gè)是內部數據存儲區和一個(gè)外部數據存儲區。MCS-51內部RAM有128或256個(gè)字節的用戶(hù)數據存儲(不同的型號有分別),它們是用于存放執行的中間結果和過(guò)程數據的。MCS-51的數據存儲器均可讀寫(xiě),部分單元還可以位尋址。
8051內部RAM共有256個(gè)單元,這256個(gè)單元共分為兩部分。其一是地址從00H—7FH單元(共128個(gè)字節)為用戶(hù)數據RAM。從80H—FFH地址單元(也是128個(gè)字節)為特殊寄存器(SFR)單元。從圖1中可清楚地看出它們的結構分布。

在00H—1FH共32個(gè)單元中被均勻地分為四塊,每塊包含八個(gè)8位寄存器,均以R0—R7來(lái)命名,我們常稱(chēng)這些寄存器為通用寄存器。這四塊中的寄存器都稱(chēng)為R0—R7,那么在程序中怎么區分和使用它們呢?聰明的INTEL工程師們又安排了一個(gè)寄存器——程序狀態(tài)字寄存器(PSW)來(lái)管理它們,CPU只要定義這個(gè)寄存的PSW的第3和第4位(RS0和RS1),即可選中這四組通用寄存器。對應的編碼關(guān)系如圖2所示。
內部RAM的20H—2FH單元為位尋址區,既可作為一般單元用字節尋址,也可對它們的位進(jìn)行尋址。位尋址區共有16個(gè)字節,128個(gè)位,位地址為00H—7FH。位地址分配如表1所示,CPU能直接尋址這些位,執行例如置“1”、清“0”、求“反”、轉移,傳送和邏輯等操作。我們常稱(chēng)MCS-51具有布爾處理功能,布爾處理的存儲空間指的就是這些為尋址區。
表1RAM位尋址區地址表
單元地址MSB位地址LSB
2FH7FH7EH7DH7CH7BH7AH79H78H
2EH77H76H75H74H73H72H71H70H
2DH6FH6EH6DH6CH6BH6AH69H68H
2CH67H66H65H64H63H62H61H60H
2BH5FH5EH5DH5CH5BH5AH59H58H
2AH57H56H55H54H53H52H51H50H
29H4FH4EH4DH4CH4BH4AH49H48H
28H47H46H45H44H43H42H41H40H
27H3FH3EH3DH3CH3BH3AH39H38H
26H37H36H35H34H33H32H31H30H
25H2FH2EH2DH2CH2BH2AH29H28H
24H27H26H25H24H23H22H21H20H
23H1FH1EH1DH1CH1BH1AH19H18H
22H17H16H15H14H13H12H11H10H
21H0FH0EH0DH0CH0BH0AH09H08H
20H07H06H05H04H03H02H01H00H

特殊功能寄存器
特殊功能寄存器(SFR)也稱(chēng)為專(zhuān)用寄存器,特殊功能寄存器反映了MCS-51單片機的運行狀態(tài)。很多功能也通過(guò)特殊功能寄存器來(lái)定義和控制程序的執行。

MCS-51有21個(gè)特殊功能寄存器,它們被離散地分布在內部RAM的80H—FFH地址中,這些寄存的功能已作了專(zhuān)門(mén)的規定,用戶(hù)不能修改其結構。表2是特殊功能寄存器分布一覽表,我們對其主要的寄存器作一些簡(jiǎn)單的介紹。
程序計數器PC(program Counter)
程序計數器在物理上是獨立的,它不屬于特殊內部數據存儲器塊中。PC是一個(gè)16位的計數器,用于存放一條要執行的指令地址,尋址范圍為64kB,PC有自動(dòng)加1功能,即完成了一條指令的執行后,其內容自動(dòng)加1。PC本身并沒(méi)有地址,因而不可尋址,用戶(hù)無(wú)法對它進(jìn)行讀寫(xiě),但是可以通過(guò)轉移、調用、返回等指令改變其內容,以控制程序按我們的要求去執行。

累加器ACC(Accumulator)
累加器A是一個(gè)最常用的專(zhuān)用寄存器,大部分單操作指令的一個(gè)操作數取自累加器,很多雙操作數指令中的一個(gè)操作數也取自累加器。加、減、乘、除法運算的指令,運算結果都存放于累加器A或AB累加器對中。大部分的數據操作都會(huì )通過(guò)累加器A進(jìn)行,它形象于一個(gè)交通要道,在程序比較復雜的運算中,累加器成了制約軟件效率的“瓶頸”,它的功能較多,地位也十分重要。以至于后來(lái)發(fā)展的單片機,有的集成了多累加器結構,或者使用寄存器陣列來(lái)代替累加器,即賦予更多寄存器以累加器的功能,目的是解決累加器的“交通堵塞”問(wèn)題。提高單片機的軟件效率。
表2特殊功能寄存器
標識符號地址寄存器名稱(chēng)
ACC0E0H累加器
B0F0HB寄存器
PSW0D0H程序狀態(tài)字
SP81H堆棧指針
DPTR82H、83H數據指針(16位)含DPL和DPH
IE0A8H中斷允許控制寄存器
IP0B8H中斷優(yōu)先控制寄存器
P080HI/O口0寄存器
P190HI/O口1寄存器
P20A0HI/O口2寄存器
P30B0HI/O口3寄存器
PCON87H電源控制及波特率選擇寄存器
SCON98H串行口控制寄存器
SBUF99H串行數據緩沖寄存器
TCON88H定時(shí)控制寄存器
TMOD89H定時(shí)器方式選擇寄存器
TL08AH定時(shí)器0低8位
TH08CH定時(shí)器0高8位
TL18BH定時(shí)器1低8位
TH18DH定時(shí)器1高8位
寄存器B
在乘除法指令中,乘法指令中的兩個(gè)操作數分別取自累加器A和寄存器B,其結果存放于A(yíng)B寄存器對中。除法指令中,被除數取自累加器A,除數取自寄存器B,結果商存放于累加器A,余數存放于寄存器B中。

程序狀態(tài)字(Program Status Word)
程序狀態(tài)字是一個(gè)8位寄存器,用于存放程序運行的狀態(tài)信息,這個(gè)寄存器的一些位可由軟件設置,有些位則由硬件運行時(shí)自動(dòng)設置的。寄存器的各位定義如下,其中PSW.1是保留位,未使用。下表是它的功能說(shuō)明,并對各個(gè)位的定義介紹如下:
表3程序狀態(tài)字
位序PSW.7PSW.6PSW.5PSW.4PSW.3PSW.2PSW.1PSW.0
位標志CYACF0RS1RS0OV-P
PSW.7(CY)進(jìn)位標志位,此位有兩個(gè)功能:一是存放執行某寫(xiě)算數運算時(shí),存放進(jìn)位標志,可被硬件或軟件置位或清零。二是在位操作中作累加位使用。

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

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

PSW.4、PSW.3(RS1和 RS0)寄存器組選擇位??蓞⒁?jiàn)本章的圖2定義。

PSW.2(OV)溢出標志。帶符號加減運算中,超出了累加器A所能表示的符號數有效范圍(-128—+127)時(shí),即產(chǎn)生溢出,OV=1。表明運算運算結果錯誤。如果OV=0,表明運算結果正確。
執行加法指令ADD時(shí),當位6向位7進(jìn)位,而位7不向C進(jìn)位時(shí),OV=1?;蛘呶?不向位7進(jìn)位,而位7向C進(jìn)位時(shí),同樣OV=1。
除法指令,乘積超過(guò)255時(shí),OV=1。表面乘積在A(yíng)B寄存器對中。若OV=0,則說(shuō)明乘積沒(méi)有超過(guò)255,乘積只在累加器A中。
除法指令,OV=1,表示除數為0,運算不被執行。否則OV=0。

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

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

MOVXA,@DPTR
MOVX@DPTR,A

在訪(fǎng)問(wèn)程序存儲器時(shí),DPTR可用來(lái)作基址寄存器,采用基址+變址尋址方式訪(fǎng)問(wèn)程序存儲器,這條指令常用于讀取程序存儲器內的表格數據。

MOVCA,@A+@DPTR

堆棧指針SP(Stack Pointer)
堆棧是一種數據結構,它是一個(gè)8位寄存器,它指示堆棧頂部在內部RAM中的位置。系統復位后,SP的初始值為07H,使得堆棧實(shí)際上是從08H開(kāi)始的。但我們從RAM的結構分布中可知,08H—1FH隸屬1—3工作寄存器區,若編程時(shí)需要用到這些數據單元,必須對堆棧指針SP進(jìn)行初始化,原則上設在任何一個(gè)區域均可,但一般設在30H—1FH之間較為適宜。
數據的寫(xiě)入堆棧我們稱(chēng)為入棧(PUSH,有些文獻也稱(chēng)作插入運算或壓入),從堆棧中取出數據稱(chēng)為出棧(POP,也稱(chēng)為刪除運算或彈出),堆棧的最主要特征是“后進(jìn)先出”規則,也即最先入棧的數據放在堆棧的最底部,而最后入棧的數據放在棧的頂部,因此,最后入棧的數據出棧時(shí)則是最先的。這和我們往一個(gè)箱里存放書(shū)本一樣,需將最先放入箱底部的書(shū)取出,必須先取走最上層的書(shū)籍。這個(gè)道理非常相似。

那么堆棧有何用途呢?堆棧的設立是為了中斷操作和子程序的調用而用于保存數據的,即常說(shuō)的斷點(diǎn)保護和現場(chǎng)保護。微處理器無(wú)論是在轉入子程序和中斷服務(wù)程序的執行,執行完后,還是要回到主程序中來(lái),在轉入子程序和中斷服務(wù)程序前,必須先將現場(chǎng)的數據進(jìn)行保存起來(lái),否則返回時(shí),CPU并不知道原來(lái)的程序執行到哪一步,原來(lái)的中間結果如何?所以在轉入執行其它子程序前,先將需要保存的數據壓入堆棧中保存。以備返回時(shí),再復原當時(shí)的數據。供主程序繼續執行。
轉入中斷服務(wù)程序或子程序時(shí),需要保存的數據可能有若干個(gè),都需要一一地保留。如果微處理器進(jìn)行多重子程序或中斷服務(wù)程序嵌套,那么需保存的數據就更多,這要求堆棧還需要有相當的容量。否則會(huì )造成堆棧溢出,丟失應備份的數據。輕者使運算和執行結果錯誤,重則使整個(gè)程序紊亂。

MCS-51的堆棧是在RAM中開(kāi)辟的,即堆棧要占據一定的RAM存儲單元。同時(shí)MCS-51的堆??梢杂捎脩?hù)設置,SP的初始值不同,堆棧的位置則不一定,不同的設計人員,使用的堆棧區則不同,不同的應用要求,堆棧要求的容量也有所不同。堆棧的操作只有兩種,即進(jìn)棧和出棧,但不管是向堆棧寫(xiě)入數據還是從堆棧中讀出數據,都是對棧頂單元進(jìn)行的,SP就是即時(shí)指示出棧頂的位置(即地址)。在子程序調用和中斷服務(wù)程序響應的開(kāi)始和結束期間,CPU都是根據SP指示的地址與相應的RAM存儲單元交換數據。

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

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

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

定時(shí)/計數器方式選擇寄存器(TMOD)
TMOD寄存器是一個(gè)專(zhuān)用寄存器,用于控制兩個(gè)定時(shí)計數器的工作方式,TMOD可以用字節傳送指令設置其內容,但不能位尋址,各位的定義如下,更詳細的內容,我們將在《MCS-51定時(shí)器和中斷系統》章節中敘述。
表4定時(shí)/計數器工作方式控制寄存器TMOD
位序D7D6D5D4D3D2D1D0
位標志GATEM1M0GATEM1M0
定時(shí)/計數器1定時(shí)/計數器0
串行數據緩沖器(SBUF)
串行數據緩沖器SBUF用來(lái)存放需發(fā)送和接收的數據,它由兩個(gè)獨立的寄存器組成,一個(gè)是發(fā)送緩沖器,另一個(gè)是接收緩沖器,要發(fā)送和接收的操作其實(shí)都是對串行數據緩沖器進(jìn)行。

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



關(guān)鍵詞: MCS-51存儲

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>