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

本文介绍了在Keil C51编译器中如何使用bdata定义变量进行字寻址和比特位寻址,强调bdata变量必须为全局,并展示了sbit关键词定义和操作位寻址变量的方法。通过示例代码,解释了如何声明和操作结构体和联合体中的sbit变量,以及外部引用sbit变量的方式。
摘要由CSDN通过智能技术生成

使用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类型变量的某一比特位,毫无意义。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值