×
单片机 > 单片机程序设计 > 详情

Keil C51对C语言的关键词扩展之三: bdata

发布时间:2020-06-02 发布时间:
|

使用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 */



Keil C51编译器总是像对sfr16那样把可位寻址的变量视为little endian字节序,标准C类型如int ,long则以big endian方式存储。

调用其他源文件中定义的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类型变量的某一比特位,毫无意义。


关键字:Keil  C51  bdata 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机CO2检测显示程序解析