|
1、內(nèi)部 RAM:共 256 個(gè)單元,用戶(hù)使用前 128 個(gè)單元,用于存放可讀寫(xiě)數(shù)據(jù),后 128 個(gè)單元被專(zhuān)用寄存器占用。
前 128 單元具體分為:
1.工作寄存器區(qū):共 4 個(gè)組,每組為 8 個(gè)存儲(chǔ)單元,即
00H-07H,08H-0FH,10H-17H,18H-1FH,具體選擇哪一個(gè)由程序狀態(tài)字(PSW)中的 RS1 和 RS0 的組合決定(在此我就不展開(kāi)了,呵呵……)
2.位尋址區(qū):20H-2FH,共 16 個(gè)單元,每一位可以進(jìn)行位尋址(16*8=128 個(gè)位地 址),就是每一個(gè)觸發(fā)位,就是 bit 可以尋址
3.便箋區(qū):從 30H-7FH,共 80 個(gè)單元,用于存放用戶(hù)數(shù)據(jù)或作堆棧區(qū)使用。
4.從 80H-FFH 為專(zhuān)用寄存器占用,其中還離散的分布 SFR(21 個(gè)特殊功能寄存器)
2、256B
其中 00H~7FH
可分為 3 個(gè)區(qū)域:
00H~1FH 是通用寄存器區(qū)
20H~2FH 是位尋址區(qū)
30H~7FH 是用戶(hù) RAM 區(qū)
80H~FFH 是特殊功能寄存器區(qū)
3、AT89S51 單片機(jī)的 ram,只有 128 字節(jié),地址范圍:00H~7FH。
SFR 不是 RAM,是特殊功能寄存器,地址范圍:80H~FFH,SFR 在其中離散分布
著。
AT89S52 單片機(jī)的 ram,就有 256 字節(jié),地址范圍:00H~FFH。 SFR,特殊功能寄存器,仍然在地址范圍:80H~FFH。 兩者的地址重疊了,區(qū)別方法如下:
對(duì) 80H~FFH 直接尋址,就是讀寫(xiě) SFR,特殊功能寄存器;對(duì) 80H~FFH 間接尋址,就是讀寫(xiě) RAM。
先說(shuō)說(shuō)這幾個(gè)詞是什么意思:
1,DATA,51 的內(nèi)部 RAM,只有 128B(字節(jié))大小,不管是最新的什么增強(qiáng)型 單片機(jī);
2,XDATA,外部 RAM,只能使用 MOVX 尋址
3,CODE,代碼區(qū),即是你的代碼的大小,AT89C51為 4K,C52 為 8K 等,增強(qiáng)
型的有更多的選擇。
然后說(shuō)明一下,幾種 RAM的區(qū)別:
1,DATA,也是上面 1 提到的 DATA RAM,占 51 的 128B;
2,IDATA,大小也為 128B,與 DATA 構(gòu)成 256 字節(jié)的內(nèi)存(如 AT89C52)
3,PDATA,外部 RAM 的前 256B(就是一個(gè)頁(yè)的大小),是 XDATA 的一部分;
4,XDATA,外部 RAM
所以你的那個(gè)單片機(jī)的 1280B,其實(shí)組成為:
DATA :128B
IDATA:128B
XDATA:1024B
所以你的問(wèn)題,“使用片內(nèi) RAM”打勾只是軟件仿真用的;你的 XDATA 用了 758B, 說(shuō)明你特意用 XDATA 關(guān)鍵字定了這么大的內(nèi)存,比如大數(shù)組或者內(nèi)存模式時(shí),使用了 lager 模式,那么編譯器會(huì)自動(dòng)把超出的部分放到 XDATA 里,我猜你應(yīng)該 是這里選擇了 lager 模式,不過(guò)你的內(nèi)容這么大,也只能選擇 lager 模式。
以上為原創(chuàng),如果想看更詳細(xì)的介紹,可以看以下鏈接:
單片機(jī) C 語(yǔ)言 unsigned char code table[] code 是什么作用?
code 的作用是告訴單片機(jī),我定義的數(shù)據(jù)要放在 ROM(程序存儲(chǔ)區(qū))里面,寫(xiě) 入后就不能再更改,其實(shí)是相當(dāng)與匯編里面的尋址 MOVC(好像是),因?yàn)?C 語(yǔ)言 中沒(méi)辦法詳細(xì)描述存入的是 ROM 還是 RAM(寄存器),所以在軟件中添加了這一個(gè)語(yǔ)句起到代替匯編指令的作用,對(duì)應(yīng)的還有 data 是存入 RAM 的意思。
程序可以簡(jiǎn)單的分為 code(程序)區(qū),和 data (數(shù)據(jù))區(qū),code 區(qū)在運(yùn)行的時(shí)候是不可以更改的,data 區(qū)放全局變量和臨時(shí)變量,是要不斷的改變的,cpu 從 code 區(qū)讀取指令,對(duì) data 區(qū)的數(shù)據(jù)進(jìn)行運(yùn)算處理,因此 code 區(qū)存儲(chǔ)在什么介質(zhì)上并不重要,象以前的計(jì)算機(jī)程序存儲(chǔ)在卡片上,code 區(qū)也可以放在 rom 里面, 也可以放在 ram 里面,也可以放在 flash 里面(但是運(yùn)行速度要慢很多,主要讀 flash 比讀 ram 要費(fèi)時(shí)間),因此一般的做法是要將程序放到 flash 里面,然后 load到 ram 里面運(yùn)行的;DATA 區(qū)就沒(méi)有什么選擇了,肯定要放在 RAM 里面,放到 rom 里面改動(dòng)不了。
完整的pdf格式文檔51黑下載地址:
單片機(jī)關(guān)于RAM的作用 .pdf
(92.78 KB, 下載次數(shù): 44)
2018-10-13 08:27 上傳
點(diǎn)擊文件名下載附件
單片機(jī) 下載積分: 黑幣 -5
|
|