當前位置:首頁 » 服務存儲 » 如何識別片內和片外存儲器
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

如何識別片內和片外存儲器

發布時間: 2022-08-27 03:25:40

① 怎樣區分片外程序存儲器和數據存儲器

數據存儲區 在掉電再上電的時候 裡面的數據會丟失
外部程序存儲區則不會,片外存儲區的開始地址是1000H
內部程序存儲區的地址是0000~0FFFH 可以根據地址來區分

外部數據存儲區的地址是0000~FFFF
外部數據存儲區和內部數據存儲區根據指令來區分

② 80c51單片機的片內片外程序存儲器和片內片外數據存儲器訪問如何區分

管腿EA接高電平,單片機首先訪問內部ROM,當地址值超過4K(0FFFH)時自動訪問外部ROM。EA接低電平,單片機只訪問外部ROM。
對於數據的話,可以通過定義來區分,idata,即片內 RAM 從 0x00~0xFF;pdata,即片外 RAM 從 0x00~0xFF;xdata,即片外 RAM 從 0x0000~0xFFFF。

③ 單片機片內存儲器和片外存儲器的作用和概念

單片機片內存儲器包括片內ROM和片內RAM,片內ROM用於存儲程序代碼,片內RAM包括寄存器和片內擴展RAM,比如STC的很多型號都有片內擴展EEPROM。
片外存儲器包括片外ROM和片外RAM,片外ROM用戶存儲程序代碼,片外RAM用於存儲用戶的可改寫數據。

④ mcs—51單片機數據存儲器RAM分布情況,說明片內和片外如何區分

51單片機有以下幾個內存模塊組成:
1】ROM或者Flash,叫程序存儲區,你寫的程序是存在這裡面的,上電後從這裡面執行。
程序存儲區也分為片內和片外,一般來說,現在的51很多已經做到了64K,所以很少有外擴
片外Flash或者片外的Rom了,Flash或者Rom不管是片內還是片外的,只能用來定義常量,是用code來修飾,也就是說,用code來修飾的東西,在程序運行過程中,不能修改;
2】RAM有------內部RAM的低128位(00-7F),對應C語言就是data,比如我定義一個變數,
data unsigned char Var = 0;
那麼,這個 Var變數就是放在內部的低128位Ram中
-------內部RAM的高128位(80-FF),對應C語言就是idata,比如我定義一個變數,
idata unsigned char Var = 0;
那麼,這個 Var變數就是放在內部的高128位Ram中
-------特殊功能寄存器(SFR)(80-FF),對應C語言就是Sfr比如我定義一個變數,
Sfr unsigned char Var = 0x90;
那麼,這個 Var變數就是放在內部的特殊功能寄存器中,這是你對Var操作,相當於操作一個特殊的寄存器,但是小心,不能隨便定義Sfr變數,很危險
------外部RAM 64K(0000-FFFF)
外部的RAM可以擴展到65536個,但是前256個算是一頁,這一頁比較特殊,是用
pdata來修飾的,當然,也可以用xdata來修飾。
除了第一頁的256個以外的其他65280個空間,只能用xdata來修飾;
回過頭來討論pdata和xdata,這兩個都能修飾外部Ram的第一頁,但是,Pdata只能修飾第一頁,即最前面的256個外部Ram,那麼,這最前面的256個到底用Pdata還是Xdata好的呢?
答案是Pdata,因為Xdata修飾的變數,用的是DPTR定址,Pdata用的是R0和R1.DPTR因為是16位的,所以可以覆蓋整個的64K外部Ram,R0和R1是8位,所以只能定址最前面的256個,也就是外部Ram的第一頁,但是,用R0定址,比DPTR快一倍,代碼也小的很多

樓主又疑惑了,好多地址是重復的,比如,我向80H地址寫一個數值,單片機怎麼知道讀的是內部的高128位RAM?還是SFR?還是外部64K的RAM呢?

答案是用指令,如果是直接定址,那麼訪問的就是SFR,如果是R0或者R1間接定址,就是內部高128位RAM,如果是DPTR或者是R0,R1間接定址,且配合的是MovX指令,那麼就是訪問外部64KRAM中的第80H個地址。

