日本高清不卡中文字幕-一起草草视频在线观看-亚洲精品一区二区三区色-国产亚洲精品免费视频

你好!歡迎來到深圳市穎特新科技有限公司!
語言
當(dāng)前位置:首頁 >> 技術(shù)中心 >> 單片機入門 >> MCS-51的存儲器可分為四類,51單片機存儲器詳解

MCS-51的存儲器可分為四類,51單片機存儲器詳解

關(guān)鍵字:51單片機 存儲器 作者:admin 來源:不詳 發(fā)布時間:2018-05-18  瀏覽:22

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

程序存儲器

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

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

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

其中一組特殊是0000H—0002H單元,系統(tǒng)復(fù)位后,PC為0000H,單片機從0000H單元開始執(zhí)行程序,如果程序不是從0000H單元開始,則應(yīng)在這三個單元中存放一條無條件轉(zhuǎn)移指令,讓CPU直接去執(zhí)行用戶指定的程序。

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

0003H—000AH 外部中斷0中斷地址區(qū)。

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

0013H—001AH 外部中斷1中斷地址區(qū)。

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

0023H—002AH 串行中斷地址區(qū)。

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

數(shù)據(jù)存儲器

數(shù)據(jù)存儲器也稱為隨機存取數(shù)據(jù)存儲器。MCS-51單片機的數(shù)據(jù)存儲器在物理上和邏輯上都分為兩個地址空間,一個是內(nèi)部數(shù)據(jù)存儲區(qū)和一個外部數(shù)據(jù)存儲區(qū)。MCS-51內(nèi)部RAM有128或256個字節(jié)的用戶數(shù)據(jù)存儲(不同的型號有分別),它們是用于存放執(zhí)行的中間結(jié)果和過程數(shù)據(jù)的。MCS-51的數(shù)據(jù)存儲器均可讀寫,部分單元還可以位尋址。

8051內(nèi)部RAM共有256個單元,這256個單元共分為兩部分。其一是地址從00H—7FH單元(共128個字節(jié))為用戶數(shù)據(jù)RAM。從80H—FFH地址單元(也是128個字節(jié))為特殊寄存器(SFR)單元。從圖1中可清楚地看出它們的結(jié)構(gòu)分布。

1.gif

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

2.gif

內(nèi)部數(shù)據(jù)存儲器的配置

內(nèi)部數(shù)據(jù)存儲器的配置 內(nèi)部RAM的20H—2FH單元為位尋址區(qū),既可作為一般單元用字節(jié)尋址,也可對它們的位進行尋址。位尋址區(qū)共有16個字節(jié),128個位,位地址為00H—7FH。位地址分配如表1所示,CPU能直接尋址這些位,執(zhí)行例如置“1”、清“0”、求“反”、轉(zhuǎn)移,傳送和邏輯等操作。我們常稱MCS-51具有布爾處理功能,布爾處理的存儲空間指的就是這些為尋址區(qū)。

表1 RAM位尋址區(qū)地址表

1.png

特殊功能寄存器

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

MCS-51有21個特殊功能寄存器,它們被離散地分布在內(nèi)部RAM的80H—FFH地址中,這些寄存的功能已作了專門的規(guī)定,用戶不能修改其結(jié)構(gòu)。表2是特殊功能寄存器分布一覽表,我們對其主要的寄存器作一些簡單的介紹。

程序計數(shù)器PC(program Counter)

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

累加器ACC(Accumulator)

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

表2 特殊功能寄存器

2.png

寄存器B

在乘除法指令中,乘法指令中的兩個操作數(shù)分別取自累加器A和寄存器B,其結(jié)果存放于AB寄存器對中。除法指令中,被除數(shù)取自累加器A,除數(shù)取自寄存器B,結(jié)果商存放于累加器A,余數(shù)存放于寄存器B中。

程序狀態(tài)字(Program Status Word)

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

表3 程序狀態(tài)字

3.png

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

PSW.6(AC) 輔助進位標(biāo)志位,當(dāng)進行加、減運算時當(dāng)有低4位向高4位進位或借位時,AC置位,否則被清零。AC輔助進位位也常用于十進制調(diào)整。

PSW.5(F0) 用戶標(biāo)志位,供用戶設(shè)置的標(biāo)志位。

PSW.4、PSW.3(RS1和 RS0) 寄存器組選擇位?蓞⒁姳菊碌膱D2定義。

PSW.2(OV) 溢出標(biāo)志。帶符號加減運算中,超出了累加器A所能表示的符號數(shù)有效范圍(-128—+127)時,即產(chǎn)生溢出,OV=1。表明運算運算結(jié)果錯誤。如果OV=0,表明運算結(jié)果正確。

執(zhí)行加法指令A(yù)DD時,當(dāng)位6向位7進位,而位7不向C進位時,OV=1;蛘呶6不向位7進位,而位7向C進位時,同樣OV=1。

