打印

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

[复制链接]
529|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hanwe|  楼主 | 2019-12-15 18:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
不用时正常
程序如下写的时候
...
#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| | 2019-12-15 18:04 | 只看该作者
谁告诉是这样定义的

使用特权

评论回复
板凳
hanwe|  楼主 | 2019-12-15 18:07 | 只看该作者
是用sbit定义的,前面一直用#define定义寄存器,结果转不过弯了,呵呵

使用特权

评论回复
地板
yufe| | 2019-12-15 18:09 | 只看该作者
uchar         bdata sta;
sbit        RX_DR        =sta^6;
sbit        TX_DS        =sta^5;
sbit        MAX_RT        =sta^4;

使用特权

评论回复
5
langgq| | 2019-12-15 18:12 | 只看该作者

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

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

使用特权

评论回复
6
hanwe|  楼主 | 2019-12-15 18:15 | 只看该作者
嗯,平时位定义是用的sbit。主要是这次前面一大堆定时器。写#define 写着写着就一直define了,基础还是有点不扎实。看了你的解释,又学了不少,多谢解答

使用特权

评论回复
7
hanwe|  楼主 | 2019-12-15 18:19 | 只看该作者
嗯,看了2楼的,突然想起是用sbit。谢谢解答

使用特权

评论回复
8
lium| | 2019-12-15 18:22 | 只看该作者

嗯,呵呵,是啊

使用特权

评论回复
9
hanwe|  楼主 | 2019-12-15 18:25 | 只看该作者
搞定了,呵呵,犯了低级错误……结贴啦,多谢各位

使用特权

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

本版积分规则

979

主题

8749

帖子

4

粉丝