就數(shù)據(jù)存儲(chǔ)類(lèi)型而言,8051系列有片上、輸出程序存儲(chǔ)裝置、片上、輸出數(shù)據(jù)存儲(chǔ)器,片上程序存儲(chǔ)器還分為直接地址區(qū)域和間接地址類(lèi)型,分別為code 支持根據(jù)idata和51系列特色設(shè)定的pdata類(lèi)型,通過(guò)使用不同的內(nèi)存,程序的執(zhí)行效率不同,與生成C51程序的ANSI-C略有不同,為SAMLL、COMPACT、lll 數(shù)組
51系列中的data、idata、xdata、pdata差異:
data:固定是指前面0x00-0x7f的128個(gè)RAM,能夠直接在acc上讀寫(xiě),速度最快,生成的代碼也最小。
idata:固定是指前一個(gè)0x00-0xff的256個(gè)RAM。 其中,前面的128和data的128完全相同,但訪(fǎng)問(wèn)方法不同。 idata以類(lèi)似于c的指針?lè)绞皆L(fǎng)問(wèn)。 程序集語(yǔ)句為mox ACC,@Rx . (不重要的補(bǔ)充:在c中,idata作為指針式訪(fǎng)問(wèn)非常有效。 )
xdata:外部擴(kuò)展RAM通常是指外部0x0000-0xffff空間,通過(guò)DPTR訪(fǎng)問(wèn)。
當(dāng)?shù)刂吩诋?dāng)前A0-A7之上時(shí),pdata:外部擴(kuò)展RAM的最低256個(gè)字節(jié)被讀寫(xiě),并且由movx ACC和@Rx讀寫(xiě)。 這很特殊,C51上好像有這個(gè)bug,所以建議不要太用。 但是,也有他的優(yōu)勢(shì),具體的使用方法是中級(jí)的問(wèn)題,所以在這里不提及。
單片機(jī)c語(yǔ)言u(píng)nsigned char代碼表[ ]代碼是什么?
代碼的作用是,我定義的數(shù)據(jù)放入程序存儲(chǔ)器區(qū)域(ROM ),告訴單片機(jī)寫(xiě)入后不能更改,實(shí)際上就像程序集中的尋址MOVX ()。 因?yàn)閏語(yǔ)言無(wú)法詳細(xì)說(shuō)明ROM仍然是RAM,所以可以在軟件中添加此語(yǔ)句以代替匯編指令。 還有對(duì)應(yīng)的data
程序可以簡(jiǎn)單地分為代碼(程序)區(qū)域和數(shù)據(jù)(數(shù)據(jù))區(qū)域。 代碼區(qū)域在運(yùn)行中無(wú)法更改。 在data區(qū)域中放置全局變量和臨時(shí)變量需要不斷變更。 cpu從代碼區(qū)域讀取指令,并對(duì)data區(qū)域的數(shù)據(jù)進(jìn)行運(yùn)算處理,因此代碼區(qū)域存儲(chǔ)在哪個(gè)介質(zhì)上并不重要。 就像以前的計(jì)算機(jī)程序。代碼區(qū)域可以在rom中、ram中、flash中,所以通常先將程序放入flash中,然后加載到ram中執(zhí)行; DATA區(qū)域沒(méi)有選擇。 已經(jīng)決定放入RAM。 放入rom也無(wú)法變更。 互聯(lián)網(wǎng)
bdata怎么用那個(gè)?
程序需要8個(gè)以上的bit變量時(shí),想要一次給8個(gè)變量賦值時(shí)很不方便。 (請(qǐng)舉例說(shuō)明其便利性,想更深入地了解時(shí)請(qǐng)?jiān)贏PP應(yīng)用中考慮。 )此外,不能定義bit數(shù)組。 有唯一的方法
char bdata模式;
sbit MODE_7=MODE^7;
sbit mode _6=模式^ 6;
sbit MODE_5=MODE^5;
sbit MODE_4=MODE^4;
sbit MODE_3=MODE^3;
sbit mode _2=模式^ 2;
sbit mode _1=模式^ 1;
sbit MODE_0=MODE^0;
定義了8個(gè)bit變量MODE_n
這是定義語(yǔ)句,Keilc的特殊數(shù)據(jù)類(lèi)型。 如果是sbit,請(qǐng)記住
比特模式_0=模式^ 0;
賦值語(yǔ)句如果是這樣的c語(yǔ)言,就被視為異或運(yùn)算
-----------------------------請(qǐng)參閱
空間名稱(chēng)地址范圍的說(shuō)明
DATAD:00H~7FH片內(nèi)RAM直接地址區(qū)域
BDATAD:20H~2FH片內(nèi)的RAM地址區(qū)域
IDATAI:00H~FFH片內(nèi)的RAM間接地址區(qū)域
XDATAX:0000H~FFFFH64KB普通片外RAM數(shù)據(jù)區(qū)
HDATAX:0000H~FFFFFFH16MB擴(kuò)展片外RAM數(shù)據(jù)區(qū)
CODEC:0000H~FFFFH64K通常片內(nèi)外ROM代碼區(qū)域
hconst(ecode ) c :0000 h至fffff fh16 MB擴(kuò)展片外ROM常量區(qū)域(對(duì)于Dallas390可用作代碼區(qū)域) ) ) ) ) ) ) ) )。
銀行0~銀行31b0:0000h~FFFFFH
:
:
B31:0000H~FFFFH組碼區(qū),最時(shí)尚人生拓展32X64KB ROM
-----------------------------請(qǐng)參閱
keil生成的文件:
. plg:編譯器的編譯結(jié)果
. hex和. bin:可執(zhí)行文件
. map和. lst:連接文件
. o :目標(biāo)文件
. crf、 lnp、 d、 axf :調(diào)試文件
. opt :保存項(xiàng)目配置信息
. bak :工程備份文件
M51文件,startup文件。 spa
注:本文從網(wǎng)絡(luò)指針收集