<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 8051單片機(jī)存儲器地址分配

          8051單片機(jī)存儲器地址分配

          作者: 時間:2016-11-24 來源:網(wǎng)絡(luò) 收藏

          一、程序存儲器空間

          本文引用地址:http://www.ex-cimer.com/article/201611/320631.htm

          MCS-51單片機(jī)具有64kB程序存儲器尋址空間,它是用于存放用戶程序、數(shù)據(jù)和表格等信息。

          1、對于內(nèi)部無ROM的8031單片機(jī),它的程序存儲器必須外接,空間地址為64kB,此時單片機(jī)的使能端端必須接地。強(qiáng)制CPU從外部程序存儲器讀取程序。

          2、對于內(nèi)部有ROM的8051等單片機(jī),正常運行時,則需接高電平,使CPU先從內(nèi)部的程序存儲中讀取程序,當(dāng)PC值超過內(nèi)部ROM的容量時,才會轉(zhuǎn)向外部的程序存儲器讀取程序。

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

          其中一組特殊是0000H—0002H單元,系統(tǒng)復(fù)位后,PC為0000H,單片機(jī)從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ù)存儲器也稱為隨機(jī)存取數(shù)據(jù)存儲器。MCS-51單片機(jī)的數(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ù)存儲器均可讀寫,部分單元還可以位尋址。
          1、 8051內(nèi)部RAM共有256個單元,這256個單元共分為兩部分。其一是地址從00H—7FH單元(共128個字節(jié))為用戶數(shù)據(jù)RAM。從80H—FFH地址單元(也是128個字節(jié))為特殊寄存器(SFR)單元。從圖1中可清楚地看出它們的結(jié)構(gòu)分布。

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

          內(nèi)部RAM的20H—2FH單元為位尋址區(qū),既可作為一般單元用字節(jié)尋址,也可對它們的位進(jìn)行尋址。位尋址區(qū)共有16個字節(jié),128個位,位地址為00H—7FH。位地址分配如表1所示,CPU能直接尋址這些位,執(zhí)行例如置“1”、清“0”、求“反”、轉(zhuǎn)移,傳送和邏輯等操作。我們常稱MCS-51具有布爾處理功能,布爾處理的存儲空間指的就是這些為尋址區(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)也稱為專用寄存器,特殊功能寄存器反映了MCS-51單片機(jī)的運行狀態(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本身并沒有地址,因而不可尋址,用戶無法對它進(jìn)行讀寫,但是可以通過轉(zhuǎn)移、調(diào)用、返回等指令改變其內(nèi)容,以控制程序按我們的要求去執(zhí)行。

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

          表2 特殊功能寄存器
          標(biāo)識符號 地址 寄存器名稱
          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 定時控制寄存器
          TMOD 89H 定時器方式選擇寄存器
          TL0 8AH 定時器0低8位
          TH0 8CH 定時器0高8位
          TL1 8BH 定時器1低8位
          TH1 8DH 定時器1高8位



          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();