打印
[51单片机]

关于位定义的奇怪问题

[复制链接]
1225|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nightingale2003|  楼主 | 2014-7-25 23:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
背景:这几天在弄nRF24l01,发现写入位定义相关的内容时出问题,不用时正常
程序如下写的时候
...
#define RX_DR state^6     //接收判断位,如果接收到数据,RX_DR为1
...
state=SPI_read(STATUS);
if(RX_DR)
{
...
}
每一次到if判断,必进if函数体。
但如果改成if(state&0x40) 则正常运行。

为了验证,我试着把这个位的值用12864写出来
write_dat(0x30+RX_DR);   //   +0x30是转换成ASCII码
结果显示 8.
想问我那样不是将RX_DR定义成bit这类型了么,怎么会变成char类型的了?这里面哪个问题我没注意到?恳请懂的大大解答

相关帖子

沙发
ayb_ice| | 2014-7-26 06:52 | 只看该作者
谁告诉是这样定义的

使用特权

评论回复
板凳
nightingale2003|  楼主 | 2014-7-26 08:54 | 只看该作者
是用sbit定义的,前面一直用#define定义寄存器,结果转不过弯了,呵呵

使用特权

评论回复
地板
ningling_21| | 2014-7-26 09:23 | 只看该作者
uchar         bdata sta;
sbit        RX_DR        =sta^6;
sbit        TX_DS        =sta^5;
sbit        MAX_RT        =sta^4;

使用特权

评论回复
5
airwill| | 2014-7-26 10:56 | 只看该作者
照楼上的定义吧, 规范一点.

#define RX_DR state^6    那就是  state 异或 6 的运算了, 肯定不对   

使用特权

评论回复
6
nightingale2003|  楼主 | 2014-7-26 23:03 | 只看该作者
airwill 发表于 2014-7-26 10:56
照楼上的定义吧, 规范一点.

#define RX_DR state^6    那就是  state 异或 6 的运算了, 肯定不对     ...

嗯,平时位定义是用的sbit。主要是这次前面一大堆定时器。写#define 写着写着就一直define了,基础还是有点不扎实。看了你的解释,又学了不少,多谢解答

使用特权

评论回复
7
nightingale2003|  楼主 | 2014-7-26 23:05 | 只看该作者
ningling_21 发表于 2014-7-26 09:23
uchar         bdata sta;
sbit        RX_DR        =sta^6;
sbit        TX_DS        =sta^5;

嗯,看了2楼的,突然想起是用sbit。谢谢解答

使用特权

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

本版积分规则

31

主题

105

帖子

2

粉丝