就數據存儲類型而言,8051係列有片上、輸出程序存儲裝置、片上、輸出數據存儲器,片上程序存儲器還分為直接地址區域和間接地址類型,分別為code 支持根據idata和51係列特色設定的pdata類型,通過使用不同的內存,程序的執行效率不同,與生成C51程序的ANSI-C略有不同,為SAMLL、COMPACT、lll 數組
51係列中的data、idata、xdata、pdata差異:
data:固定是指前麵0x00-0x7f的128個RAM,能夠直接在acc上讀寫,速度最快,生成的代碼也最小。
idata:固定是指前一個0x00-0xff的256個RAM。 其中,前麵的128和data的128完全相同,但訪問方法不同。 idata以類似於c的指針方式訪問。 程序集語句為mox ACC,@Rx . (不重要的補充:在c中,idata作為指針式訪問非常有效。 )
xdata:外部擴展RAM通常是指外部0x0000-0xffff空間,通過DPTR訪問。
當地址在當前A0-A7之上時,pdata:外部擴展RAM的最低256個字節被讀寫,並且由movx ACC和@Rx讀寫。 這很特殊,C51上好像有這個bug,所以建議不要太用。 但是,也有他的優勢,具體的使用方法是中級的問題,所以在這裏不提及。
單片機c語言unsigned char代碼表[ ]代碼是什麽?
代碼的作用是,我定義的數據放入程序存儲器區域(ROM ),告訴單片機寫入後不能更改,實際上就像程序集中的尋址MOVX ()。 因為c語言無法詳細說明ROM仍然是RAM,所以可以在軟件中添加此語句以代替匯編指令。 還有對應的data
程序可以簡單地分為代碼(程序)區域和數據(數據)區域。 代碼區域在運行中無法更改。 在data區域中放置全局變量和臨時變量需要不斷變更。 cpu從代碼區域讀取指令,並對data區域的數據進行運算處理,因此代碼區域存儲在哪個介質上並不重要。 就像以前的計算機程序。代碼區域可以在rom中、ram中、flash中,所以通常先將程序放入flash中,然後加載到ram中執行; DATA區域沒有選擇。 已經決定放入RAM。 放入rom也無法變更。 互聯網
bdata怎麽用那個?
程序需要8個以上的bit變量時,想要一次給8個變量賦值時很不方便。 (請舉例說明其便利性,想更深入地了解時請在APP應用中考慮。 )此外,不能定義bit數組。 有唯一的方法
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個bit變量MODE_n
這是定義語句,Keilc的特殊數據類型。 如果是sbit,請記住
比特模式_0=模式^ 0;
賦值語句如果是這樣的c語言,就被視為異或運算
-----------------------------請參閱
空間名稱地址範圍的說明
DATAD:00H~7FH片內RAM直接地址區域
BDATAD:20H~2FH片內的RAM地址區域
IDATAI:00H~FFH片內的RAM間接地址區域
XDATAX:0000H~FFFFH64KB普通片外RAM數據區
HDATAX:0000H~FFFFFFH16MB擴展片外RAM數據區
CODEC:0000H~FFFFH64K通常片內外ROM代碼區域
hconst(ecode ) c :0000 h至fffff fh16 MB擴展片外ROM常量區域(對於Dallas390可用作代碼區域) ) ) ) ) ) ) ) )。
銀行0~銀行31b0:0000h~FFFFFH
:
:
B31:0000H~FFFFH組碼區,最時尚人生拓展32X64KB ROM
-----------------------------請參閱
keil生成的文件:
. plg:編譯器的編譯結果
. hex和. bin:可執行文件
. map和. lst:連接文件
. o :目標文件
. crf、 lnp、 d、 axf :調試文件
. opt :保存項目配置信息
. bak :工程備份文件
M51文件,startup文件。 spa
注:本文從網絡指針收集