这里面哪个问题我没注意到?

[复制链接]
890|8
 楼主| hanwe 发表于 2018-9-19 12:26 | 显示全部楼层 |阅读模式
不用时正常
程序如下写的时候
...
#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类型的了?这里面哪个问题我没注意到?
yufe 发表于 2018-9-19 12:29 | 显示全部楼层
谁告诉是这样定义的
 楼主| hanwe 发表于 2018-9-19 12:32 | 显示全部楼层
是用sbit定义的,前面一直用#define定义寄存器,结果转不过弯了,呵呵
yufe 发表于 2018-9-19 12:38 | 显示全部楼层
uchar         bdata sta;
sbit        RX_DR        =sta^6;
sbit        TX_DS        =sta^5;
sbit        MAX_RT        =sta^4;
langgq 发表于 2018-9-19 12:44 | 显示全部楼层

照楼上的定义吧, 规范一点.

#define RX_DR state^6    那就是  state 异或 6 的运算了, 肯定不对  
 楼主| hanwe 发表于 2018-9-19 12:48 | 显示全部楼层
嗯,平时位定义是用的sbit。主要是这次前面一大堆定时器。写#define 写着写着就一直define了,基础还是有点不扎实。看了你的解释,又学了不少,多谢解答
 楼主| hanwe 发表于 2018-9-19 12:51 | 显示全部楼层
嗯,看了2楼的,突然想起是用sbit。谢谢解答
lium 发表于 2018-9-19 12:54 | 显示全部楼层
嗯,呵呵,是啊
 楼主| hanwe 发表于 2018-9-19 12:58 | 显示全部楼层

搞定了,呵呵,犯了低级错误……结贴啦,多谢各位
您需要登录后才可以回帖 登录 | 注册

本版积分规则

979

主题

8749

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部