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