關(guān)于單片機(jī)RAM的作用
一、內(nèi)部RAM:共256個單元,用戶使用前128個單元,用于存放可讀寫數(shù)據(jù),后128個單元被專用寄存器占用。
前128單元具體分為:
1.工作寄存器區(qū):共4個組,每組為8個存儲單元,即00H-07H,08H-0FH,10H-17H,18H-1FH,具體選擇哪一個由程序狀態(tài)字(PSW)中的RS1和RS0的組合決定(在此我就不展開了,呵呵……)
2.位尋址區(qū):20H-2FH,共16個單元,每一位可以進(jìn)行位尋址(16*8=128個位地址),就是每一個觸發(fā)位,就是bit可以尋址
3.便箋區(qū):從30H-7FH,共80個單元,用于存放用戶數(shù)據(jù)或作堆棧區(qū)使用。
4.從80H-FFH為專用寄存器占用,其中還離散的分布SFR(21個特殊功能寄存器)
二、256B
其中00H~7FH
可分為3個區(qū)域:
00H~1FH 是通用寄存器區(qū)
20H~2FH 是位尋址區(qū)
30H~7FH 是用戶RAM區(qū)
80H~FFH是特殊功能寄存器區(qū)
三、AT89S51單片機(jī)的ram,只有128字節(jié),地址范圍:00H~7FH。
SFR不是RAM,是特殊功能寄存器,地址范圍:80H~FFH,SFR在其中離散分布著。
AT89S52單片機(jī)的ram,就有256字節(jié),地址范圍:00H~FFH。
SFR,特殊功能寄存器,仍然在地址范圍:80H~FFH。
兩者的地址重疊了,區(qū)別方法如下:
對80H~FFH直接尋址,就是讀寫SFR,特殊功能寄存器;
對80H~FFH間接尋址,就是讀寫RAM。
先說說這幾個詞是什么意思:
1,DATA,51的內(nèi)部RAM,只有128B(字節(jié))大小,不管是最新的什么增強(qiáng)型單片機(jī);
2,XDATA,外部RAM,只能使用MOVX尋址
3,CODE,代碼區(qū),即是你的代碼的大小,AT89C51為4K,C52為8K等,增強(qiáng)型的有更多的選擇。
然后說明一下,幾種RAM的區(qū)別:
1,DATA,也是上面1提到的DATA RAM,占51的128B;
2,IDATA,大小也為128B,與DATA構(gòu)成256字節(jié)的內(nèi)存(如AT89C52)
3,PDATA,外部RAM的前256B(就是一個頁的大小),是XDATA的一部分;
4,XDATA,外部RAM
所以你的那個單片機(jī)的1280B,其實(shí)組成為:
DATA :128B
IDATA:128B
XDATA:1024B
所以你的問題,“使用片內(nèi)RAM”打勾只是軟件仿真用的;你的XDATA用了758B,說明你特意用XDATA關(guān)鍵字定了這么大的內(nèi)存,比如大數(shù)組或者內(nèi)存模式時,使用了lager模式,那么編譯器會自動把超出的部分放到XDATA里,我猜你應(yīng)該是這里選擇了lager模式,不過你的內(nèi)容這么大,也只能選擇lager模式。
看完全文了嗎?喜歡就一起來點(diǎn)個 贊 吧!
編輯:admin 最后修改時間:2018-05-19