你還沒聽懂樓上幾位的意思。其實(shí)這個(gè)定義就是定義了一個(gè)字節(jié)的外部RAM,其地址為0xfeff。即將外部RAM中地址為0xfeff的字節(jié)定義為了ZXK這個(gè)名字。對它賦值即是對片外RAM的地址為0xfeff的字節(jié)賦值。這個(gè)和P0、P2沒有關(guān)系,只是在程序執(zhí)行過程中,訪問這個(gè)外部RAM字節(jié)的時(shí)候P0口是0xff,P2口是0xfe。(根據(jù)這個(gè)地址來確定RAM中的哪個(gè)單元被選中)
成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供冷水江企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、HTML5建站、小程序制作等業(yè)務(wù)。10年已為冷水江眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。
比如ZXK=0x00bf這條賦值是不行的,因?yàn)閆XK是字節(jié)變量,ZXK=0xbf這條賦值是對的,作用是將片外RAM的地址為0xfeff的字節(jié)賦值為0xbf。
首先說明:由于C語言是字符大小寫敏感的,所以沒有xbyte,而只有XBATE!
下面說一下,XBATE和xdata的意思。
xdata是C51關(guān)鍵字,說明變量的存儲區(qū)間,它是指單片機(jī)的擴(kuò)展存儲區(qū)域(也稱外部存儲、片外存儲,盡管物理存儲器也可能在單片機(jī)芯片內(nèi)部),最大64kByte,在匯編語言中,需要通過用16位指針DPTR來訪問。
XBATE在ABSACC.H文件中為一個(gè)宏定義
#define XBYTE ((unsigned char volatile xdata *) 0)
也就是說,通過直接地址引用該位置的值。例如在xdata的04H單元內(nèi)存放了一個(gè)字符'c',則
XDATA[4]就是引用了04H的內(nèi)容,也就是'c'。
同樣的還有DBYTE,CBYTE,PBYTE等單字節(jié)引用data、pdata,code空間的數(shù)據(jù),還有XWORD,DWORD,CWORD,PWORD等雙字節(jié)引用xdata,data,code,pdata空間的數(shù)據(jù)的,但要注意它們是以2字節(jié)為一個(gè)計(jì)數(shù)單元。例如 XWORD[4]是引用xdata空間中08H,09H兩個(gè)單元構(gòu)成的unsigned int。
不知道說明清楚了沒有?
是單片機(jī)的C語言編程嗎?
XBYTE[ ]是用來對一個(gè)外部的內(nèi)存單元進(jìn)行操作的宏,常常用在將單片機(jī)外設(shè)作為一個(gè)內(nèi)存單元來訪問的情形XBYTE[0x8000]=0x08的意思是對外部的內(nèi)存單元0x8000寫入0x80數(shù)據(jù),而且會調(diào)用MOVX匯編指令,會產(chǎn)生WR/RD信號,例如你一個(gè)外設(shè)的使能端接在P2.7腳,在數(shù)據(jù)線以及WR都接好的情況下就可以給外設(shè)寫入0x08數(shù)據(jù)