C51-數(shù)據(jù)存儲類型
8051系列單片機(jī)將程序存儲器(ROM,存儲空間)和數(shù)據(jù)存儲器(RAM,運算空間)分開,并有各自的尋址方式(針對匯編語言)。8051系列單片機(jī)在物理上有四個存儲空間:1,片內(nèi)程序存儲空間;2,片外程序存儲空間;3,片內(nèi)數(shù)據(jù)存儲空間;4,片外數(shù)據(jù)存儲空間。
先講數(shù)據(jù)存儲器。大家都知道8051單片機(jī)數(shù)據(jù)存儲器可劃分為兩大區(qū)域:00H~7FH為片內(nèi)低128字節(jié)RAM區(qū);80H~FFH為特殊功能寄存器區(qū)(SFR)。地址為00H~7FH的低128字節(jié)片內(nèi)RAM區(qū)又可劃分為三個區(qū)域:
A,通用寄存器區(qū):地址(00H~1FH)通用寄存器區(qū)由4個寄存器組成:0組(00H~07H),1組(08H~0FH),2組(10H~17H),3組(18H~1FH),每個寄存器組含有8個通用寄存器:R0,R1,R2,R3,R4,R5,R6,R7,共有32個通用寄存器。
B,可位尋址區(qū):8051系列單片機(jī)RAM的可位尋址區(qū)時字節(jié)地址位20H~2FH的16字節(jié)單元,共128位。
C,用戶RAM區(qū):8051系列單片機(jī)片內(nèi)RAM的用戶RAM區(qū)地址位30H~7FH。堆棧也可以設(shè)置在這里。
再講存儲類型,當(dāng)我們那使用存儲類型data,bdata定義常量和變量時,Cx51編譯器會將它們定位在片內(nèi)數(shù)據(jù)存儲區(qū)中(片內(nèi)RAM),不標(biāo)注默認(rèn)是DATA類型。當(dāng)使用code 存儲類型定義數(shù)據(jù)時,Cx51編譯器會將其定義在代碼空間(ROM或者EPPROM)。當(dāng)使用 xdata 存儲類型定義常量或變量時,Cx51編譯器將其定位在外部數(shù)據(jù)存儲空間(片外RAM)。
存儲類型 與存儲空間的關(guān)系
data 直接尋址片內(nèi)數(shù)據(jù)存儲區(qū),訪問速度快(0X00-0X7F,128字節(jié))
bdata (bit)可位尋址片內(nèi)數(shù)據(jù)存儲區(qū),允許位與字節(jié)混合訪問(0X20-0X2F,16字節(jié))
idata (indirect)間接尋址片內(nèi)數(shù)據(jù)存儲區(qū),訪問片內(nèi)全部RAM空間(8052,256字節(jié))
pdata (page)分頁尋址外部數(shù)據(jù)存儲區(qū)(256字節(jié))由MOVX @R0訪問
xdata (extend)片外數(shù)據(jù)存儲區(qū)(64KB),由MOVX @ DPTR訪問。
Code 代碼存儲區(qū)(64KB),由MOVC @DPTR訪問
如上,這樣就足夠清晰了。uchar data x和data uchar x相等價都是在內(nèi)ram區(qū)分配一個字節(jié)的變量,但是對于指針變量的聲明,因涉及到指針變量本身的存儲位置和指針?biāo)赶虻拇鎯^(qū)位置不同而進(jìn)行相應(yīng)的存儲區(qū)類型關(guān)鍵字設(shè)置是要注意的。在MSTAR的KEIL51編譯工程中,ROM SIZE=CONST+CODE <64K。
補充:長整型數(shù)與整形數(shù)差別:十進(jìn)制無符號整常數(shù)的范圍為0~65535,就是int型, 如果使用的數(shù)超過了上述范圍,就必須用長整型數(shù)來表示。長整型數(shù)是用后綴“L”或“l”來表示的。但長整數(shù)158L和基本整常數(shù)158 在數(shù)值上并無區(qū)別,這是因為只不過一個用長整形裝,一個用整形裝,就像兩顆蛋,一顆用小碗裝,一個用大碗,但他們還是同樣是蛋,在數(shù)值上并無區(qū)別!
評論