新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 討論有關(guān)單片機(jī)內(nèi)存的問(wèn)題

討論有關(guān)單片機(jī)內(nèi)存的問(wèn)題

作者: 時(shí)間:2016-11-10 來(lái)源:網(wǎng)絡(luò) 收藏

由于單片機(jī)內(nèi)存比較小,在以前的型號(hào)如AT89c51內(nèi)存只有128byte,按照目前的電子市場(chǎng)飛速的發(fā)展,這么點(diǎn)點(diǎn)的內(nèi)存只夠做一個(gè)簡(jiǎn)單的電子系統(tǒng),若是大一點(diǎn)的就遠(yuǎn)遠(yuǎn)不夠用了,這樣要么就要外擴(kuò)一個(gè)靜態(tài)RAM,要么就要選擇一個(gè)內(nèi)存比較大一點(diǎn)的單片機(jī),比如:AT89S52 [256byte] SST89E564 [1K]等等。這樣在使用KEIL軟件的時(shí)候是如何適用超過(guò)128byte字節(jié)的RAM呢?很多人都有這樣的疑問(wèn)【當(dāng)初我搞的也不是很明白】。

本文引用地址:http://www.2s4d.com/article/201611/317163.htm

在網(wǎng)上也看到了很多人都有這樣的想法:

① 超過(guò)變量128后必須使用compact模式編譯

實(shí)際的情況是只要內(nèi)存占用量不超過(guò)256.0【前提是:?jiǎn)纹瑱C(jī)的內(nèi)存必須要大于128byte,對(duì)于at89c51來(lái)說(shuō)想達(dá)到256也達(dá)不到啊,本身就不夠用】 就可以用 small 模式編譯。要是單片機(jī)提供的內(nèi)存更大的話(huà),那也可以在small模式編譯的。
② 128以上的某些地址為特殊寄存器使用,不能給程序用

這樣的想法也是不對(duì)的,單片機(jī)與 PC 機(jī)不同,51 單片機(jī)不使用線(xiàn)性編址,特殊寄存器與 RAM 使用重復(fù)的地址。但訪問(wèn)時(shí)采用不同的指令,所以并不會(huì)占用 RAM 空間。

下面我用匯編和C語(yǔ)言進(jìn)行解釋一下上面紅色字的意思:【很多人都能說(shuō)出這樣的道理,但是很少有人舉出實(shí)際的例子供大家參考和分析,下面我會(huì)在匯編和C語(yǔ)言做出實(shí)際的語(yǔ)句,來(lái)和大家一起分析一下】

首先先給P0口賦值0x55;

P0DATA080H

MOV A , #55H;

MOVP0 ,A; ;因?yàn)閜0口特殊功能寄存器的地址是0x80

若是往0x80地址存儲(chǔ)數(shù)據(jù)0xAA。則需要執(zhí)行以下語(yǔ)句

MOV RO ,#80H

MOV @R0 , #0AAH

參照上面的語(yǔ)句就能知道同樣都是0x80地址卻有著不一樣的效果.

下面在寫(xiě)一下C語(yǔ)言的語(yǔ)句

sfr P0 = 0x80;

unsigned char idatai_at_0x80;

voidmain(void)

{

//P0口賦值0x55;

P0 = 0x55;

//0x80地址存儲(chǔ)數(shù)據(jù)0xAA

i = 0xAA;

}

根據(jù)上面總結(jié)出來(lái)的,看完所有的代碼我想對(duì)大家應(yīng)該有所幫助吧?仔細(xì)看看我上面的代碼或我的說(shuō)明,我想這個(gè)時(shí)候你應(yīng)該對(duì)單片機(jī)的內(nèi)存有個(gè)進(jìn)一步的了解了。對(duì)你以后開(kāi)發(fā)單片機(jī)應(yīng)該會(huì)有所幫助的。如果你對(duì)此有所疑問(wèn),或者我的說(shuō)法有錯(cuò)誤,請(qǐng)您給我留言,我們共同交流,由于時(shí)間的關(guān)系,以前整理的資料好多都丟了,今天在此作了一個(gè)簡(jiǎn)單的整理并發(fā)上來(lái),希望對(duì)看我的blog的人用……看過(guò)的人希望您能留下寶貴的意見(jiàn)或留言,謝謝?。?!



關(guān)鍵詞: 單片機(jī)內(nèi)

評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