概括一下來說,51的內存由以下組成:
1----程序存儲器(包括片內Flash或Rom,也包括片外Flash或Rom,C語言用Code定義)
2----內部低128位Ram,C語言用data定義
3---內部高128位Ram,C語言用idata定義
4---內部SFR,C語言用Sfr定義
5---外部65536個Ram(通常,很多單片機廠家不會給你擴展那麼多的,一般來說擴展256個位元組或者1024個位元組就差不多了,最近宏晶的出了個擴展4096位元組的。這65536位元組的Ram,前256個可以用Pdata修飾,也可以用Xdata修飾,超過256個之後的,只能用Xdata修飾)

以上所說的只是針對51內核的單片機,其他內核的,像ARM之類的,不是這種結構的。

⑤ 單片機的片內,片外存儲器如何選擇

程序存儲器通過(/EA) /Vpp引腳選擇。若(/EA) =0,則允許使用片內ROM;若 (/EA)=1則允許使用片外ROM。
數據存儲器通過指令區分:訪問片內RAM採用MOV指令,訪問片外RAM採用MOVX指令。

⑥ 5.1單片機是怎麼樣分片內存儲器和片外存儲器的,麻煩大俠告訴下,謝謝

早期,片內存儲器,還是片外存儲器,確實是根據:他們是不是
在同一塊
集成電路晶元上,來區分的。
數據存儲器的傳送指令,也有區別:片內傳送,使用MOV,涉及片外了,就要用MOVX指令。
但是,科技發展了,有些單片機晶元,在同一塊晶元上,還集成了少量的「片外存儲器」,針對這些存儲單元操作,就必須使用MOVX指令。
這樣看來,片內,還是片外,區分的方法應該是使用什麼指令,而不是他們是否分離成兩塊晶元。

⑦ 單片機是如何區分片內片外ROM的

AT89s51單片機的片外ROM可擴展64KB,片內ROM為4KB,兩者獨立。

該種單片機上有一個EA引腳

  • 當在EA引腳上加上+5V的高電平時,CPU的程序計數器PC以「片內」0000H為初值開始取指令,但一旦PC的取值超出片內程序存儲器的地址范圍(0FFFH),PC自動地轉向讀取片外程序存儲空間(1000H-FFFFH)

  • 當在EA引腳上加上0V的低電平時,單片機會毫不猶豫地使用片外程序存儲器,將可憐的片內程序存儲器拋在一邊

上述即為:單片機通過EA引腳上所加電平的高低決定怎樣使用片內片外ROM

⑧ 用什麼方法來區分,片外數據存儲器與片內數據存儲器分開編址而出現的地址重疊呢

片外數據儲存器存取用MOVX指令
片內存儲器存取使用MOV指令。

⑨ 2812片內和片外存儲器地址相同怎麼區分

我好像看懂了,就是片外存儲器它的地址與片內存儲器的地址是叉開的,比如zone0和1,地址是0x2000至0x6000,而這個地址在片內是保留,zone2和zone6也是對應片內保留的地址,這樣就可以區分開片內和片外,是不是這樣?希望路過的高手指點

⑩ 單片機中什麼叫片內rom,片外rom,這個片內片外怎麼理解

片內RAM:
Read Only Memory (a non volatile memory) --只讀存儲器(非易失存儲器) 永久存儲重覆使用的信息,比如數據表、電子顯示器的字元等。和RAM不同,ROM的內容不能更改。在生產過程中使用可編程掩模。
片外RAM:
隨機存儲器(Random Access Memory)表示既可以從中讀取數據,也可以寫入數據。當機器電源關閉時,存於其中的數據就會丟失。我們通常購買或升級的內存條就是用作電腦的內存,內存條(SIMM)就是將RAM集成塊集中在一起的一小塊電路板,它插在計算機中的內存插槽上,以減少RAM集成塊佔用的空間。目前市場上常見的內存條有4M/條、8M/條、16M/條等。