发新帖我要提问
12
返回列表
打印

KEIL C51中如何利用 联合定义位变量进行操作?

[复制链接]
楼主: xyr19
手机看帖
扫描二维码
随时随地手机跟帖
21
ayb_ice| | 2011-10-13 14:18 | 只看该作者 回帖奖励 |倒序浏览
18# ayb_ice  
奇怪的是,位段声明不是不能出现char int 吗? 编译还可通过。。 搞不懂呀 , 可能其他编译器就不行了吧 。。。
DownCloud 发表于 2011-10-13 13:52

谁说不可以出现 char int了,long都可以的

使用特权

评论回复
22
Cortex-M0| | 2011-10-13 14:28 | 只看该作者
LZ概念不清,Keil  C51的变量赋值,对隐性变量(指未定义变量类型)全部按 int 赋值。
因此,下列联合定义中,上半部分 bit位定义在 int类型中,下半部分LZ 定义了 char类型,你让 Keil  C51如何听你话?
union {
struct {
       unsigned Wind: 1; //
       unsigned JCQ: 1;
       unsigned Pump: 1;
       unsigned Intel: 1;
       unsigned Drain: 1;
       unsigned CCW_Flag: 1;////////////////////////////////
       unsigned Swing: 1;
       unsigned : 1;
}Bit;
       unsigned char All;
}QDP_State;

14楼 将下半部分 改为定义成 int类型,和上半部分 bit位定义在 int类型中相匹配,所以编译后运行正确。
15楼 将上半部分 改为定义成 char类型,和下半部分 char类型变量相匹配,所以编译后运行正确。

综上,还是LZ概念不清~~~

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
highgear + 1
23
刘前辈| | 2011-10-13 17:22 | 只看该作者
18# ayb_ice  正解。学习了。


//

使用特权

评论回复
24
jinyangland| | 2012-9-13 14:03 | 只看该作者
可以在别的文件中引用,定义的位变量吗?!

使用特权

评论回复
25
pkk1989| | 2013-10-22 16:53 | 只看该作者
if(QDP_State.Bit.Pump!=0)
怎么不用:if(!QDP_State.Bit.Pump) ??

使用特权

评论回复
26
lawdge| | 2013-10-24 14:05 | 只看该作者
我刚刚解决了位定义的问题,就是用bit 定义就好了!
51核的MCU限定位寻址区域20~2F.

使用特权

评论回复
27
amwito007| | 2014-8-21 14:17 | 只看该作者
个人感觉,AVR与51的定义位时有区别的,51有BIT来专门定义位,而AVR没有。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则