除法指令,乘積超過255時,OV=1。表面乘積在AB寄存器對中。若OV=0,則說明乘積沒有超過255,乘積只在累加器A中。

除法指令,OV=1,表示除數(shù)為0,運算不被執(zhí)行。否則OV=0。

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

數(shù)據(jù)指針(DPTR)

數(shù)據(jù)指針為16位寄存器,編程時,既可以按16位寄存器來使用,也可以按兩個8位寄存器來使用,即高位字節(jié)寄存器DPH和低位字節(jié)DPL。

DPTR主要是用來保存16位地址,當(dāng)對64kB外部數(shù)據(jù)存儲器尋址時,可作為間址寄存器使用,此時,使用如下兩條指令:

MOVX A, @DPTR

MOVX @DPTR, A

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

MOVC A, @A+@DPTR

堆棧指針SP(Stack Pointer)

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

數(shù)據(jù)的寫入堆棧我們稱為入棧(PUSH,有些文獻也稱作插入運算或壓入),從堆棧中取出數(shù)據(jù)稱為出棧(POP,也稱為刪除運算或彈出),堆棧的最主要特征是“后進先出”規(guī)則,也即最先入棧的數(shù)據(jù)放在堆棧的最底部,而最后入棧的數(shù)據(jù)放在棧的頂部,因此,最后入棧的數(shù)據(jù)出棧時則是最先的。這和我們往一個箱里存放書本一樣,需將最先放入箱底部的書取出,必須先取走最上層的書籍。這個道理非常相似。

那么堆棧有何用途呢?堆棧的設(shè)立是為了中斷操作和子程序的調(diào)用而用于保存數(shù)據(jù)的,即常說的斷點保護和現(xiàn)場保護。微處理器無論是在轉(zhuǎn)入子程序和中斷服務(wù)程序的執(zhí)行,執(zhí)行完后,還是要回到主程序中來,在轉(zhuǎn)入子程序和中斷服務(wù)程序前,必須先將現(xiàn)場的數(shù)據(jù)進行保存起來,否則返回時,CPU并不知道原來的程序執(zhí)行到哪一步,原來的中間結(jié)果如何?所以在轉(zhuǎn)入執(zhí)行其它子程序前,先將需要保存的數(shù)據(jù)壓入堆棧中保存。以備返回時,再復(fù)原當(dāng)時的數(shù)據(jù)。供主程序繼續(xù)執(zhí)行。 

3.gif

轉(zhuǎn)入中斷服務(wù)程序或子程序時,需要保存的數(shù)據(jù)可能有若干個,都需要一一地保留。如果微處理器進行多重子程序或中斷服務(wù)程序嵌套,那么需保存的數(shù)據(jù)就更多,這要求堆棧還需要有相當(dāng)?shù)娜萘。否則會造成堆棧溢出,丟失應(yīng)備份的數(shù)據(jù)。輕者使運算和執(zhí)行結(jié)果錯誤,重則使整個程序紊亂。

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

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

I/O口專用寄存器(P0、P1、P2、P3)

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

定時/計數(shù)器(TL0、TH0、TL1和TH1)

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

定時/計數(shù)器方式選擇寄存器(TMOD)

TMOD寄存器是一個專用寄存器,用于控制兩個定時計數(shù)器的工作方式,TMOD可以用字節(jié)傳送指令設(shè)置其內(nèi)容,但不能位尋址,各位的定義如下,更詳細(xì)的內(nèi)容,我們將在《MCS-51定時器和中斷系統(tǒng)》章節(jié)中敘述。

1.png

串行數(shù)據(jù)緩沖器SBUF用來存放需發(fā)送和接收的數(shù)據(jù),它由兩個獨立的寄存器組成,一個是發(fā)送緩沖器,另一個是接收緩沖器,要發(fā)送和接收的操作其實都是對串行數(shù)據(jù)緩沖器進行。

其他控制寄存器(TMOD)

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

編輯:admin  最后修改時間:2018-05-18

聯(lián)系方式

0755-82591179

傳真:0755-82591176

郵箱:vicky@yingtexin.net

地址:深圳市龍華區(qū)民治街道民治大道973萬眾潤豐創(chuàng)業(yè)園A棟2樓A08

Copyright © 2014-2023 穎特新科技有限公司 All Rights Reserved.  粵ICP備14043402號-4

上高县| 襄汾县| 曲麻莱县| 麟游县| 安新县| 娄烦县| 陆丰市| 淳化县| 南溪县| 常州市| 娄烦县| 旺苍县| 黄浦区| 高雄县| 隆昌县| 景宁| 弥勒县| 本溪市| 正安县| 苏尼特右旗| 拉孜县| 阿荣旗| 扬州市| 泽普县| 高雄市| 满城县| 吕梁市| 石楼县| 左权县| 康保县| 渭源县| 曲周县| 陆良县| 久治县| 凭祥市| 汝阳县| 营口市| 谢通门县| 金秀| 玛多县| 隆昌县|