打印

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

[复制链接]
344|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hanwe|  楼主 | 2021-3-15 22:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hanwe 于 2021-3-15 22:34 编辑

不用时正常
程序如下写的时候
...
#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类型的了?这里面哪个问题我没注意到?

使用特权

评论回复
沙发
llia| | 2021-3-15 22:32 | 只看该作者
本帖最后由 llia 于 2021-3-15 22:35 编辑

谁告诉是这样定义的

使用特权

评论回复
板凳
langgq| | 2021-3-15 22:33 | 只看该作者
本帖最后由 langgq 于 2021-3-15 22:35 编辑


然后呢?你是怎么应对这个的呢        

使用特权

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

使用特权

评论回复
5
yufe| | 2021-3-15 22:37 | 只看该作者
uchar         bdata sta;
sbit        RX_DR        =sta^6;
sbit        TX_DS        =sta^5;
sbit        MAX_RT        =sta^4;

使用特权

评论回复
6
langgq| | 2021-3-15 22:39 | 只看该作者

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

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

使用特权

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

使用特权

评论回复
8
hanwe|  楼主 | 2021-3-15 22:44 | 只看该作者

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

使用特权

评论回复
9
lium| | 2021-3-15 22:46 | 只看该作者
嗯,呵呵,是啊

使用特权

评论回复
10
hanwe|  楼主 | 2021-3-15 22:48 | 只看该作者
搞定了,呵呵,犯了低级错误……多谢各位

使用特权

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

本版积分规则

979

主题

8749

帖子

4

粉丝