51單片機RAM 數據存儲區學習筆記


轉自:http://www.eepw.com.cn/article/216237_2.htm

1. keil C語言編程

是程序運行中存放隨機變量的數據空間。在keil中編寫程序,如果當前模式為small模式,如果總的變量大小未超過128B,則未初始化的變量的初值默認為0.如果所有的變量超過單片機small模式下的128B大小,則必須對變量進行初始化,否則超過大小變量的值是不確定的,在small模式下超過128B大小的變量也必須在編譯器中重新設定存儲器的存儲模式。

在keil中,可選擇small,compact,large三種方式存儲數據變量:

1.jpg

在keil中可以用“TargetOptions”來配置這一項:

2.jpg

圖1 選擇數據存儲模式

2.片內

(1) 工作寄存器區

工作寄存器區位於片內數據存儲器中的00H~1FH單元,共32字節( 如此說來每個單元是一個字節了 ),分成四組。每組8個字節,分別記為R0~R7.

3.jpg

程序默認在0區工作寄存器組存放中間運算數據。等待中斷來時,中斷數據工作寄存器組由0區切換到其它區域。

選擇四組工作寄存器區的哪一組作為R0~R7由位於PSW寄存器的兩位RS1,RS0來確定.

RS1,RS0稱為區開關或組開關,兩位就可決定四種狀態.

4.jpg

(2)位尋址區

用戶存儲區位於片內數據存儲器中的020H~02FH單元,共16個字節,共128位,每個字節單元的位都有一個單獨的地址,分別為00H-07H,如020H.1表示020H單元的bit[1]位。020H~02FH單元可作為位尋址區。這個范圍內的存儲單元最大的用處就是能進行位操作,在C語言中,只能用位操作運算符(、|、^、~、、>>)來對字節數據進行位操作運算。如果用匯編指令就可以直接對此片存儲單片進行位操作。

如 SETB, 020H.1 就將020H的bit[1]置為了1.

除了此片能進行位尋址的用戶存儲區以外,還有一些特殊的功能寄存器( SFR )也能進行位尋址。

(3)數據緩沖區

51系列數據緩沖區地址為30H-7FH,共80字節。只能字節尋址,不能位尋址。由於工作寄存器和位尋址區,數據緩沖區是統一編址的,所以這三者都可以用作數據緩沖區。

(4)堆棧

棧:由系統自動分配釋放,存局部值。

堆:一般由程序員分配和釋放。

堆棧指針SP:8位寄存器,堆棧最大可達128單元,只可在片內中進行堆棧操作。

堆棧作用:用來保存地址、數據信息、具有先進后出特性,也是一種能存放二進制數據的空間。

MC51堆棧采用滿頂法向上生成的軟件堆棧。

軟件堆棧:借助SP進行控制操作。

堆棧向上生長:新壓棧的數據成為堆棧頂。

堆棧向下生長:新壓入的數據遠離堆棧頂。

地址大小還得看存儲方式。

(5)專用寄存器區

專用寄存器區,也稱特殊功能寄存器區 SFR

SPECIAL FUNCTIONREGISTER

尋址地址離散地分布在80H~FFH,共128字節的空間.而實際有用的只有21個字節,即在這一空間里只有18個專用功能寄存器,其中有3個專用功能寄存器占用了兩個字節.SFR主要用於片內硬件的管理,通常只能以字節為單位借助於MOV指令直接尋址,但也有一些專用功能寄存器可以位尋址。

包含程序狀態字PSW、數據指針寄存器DPTR、端口地址P0-P0、其它專用寄存器(累加器A、B)

3.片外

片外區:可尋空間為共64K 0000H~FFFFH,

總是使用MOVX類指令尋址

借助於工作寄存器R0或R1間接尋址時,可尋256字節

從片外RAM區取數據: MOVX A,@Ri i=0-1

向片外RAM區存數據: MOVX @Ri,A

借助16位的數據指針DPTR間接尋址,可尋64K字節:

從片外RAM區取數據: MOVX A,@DPTR

向片外RAM區存數據: MOVX @DPTR,A

此段摘抄,防后會使用>

區分是訪問內部存儲器還是外部存儲器地址靠指令來區分。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM