ram
是程式執行中存放隨機變數的資料空間。在
keil
中編寫程式,如果當前模式為small模式,如果總的變數大小未超過128b
,則未初始化的變數的初值預設為
0.如果所有的變數超過微控制器small模式下的128b
大小,則必須對變數進行初始化,否則超過
ram大小變數的值是不確定的,在small模式下超過128b
大小的變數也必須在編譯器中重新設定儲存器的儲存模式。 在
keil
中,可選擇
small
,compact
,large
三種方式儲存資料變數:
模式 描述 small
所有預設變數均裝入內部
128b
(0xfh
)ram
中。訪問速度快,但空間有限,堆疊空間分配少。
compact
將所有預設變數均存入微控制器內部
256b (0x
1fh ) ram
中,空間不得超過
256b
,若微控制器
ram為
128b
的,若存資料超過
128b
則會出錯,訪問速度介於
small
和large
之間。跟使用關鍵字
pdata
定義變數相同。
large
所有預設變數可放在多大
64kb( 0x
ffffh )
的ram
區,包含內、外
ram。更使用關鍵字
xdata
定義變數效果相同。儲存空間大,訪問速度慢。
在keil
中可以用「
target options
」來配置這一項:
圖1 選擇資料儲存模式
工作暫存器區位於片內資料儲存器中的00h~1fh單元,共32位元組( 如此說來每個單元是乙個位元組了 ),分成四組。每組8個位元組,分別記為r0~r7.
編號 起終位址
暫存器名
備註 1
其佔據的實體地址為00h~07h
對應於指令中的r0~r7
0區工作暫存器組
2 其佔據的實體地址為08h~0fh
對應於指令中的r0~r7
1區工作暫存器組
3 其佔據的實體地址為10h~17h
對應於指令中的r0~r7
2區工作暫存器組
4 其佔據的實體地址為18h~1fh
對應於指令中的r0~r7
3區工作暫存器組
程式預設在0區工作暫存器組存放中間運算資料。等待中斷來時,中斷資料工作暫存器組由0區切換到其它區域。
選擇四組工作暫存器區的哪一組作為r0~r7由位於psw暫存器的兩位rs1,rs0來確定.
rs1,rs0稱為區開關或組開關,兩位就可決定四種狀態.
rs1
rs0
工作暫存器組
0 0
工作暫存器0組
0 1
工作暫存器1組
1 0
工作暫存器2組
1 1
工作暫存器3組
使用者儲存區位於片內資料儲存器中的020h~02fh單元,共16個位元組,共128位,每個位元組單元的位都有乙個單獨的位址,分別為00h-07h,如020h.1表示020h單元的bit[1]位。020h~02fh單元可作為位定址區。這個範圍內的儲存單元最大的用處就是能進行位操作,在c語言中,只能用位操作運算子(&、|、^、~、<>)來對位元組資料進行位操作運算。如果用彙編指令就可以直接對此片儲存單片進行位操作。
如 setb, 020h.1 就將020h的bit[1]置為了1.
除了ram此片能進行位定址的使用者儲存區以外,還有一些特殊的功能暫存器( sfr )也能進行位定址。
51系列資料緩衝區位址為30h-7fh,共80位元組。只能位元組定址,不能位定址。由於工作暫存器和位定址區,資料緩衝區是統一編址的,所以這三者都可以用作資料緩衝區。
棧:由系統自動分配釋放,存區域性值。
堆:一般由程式設計師分配和釋放(在c中用malloc/free操作)。
棧指標sp:8位暫存器,棧最大可達128單元,只可在片內ram中進行棧操作。
棧作用:用來儲存位址、資料資訊、具有先進後出特性,也是一種能存放二進位制資料的空間。
mc51棧採用滿頂法向上生成的軟體堆疊。
軟體棧:借助sp進行控制操作。
棧向上生長:新壓棧的資料成為棧頂。
棧向下生長:新壓入的資料遠離棧頂。
位址大小還得看儲存方式。
專用暫存器區,也稱特殊功能暫存器區 sfr
special functionregister
定址位址離散地分布在80h~ffh,共128位元組的空間.而實際有用的只有21個位元組,即在這一空間裡只有18個專用功能暫存器,其中有3個專用功能暫存器占用了兩個位元組.sfr主要用於片內硬體的管理,通常只能以位元組為單位借助於mov指令直接定址,但也有一些專用功能暫存器可以位定址。
包含程式狀態字psw、資料指標暫存器dptr、埠位址p0-p0、其它專用暫存器(累加器a、b)
片外ram區:可尋空間為共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
《此段摘抄,防後會使用》
區分是訪問內部儲存器還是外部儲存器位址靠指令來區分。
這裡,片內的儲存區即常念叨的「暫存器」,片外的ram儲存區即指「系統記憶體」。
51之51微控制器RAM資料儲存區學習筆記
51之51微控制器ram資料儲存區學習筆記 keilc語言程式設計 ram是程式執行中存放隨機變數的資料空間。在keil中編寫程式,如果當前模式為small模式,如果總的變數大小未超過128b,則未初始化的變數的初值預設為0.如果所有的變數超過微控制器small模式下的128b大小,則必須對變數進行...
51微控制器資料區詳解
從資料儲存型別來說,8051系列有片內 片外程式儲存器,片內程式儲存器還分直接定址區和間接定址型別,以及根據51系列特點而設定的pdata型別。使用不同的儲存器,將使程式的執行效率不同,在編寫c51程式時,最好指定變數的儲存型別,這樣將有利於提高程式執行效率。與ansi c稍有不同,它只分samll...
51微控制器 儲存
8051是傳統的8位微控制器,一般為256b 資料儲存器ram,4k程式儲存器rom 8052有384bytes的ram,8k的rom 在51系列中可定義的資料型別有data,idata,xdata,pdata,bdata data 指晶元核心中位址0x00 0x7f的128個位元組ram區域和4個...