新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機ROM與RAM

        51單片機ROM與RAM

        作者: 時間:2016-11-19 來源:網絡 收藏
        眾所周知,51內部的存儲器分為數據存儲器RAM程序存儲器ROM。以AT89c51為例,其中有128字節隨機存儲器(又稱數據儲存器RAM)和4K字節的只讀存儲器(又稱程序存儲器ROM)。
        先說說這個4K字節的程序存儲器或者說只讀存儲器,我們寫的程序經過編譯器編譯成機器碼都是存在這個區域,所以稱為程序存儲器;但單片機上電執行的時候,此區域內的數據只能讀取而不能寫入,他的只讀存儲器的名稱從這而來。89c51的ROM采用的是FPEROM(Flash Programmable and Erasable Read Only Memory),具體工藝我也不太清楚,號稱可以擦寫1000次,也就是說你每天寫30次,一個多月就報廢了。
        在說說128字節的隨機存儲器或者說數據存儲器,程序運行過程中,一些中間變量存儲在這個地方,也能從這個地方獲取需要運算的值,所以稱之為隨機存儲器,也稱為數據存儲器。個人覺得相當于計算機的內存,掉電丟失。
        看看MSC-51指令就知道,所有的數據移動指令都是對RAM區操作的,就是因為無法改變ROM。
        51內部的存儲器在物理上可分為4個區域:片內ROM,片外ROM,片內RAM和片外RAM。從邏輯上可分為三個區域,64KB片內外統一編址的程序存儲器(ROM),128字節或256字節的片內數據存儲器(RAM),64KB片外數據存儲器(RAM)。
        對應的keil編譯器關鍵字為:
        data:片內數據存儲器(RAM)低128字節(51系列片內只有128字節,52系列有256字節)
        bdata:可位尋址的片內RAM
        以上兩種類型可以快速的存取數據,常用來放臨時性的傳遞變量或使用頻率較高的變量。
        idata :片內數據存儲器(RAM)256字節
        xdata:片外數據存儲器64KB
        pdata:片外數據存儲器低256字節
        code:64KB程序存儲器(如果變量定義在這個空間,后面就不能修改了,如果有語句改變它的值,編譯器就會報錯。)

        此外,C51還有三種存儲模式(這是在開發環境里面設置的):SMALL, COMPACT, LARGE

        本文引用地址:http://www.104case.com/article/201611/318424.htm

        SMALL模式下,如果不做特別說明,參數及局部變量默認為data型,放在片內RAM128字節內,訪問迅速。由于內部的RAM有限,如果變量過多,會導致頻繁的使用寄存器,而使代碼變的冗長。此時棧也在片內的RAM,棧長很關鍵,因為棧長依賴于不同函數的嵌套層數。

        COMPACT:不做特別說明,參數及局部變量默認為pdata,??臻g在內部RAM。

        LARGE:參數及局部變量默認為xdata,使用DPTR來尋址。訪問效率低,此外這種數據指針不能對稱操作。

        全局變量會根據定義的類型或者存儲的模式分配在相應的存儲區內,有固定的地址,如果全局變量過多則會導致占用太多內存,處理速度變慢。




        關鍵詞: 51單片機ROMRA

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 孟州市| 大埔区| 磐安县| 鄂伦春自治旗| 公主岭市| 孝义市| 清新县| 横山县| 上杭县| 阿勒泰市| 鹤岗市| 西峡县| 尼玛县| 大名县| 台湾省| 新河县| 民乐县| 汾西县| 甘泉县| 廉江市| 涡阳县| 长春市| 彰化县| 乃东县| 福清市| 祥云县| 永定县| 西安市| 蚌埠市| 阿拉尔市| 富顺县| 建德市| 延川县| 阿拉善盟| 宜宾市| 苏尼特左旗| 犍为县| 玛沁县| 清水县| 娱乐| 库尔勒市|