微控制器中什麼是片內ram和片外ramram就是資料存

時間 2021-08-30 09:14:27

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中的...