1樓:卞默黎運珹
51微控制器有以下幾個記憶體模組組成:
1】rom或者flash,叫程式儲存區,你寫的程式是存在這裡面的,上電後從這裡面執行。
程式儲存區也分為片內和片外,一般來說,現在的51很多已經做到了64k,所以很少有外擴
片外flash或者片外的rom了,flash或者rom不管是片內還是片外的,只能用來定義常量,是用code來修飾,也就是說,用code來修飾的東西,在程式執行過程中,不能修改;
2】ram有------內部ram的低128位(00-7f),對應c語言就是data,比如我定義一個變數,
data
unsigned
char
var=
0;那麼,這個
var變數就是放在內部的低128位ram中
-------內部ram的高128位(80-ff),對應c語言就是idata,比如我定義一個變數,
idata
unsigned
char
var=
0;那麼,這個
var變數就是放在內部的高128位ram中
-------特殊功能暫存器(sfr)(80-ff),對應c語言就是sfr比如我定義一個變數,
sfrunsigned
char
var=
0x90;
那麼,這個
var變數就是放在內部的特殊功能暫存器中,這是你對var操作,相當於操作一個特殊的暫存器,但是小心,不能隨便定義sfr變數,很危險
------外部ram
64k(0000-ffff)
外部的ram可以擴充套件到65536個,但是前256個算是一頁,這一頁比較特殊,是用
pdata來修飾的,當然,也可以用xdata來修飾。
除了第一頁的256個以外的其他65280個空間,只能用xdata來修飾;
回過頭來討論pdata和xdata,這兩個都能修飾外部ram的第一頁,但是,pdata只能修飾第一頁,即最前面的256個外部ram,那麼,這最前面的256個到底用pdata還是xdata好的呢?
答案是pdata,因為xdata修飾的變數,用的是dptr定址,pdata用的是r0和r1.dptr因為是16位的,所以可以覆蓋整個的64k外部ram,r0和r1是8位,所以只能定址最前面的256個,也就是外部ram的第一頁,但是,用r0定址,比dptr快一倍,**也小的很多
樓主又疑惑了,好多地址是重複的,比如,我向80h地址寫一個數值,微控制器怎麼知道讀的是內部的高128位ram?還是sfr?還是外部64k的ram呢?
答案是用指令,如果是直接定址,那麼訪問的就是sfr,如果是r0或者r1間接定址,就是內部高128位ram,如果是dptr或者是r0,r1間接定址,且配合的是movx指令,那麼就是訪問外部64kram中的第80h個地址。
概括一下來說,51的記憶體由以下組成:
1----程式儲存器(包括片內flash或rom,也包括片外flash或rom,c語言用code定義)
2----內部低128位ram,c語言用data定義
3---內部高128位ram,c語言用idata定義
4---內部sfr,c語言用sfr定義
5---外部65536個ram(通常,很多微控制器廠家不會給你擴充套件那麼多的,一般來說擴充套件256個位元組或者1024個位元組就差不多了,最近巨集晶的出了個擴充套件4096位元組的。這65536位元組的ram,前256個可以用pdata修飾,也可以用xdata修飾,超過256個之後的,只能用xdata修飾)
以上所說的只是針對51核心的微控制器,其他核心的,像arm之類的,不是這種結構的。
2樓:
片內ram是微控制器內部整合的,片外ram是微控制器可以支援記憶體擴充套件。ram一般是是掉電丟失的儲存器。微控制器架構中ram負責載入程式執行。
3樓:匿名使用者
是啊,ram就是儲存器存放資料和**都可以
mcs—51微控制器資料儲存器ram分佈情況,說明片內和片外如何區分
4樓:做而論道
片內,00h~7fh,共 128 位元組;
片外,0000h~ffffh,共 65536 位元組,即 64k。
如何區分:
是要求用肉眼區分嗎?
片內 ram,是買來一片 51 微控制器晶片時,裡面自帶的。
片外 ram,需要另外再買幾塊 ram 晶片,焊接到電路板上。
用肉眼觀察,立即就可以區分出來。
5樓:
51微控制器有以下幾個記憶體模組組成:
1】rom或者flash,叫程式儲存區,你寫的程式是存在這裡面的,上電後從這裡面執行。
程式儲存區也分為片內和片外,一般來說,現在的51很多已經做到了64k,所以很少有外擴
片外flash或者片外的rom了,flash或者rom不管是片內還是片外的,只能用來定義常量,是用code來修飾,也就是說,用code來修飾的東西,在程式執行過程中,不能修改;
2】ram有------內部ram的低128位(00-7f),對應c語言就是data,比如我定義一個變數,
data unsigned char var = 0;
那麼,這個 var變數就是放在內部的低128位ram中
-------內部ram的高128位(80-ff),對應c語言就是idata,比如我定義一個變數,
idata unsigned char var = 0;
那麼,這個 var變數就是放在內部的高128位ram中
-------特殊功能暫存器(sfr)(80-ff),對應c語言就是sfr比如我定義一個變數,
sfr unsigned char var = 0x90;
那麼,這個 var變數就是放在內部的特殊功能暫存器中,這是你對var操作,相當於操作一個特殊的暫存器,但是小心,不能隨便定義sfr變數,很危險
------外部ram 64k(0000-ffff)
外部的ram可以擴充套件到65536個,但是前256個算是一頁,這一頁比較特殊,是用
pdata來修飾的,當然,也可以用xdata來修飾。
除了第一頁的256個以外的其他65280個空間,只能用xdata來修飾;
回過頭來討論pdata和xdata,這兩個都能修飾外部ram的第一頁,但是,pdata只能修飾第一頁,即最前面的256個外部ram,那麼,這最前面的256個到底用pdata還是xdata好的呢?
答案是pdata,因為xdata修飾的變數,用的是dptr定址,pdata用的是r0和r1.dptr因為是16位的,所以可以覆蓋整個的64k外部ram,r0和r1是8位,所以只能定址最前面的256個,也就是外部ram的第一頁,但是,用r0定址,比dptr快一倍,**也小的很多
樓主又疑惑了,好多地址是重複的,比如,我向80h地址寫一個數值,微控制器怎麼知道讀的是內部的高128位ram?還是sfr?還是外部64k的ram呢?
答案是用指令,如果是直接定址,那麼訪問的就是sfr,如果是r0或者r1間接定址,就是內部高128位ram,如果是dptr或者是r0,r1間接定址,且配合的是movx指令,那麼就是訪問外部64kram中的第80h個地址。
概括一下來說,51的記憶體由以下組成:
1----程式儲存器(包括片內flash或rom,也包括片外flash或rom,c語言用code定義)
2----內部低128位ram,c語言用data定義
3---內部高128位ram,c語言用idata定義
4---內部sfr,c語言用sfr定義
5---外部65536個ram(通常,很多微控制器廠家不會給你擴充套件那麼多的,一般來說擴充套件256個位元組或者1024個位元組就差不多了,最近巨集晶的出了個擴充套件4096位元組的。這65536位元組的ram,前256個可以用pdata修飾,也可以用xdata修飾,超過256個之後的,只能用xdata修飾)
以上所說的只是針對51核心的微控制器,其他核心的,像arm之類的,不是這種結構的。
6樓:紫色學習
mcs—51微控制器資料儲存器ram分佈情況及區分:片內 ram,是買來一片 51 微控制器晶片時,裡面自帶的。片外 ram,需要另外再買幾塊 ram 晶片,焊接到電路板上。
微控制器(microcontrollers)是一種積體電路晶片,是採用超大規模積體電路技術把具有資料處理能力的**處理器cpu、隨機儲存器ram、只讀儲存器rom、多種i/o口和中斷系統、定時器/計數器等功能(可能還包括顯示驅動電路、脈寬調製電路、模擬多路轉換器、a/d轉換器等電路)整合到一塊矽片上構成的一個小而完善的微型計算機系統,在工業控制領域廣泛應用。從上世紀80年代,由當時的4位、8位微控制器,發展到現在的300m的高速微控制器。
8051微控制器訪問片外ROM與片外RAM的讀寫訊號各是什麼
墨汁諾 51微控制器訪問片外rom 取指令 執行movc指令 時,psen出現短暫的低電平 51微控制器訪問片外ram 執行movx指令 時,wr或 rd出現短暫的低電平。它們三條線,就是樓主問的讀寫控制訊號。雖然訪問片外儲存器時,ea 和 ale 也起了作用,但是它們都不在回答本題的範圍之內。當a...
80C51微控制器片內RAM低儲存單元劃分為哪主要部分 各部分主要功能是什麼
念德臺丁 return k是函式返回值,這是個子函式,處理完後返回給呼叫函式一個處理後的值。k k 1 j 這個是指k左移一位,在或上j,因為j sda,看你的寫法,據我猜測da是一個晶片的埠,這是序列輸入的方式,你要讀取晶片的輸出值 假設某個時候k 0000 0001,假設j這個時候為1,那執行k...
關於51微控制器讀取片外ROM的問題
rom的cs一腳接到微控制器的哪個位置?用的rd訊號使用了嗎?你用的27e512是64kb的rom,這個正好是51微控制器的定址空間,所以你把微控制器連線rom時要稍微特殊一些,rom的cs引腳用p1或p3的一個埠位連線,rom的oe連線微控制器的rd,其餘相同,這樣使用movx指令來讀取rom中的...