使用bdata定義的變量即可字尋址,也可比特位尋址。
Keil C51編譯器把使用bdata定義的變量放置在8051內部RAM可位尋址區。
bdata定義的變量必須爲全局變量,不能在任一函數內部定義bdata類型的變量。
bdata關鍵詞使用方法:
int bdata x1; /* 定義可位尋址的整型變量*/ char bdata bary [4]; /* 定義可位尋址的數組*/
此時,x1,bary均可按比特位尋址。使用sbit關鍵詞定義可操作其任一比特位的變量。
sbit mybit0 = x1 ^ 0; /* x1的比特0*/ sbit mybit15 = x1 ^ 15; /* x1的比特15 */ sbit Ary07 = bary[0] ^ 7; /* bary[0]的比特7*/ sbit Ary37 = bary[3] ^ 7; /* bary[3]的比特7 */
調用其他源文件中定義的sbit變量,以如下方式聲明:
extern bit mybit0; extern bit mybit15; extern bit Ary07; extern bit Ary37;
操作bdata聲明的對象,方式如下:
Ary37 = 0; /* 對bary[3]的比特7清零*/ bary[3] = 'a'; /* bary[3]直接賦值*/ x1 = -1; /* x1直接賦值 */ mybit15 = 1; /* 對x1的比特15置一*/
也可聲明結構體和聯合體的sbit變量,示例:
union lft { float mf; long ml; }; bdata struct bad /*注意 bdata*/ { char m1; union lft u; } tcp; /*注意tcp位於位尋址區*/ sbit tcpf31 = tcp.u.ml ^ 31; sbit tcpm10 = tcp.m1 ^ 0; sbit tcpm17 = tcp.m1 ^ 7;須要注意的是,使用sbit定義針對非bdata類型變量的某一比特位,毫無意義。