關於微控制器儲存器的問題,idata,data,badata,xdata,pdata

時間 2021-08-11 18:12:31

1樓:

關於51微控制器記憶體問題,一直是個疑惑大家的問題,因為51微控制器是個很另類的微控制器。

下面我給樓主講解一下:

51微控制器之所以另類,是因為,他定址記憶體的空間,不是靠匯流排,是用指令的方式。

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之類的,不是這種結構的。

最後,回答樓主的問題:

片外儲存區是什麼?

這個問題太模糊,答案可以是外擴的flash,也可以說是外擴的ram,

如果問題是這麼問的:

程式或者常量儲存在片外儲存區,這個片外儲存區指的是什麼?

答案是外擴flash;

如果問題是---變數儲存在片外儲存區,這個片外儲存區指的是什麼?

答案是外擴ram;

一般來說,如果不指明的話,外記憶體儲區,行業內人士指的是外部的ram。

片記憶體儲器是什麼?是不是就是內部的e2prom?

片記憶體儲區一般來說,指的是內部的ram,包括高128位(idata)和低128位(data)

片記憶體儲器,這個說法我沒聽說過,可能是eeprom吧。

2樓:做而論道

樓主問的是什麼微控制器?

關於微控制器的定時器問題

以下程式以測試通過,晶振頻率12m,採用p1口灌電流驅動。還有問題再問我。org 0000h ajmp main org 000bh ajmp time0 main mov tmod,01h mov ie,82h mov tl0,0afh mov th0,3ch mov r3,14h mov r2,...

關於微控制器TMOD問題,問個微控制器問題 TMOD 0x21 設定定時器1為工作方式2 求教這句話什麼意思

生活如歌 1 t1方式0 tmod 0x00.t1方式1 tmod 0x10因為t1t0都在tmod裡設定,高四位t1低四位t0 2 p3.4是t0計數器輸入引腳,此時只要設定tmod中的d2位即可 c t位 即tmod 0x04,啟動計數後就可以計數了,此時一般計數初值為0 3 查詢方式時要不停地...

關於微控制器的考試問題,關於微控制器的考試題目

30 序列 31 cy 進借位位 32 序列資料傳送 33 迴圈34 pop direct 35 reti 36 立即數定址 37 暫存器間接定址 38 t0 th0 tl0 39 here jnb tf0 tf1 here 40 6 41 沒有16位的定時器,不過有乙個可以當做16位的定時器用 4...