ob体育竞彩 _欧宝体育在线链接 學習網站

51單片機ram區域劃分

時間:2017-08-30 20:17 來源:ob体育竞彩

51單片機ram區域劃分
51單片機的RAM分為片內和片外,標準的51內核是0x00~0x7F一共128B,而現在的大多數半導體廠商開發的51係列單片機都帶了擴展片內RAM,即片內RAM區域一般是從0x00到0xFF一共256B。隨著功能需求越來越多,程序量越來越大,那片內這256B也不夠用了,因此又擴展了片外RAM,片外RAM的預留比較大,最大可以從0x0000到0xFFFF一共64KB,當然了,每個具體型號有多大不一定,具體看通過芯片的手冊來了解。

而現在的51單片機的片外RAM, “片外”隻是一個名詞而已,實際上很多也是直接做到了單片機內部,但是訪問地址,還是以外部的起始地址的方式。就是說,片內RAM的地址從0x00到0xFF,而片外是從0x0000到0xFFFF;其中最開始的256B是重複的地址,這部分通常情況下隻要RAM夠用就可以不理會,軟件編譯器會自動給我們處理好。當選默認small模式,優先使用內部的前128B,而選Large模式,優先使用的是片外的64K。因此上麵那個同學的問題就在這裏了,因為他用的是AT89S51單片機,而這個單片機是沒有片外RAM的,如果選擇了Large模式,那優先使用的是片外,因此編譯完成,下載到單片機裏,程序運行時用了這個單片機所沒有的區域,那肯定就不行了。

通常KEIL C51語言中的以下幾個關鍵字,代表了RAM不同區域的劃分:

data:片內RAM從0x00~0x7F

idata:片內RAM從0x00~0xFF

pdata:片外RAM從0x00~0xFF

xdata:片外RAM從0x0000~0xFFFF

其中,data是idata的一部分,pdata是xdata的一部分。這個問題我們可以不關心,隻和彙編編程有關。

那如果選擇了small模式,我們定義一個變量a:unsigned char a = 0;他是默認保存在data區域,這個時候data是可以省略,但是我們想定義到xdata區域,就必須前邊加xdata關鍵字:unsigned char xdata a = 0;

如果選擇large模式,unsigned char a = 0;是定義在片外xdata區域,如果要定義在片內就必須加data關鍵字。

但是在RAM夠用的情況下,我們優先使用data的,其次使用idata關鍵字,再次使用pdata關鍵字,最後使用xdata。這個和底層訪問指令有關係,用前邊的讀寫速度要快一些,比如pdata訪問是單字節地址,而xdata是雙字節地址,訪問速度就慢了。

    看過《51單片機ram區域劃分》的人還看了以下文章
    初學單片機從51入門的好處 初學單片機從51入門的好處
    51單片機是一款已經出現很久的單片機,它的出現可以說是劃時代的。同時期出現的其它單片機都已經逐漸退出曆史的舞台,而它卻依舊出現在某些專業的教材上。從這點來看,它依舊有其學習的意義。下麵說說初學單片機從51入門的好處。 51單片機的學習資源非常多...
    如何使用C語言控製硬件 如何使用C語言控製硬件
    C語言的應用編程在單片機的領域占了很大一部分,使用的比較多的51單片機和STM32單片機都可以使用MDK軟件編寫固件。 單片機燒寫了固件後可以點亮LED燈,可以驅動ADC檢測電壓,也可以驅動蜂鳴器發聲,這就是簡單地控製硬件。稍微複雜一點的,可以驅動NRF2401進...
    c語言怎麼讀取一個變量的二進製文件內容 c語言怎麼讀取一個變量的二進製文件內容
    C語言是一種高級語言,很多設置都為了符合我們程序員的理解做了相應的調整。機器對於變量的理解是基於電路,也就是所謂的高低電平。也是因為這個出現了一個二進製。 而人類的計數更喜歡使用十進製,有專家說是因為是人類當初計數使用的手指,這樣十進製比較...
    單片機為啥叫單片機 單片機為啥叫單片機
    1、MCU 我一般在工作計劃和原理圖的說明上,就直接將STM32或者STC89的單片機,標注為MCU。 無論是理解為Micro CPU,還是Microcontroller Unit,我認為都行,也沒有仔細去區分去過。自從32位單片機出來後,一些單片機設計的係統確實是具備部分電腦的功能。 你...
    16位單片機低端打不過8位高端打不過32位怎麼看 16位單片機低端打不過8位高端打不過32位怎
    有時間去了解一下TI的MPS係列的單片機,它的低功耗和8位的51還有32位的STM32還是有一定的區別度的。 就比如MSP430係列,一些醫療的應用也少不了它,其各種低功耗的應用和例子一抓一大把。 也許從價格上來說,感覺,8位的便宜好買;從性能上來說,感覺,32位的...
    Baidu
    map