STC89C52微控制器RAM模式

2021-07-25 06:14:32 字數 1722 閱讀 6981

stc89c52 微控制器內變數、函式引數等資料在ram中的儲存模式: small、compact、large

前邊介紹微控制器資源的時候,我們提到過 stc89c52 共有 512 位元組的 ram,是用來儲存資料的,比如我們定義的變數都是直接存在 ram 裡邊的。但是微控制器的這 512 位元組的 ram在地位上並不都是平等的,而是分塊的,塊與塊之間在物理結構和用法上都是有區別的,因此我們在使用的時候,也要注意一些問題。

51 微控制器的 ram 分為兩個部分,一塊是片內 ram,一塊是片外 ram。標準 51 的片內 ram 位址從 0x00h~0x7f 共 128 個位元組,而現在我們用的 51 系列的微控制器都是帶擴充套件片內 ram 的,即 ram 是從 0x00~0xff 共 256 個位元組。片外 ram 最大可以擴充套件到 0x0000~0xffff 共 64k 位元組。這裡有一點大家要明白,片內 ram 和片外 ram 的位址不是連起來的,片內是從 0x00 開始,片外也是從 0x0000 開始的。還有一點,片內和片外這兩個名詞來自於早期的 51 微控制器,分別指在晶元內部和晶元外部,但現在幾乎所有的 51 微控制器晶元內部都是整合了片外 ram 的,而真正的晶元外擴充套件則很少用到了,雖然它還叫片外 ram,但實際上它現在也是在微控制器晶元內部的,我們的 stc89c52 就是這樣。以下是幾個 keil c51 語言中的關鍵字,代表了 ram 不同區域的劃分,大家先記一下。

data:片內 ram 從 0x00~0x7f

idata:片內 ram 從 0x00~0xff

pdata:片外 ram 從 0x00~0xff

xdata:片外 ram 從 0x0000~0xffff

大家可以看出來,data 是 idata 的一部分,pdata 是 xdata 的一部分。為什麼還這樣去區分呢?因為 ram 分塊的訪問方式主要和彙編指令有關,因此這塊內容大家了解一下即可,只需要記住如何訪問速度更快就行了。

我們定義乙個變數 a,可以這樣:unsigned char data a=0,而我們前邊定義變數時都沒有加 data 這個關鍵字,是因為在 keil 預設設定下,data 是可以省略的,即什麼都不加的時候變數就是定義到 data 區域中的。data 區域 ram 的訪問在組合語言中用的是直接定址,執行速度是最快的。如果你定義成 idata,不僅僅可以訪問 data 區域,還可以訪問 0x80h~0xff 的範圍,但加了 idata 關鍵字後,訪問的時候 51 微控制器用的是通用暫存器間接定址,速度較 data會慢一些,而且我們平時大多數情況下不太希望訪問到 0x80h~0xff,因為這塊通常用於中斷與函式呼叫的堆疊,所以在絕大多數情況下,我們使用內部 ram 的時候,只用 data 就可以了。

對於外部 ram 來說,使用 pdata 定義的變數存到了外部 ram 的 0x00~0xff 的位址範圍內,這塊位址的訪問和 idata 類似,都是用通用暫存器間接定址,而如果你定義成 xdata,可以訪問的範圍更廣泛,從 0 到 64k 的位址都可以訪問到,但是它需要使用 2 個位元組暫存器dptrh 和 dptrl 來進行間接定址,速度是最慢 的。

我們的 stc89c52 共有 512 位元組的 ram,分為 256 位元組的片內 ram 和 256 位元組的片外ram。一般情況下,我們是使用 data 區域,data 不夠用了,我們就用 xdata,如果希望程式執行效率盡量高一點,就使用 pdata 關鍵字來定義。其它型號有更大的 ram 的 51 系列微控制器,如果要使用更大的 ram,就必須得用 xdata 來訪問了。

51微控制器(一) 初學STC89C52微控制器

1.cpu運算器和控制器 微控制器的核心構成部分之一 2.內部資料儲存器存放可讀的資料,如程式中的定義。3.程式儲存器8kb,0000h 1fffh 存放程式,原始資料。4.定時 計算器3個定時器 計算器,即可設定成計數方式用於外部事件計數,也可以設定成定時模式,用於對微控制器的計時控制。5.並行埠...

微控制器 STC89C52的最小單元

stc89c52rc是stc公司生產的一種低功耗 高效能cmos8位微控制器,具有 8k位元組系統可程式設計flash儲存器。stc89c52使用經典的mcs 51核心,但做了很多的改進使得晶元具有傳統51微控制器不具備的功能。在單晶元上,擁有靈巧的8 位cpu 和在系統可程式設計flash,使得s...

STC89C52微控制器的內外的RAM,ROM的討論

關於stc89c52 1 stc89c52只有512位元組的的ram,包括2部份,一是256位元組的內部ram,二是256位元組的外部ram stc89c54以上的晶元才有1k的ram 內256 外1024 3 eeprom不是rom,也不是ram,eeprom也沒有用作ram 你先這樣記,這個問題...