51單片機是如何存儲程序和數(shù)據(jù)的?_第1頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、51單片機是如何存儲程序和數(shù)據(jù)的?在小學(xué)很少用到外擴rom/ram的狀況,都是用編程,不差空間,代碼太大了,買個大rom的芯片就行了?,F(xiàn)在工作了,單位是做的,采納了51的ip核,才算對51的代碼/數(shù)據(jù)空間有了清楚的熟悉。 mcs-51用法哈弗結(jié)構(gòu),它的程序空間和數(shù)據(jù)空間是分開編址的,即各自有各自的地址空間,互不重疊。所以即使地址一樣,但由于分開編址,所以依舊要說哪一個空間內(nèi)的某地址。而(甚至是x86)這種馮諾依曼結(jié)構(gòu)的/cpu,它的地址空間是統(tǒng)一并且延續(xù)的,代碼存儲器/ram/cpu寄存器,甚至pc機的顯存,都是統(tǒng)一編址的,只是不同功能的存儲器占領(lǐng)不同的地址塊,各自為政。 好,說回mcs-51

2、。 對于程序存儲器,有片內(nèi)和片外兩部分。而且無論片內(nèi)程序存儲器,還是片外程序存儲器,他們的地址是分享的。假如片內(nèi)4k rom的話,地址就是0x0000-0x0fff,從0x1000-0xffff就是外部rom的地址空間??赏獠縭om的0x0000-0x0fff的這一部分是否用法呢,這取決于ea引腳的電平值。ea=1時就是用法內(nèi)部rom的這一部分,外部rom的這一部分鋪張不用;ea=0時就是用法外部rom的這一部分,內(nèi)部rom鋪張不用。從code段讀取數(shù)據(jù)要用法匯編的movc命令,單片機會按照movc命令、ea狀態(tài)、要讀取的地址值,來自動地推斷從什么存儲器里取數(shù)據(jù)。 對于數(shù)據(jù)存儲器,則分為內(nèi)部數(shù)

3、據(jù)存儲器(idata/ram)和外部數(shù)據(jù)存儲器(xdata)兩個部分,但這兩個存儲器就不像code存儲器那樣分享地址空間的了。普通的8051芯片,內(nèi)部ram惟獨128b,從0x00-0x7f,而從0x80-0xff則是sfr(cpu工作寄存器和各種外設(shè)寄存器都在此)的區(qū)域。對于8052來說,內(nèi)部ram有256b,所以0x80-0xff是高128b的ram在用法??蛇@部分不是sfr專用的嗎?是sfr專用,但注重,sfr的拜訪只能用法“挺直尋址方式”(用法特定的匯編命令來實現(xiàn)),區(qū)分就在這里。惟獨通過挺直尋址拜訪的地址才是sfr,否則就是一般的ram。至于外擴的ram(xdata),地址也是從0x

4、0000-0xffff的,而且這里的0x0000和內(nèi)部ram的0x00是不同的,是徹低自立的兩個空間。他們的拜訪辦法也是不同的。mcs-51用法movx命令,來讀寫xdata區(qū)。而且,拜訪xdata區(qū),是需要dptr寄存器來輔助的。由于惟獨dptr才干裝得下十六位的xdata地址。 所以說,mcs-51讀寫idata區(qū)的速度是最快的,而且拜訪辦法也是最多的。拜訪xdata區(qū)的速度相對就要慢無數(shù)。mcs-51的堆棧要優(yōu)先開拓在idata區(qū)中,并且在idata區(qū)中開拓的堆棧,可以用法棧指針寄存器sp來控制。假如棧實在太大,只能開拓在xdata區(qū)中,那么cpu的sp寄存器就很難借力,只能由我們自己來

5、構(gòu)造堆棧結(jié)構(gòu)和堆棧指針。既然外部程序空間和數(shù)據(jù)空間都是0-64k(0x0000-0xffff),那么我事實上可以為了省事/便利改寫程序等緣由,外部的code和data就可以共用一個可擦寫存儲器了(比如各種ram什么可擦可寫的)。比如系統(tǒng)有64k的外擴memory,低32k我用作保存code,并讓單片機在這32k之中讀取程序運行,高32k我作為用戶數(shù)據(jù)的保存處,徹低可以。只是此時原來徹低自立的code和data空間,由于在硬件芯片上共用了一個memory,所以他們之間就可能相互影響了,程序就能自己改寫程序了。比如0x0020處是一個命令,我通過movx把0x0020處改寫了,那么再利用movc把

6、0x0020處讀取出來,數(shù)據(jù)就和本來不一樣了。 簡單混淆的癥結(jié)在于,單片機存儲空間是一個規(guī)律上的概念,是人為劃分出來的兩個互相自立的空間。而硬件上的memory芯片則是現(xiàn)實中的概念,單片機的存儲空間終于會落實在電路層面的芯片上,所以規(guī)律上的存儲空間會由于物理上的電路銜接而發(fā)生重疊。但是在規(guī)律層面上,這兩個空間還是徹低自立的。 附:各類存儲空間名稱的定義: data:固定指前面0x00-0x7f的128個ram,可以用a寄存器挺直讀寫的,速度最快,生成的代碼也最小。 idata:固定指前面0x00-0xff的256個ram,其中前128和data的128徹低相同,只是由于拜訪的方式不同。idata是用類似c中的指針方式拜訪的。匯編中的語句為:mov acc,rx.(不重要的補充:c中idata做指針式的拜訪效果很好)xdata:外部擴展ram,普通指外部0x0000-0xffff空間,用dptr拜訪。pdata:外部擴展ram的低256個字節(jié),地址浮現(xiàn)在a0-a7的上時讀寫,用movx acc,rx讀寫。這個比較特別,而且c51好象有對此bug, 建議少用。但也有他的優(yōu)點,詳細(xì)使用屬于中級問題,我不太會,所以這里不提。 更多應(yīng)用開發(fā)班、驅(qū)動實訓(xùn)班、arm11驅(qū)動、

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論