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

[复制链接]
1180|15
 楼主| hanwe 发表于 2022-4-7 21:41 | 显示全部楼层 |阅读模式
不用时正常
程序如下写的时候
...
#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类型的了?这里面哪个问题我没注意到?
morrisk 发表于 2022-4-7 21:47 | 显示全部楼层
谁告诉是这样定义的
pengf 发表于 2022-4-7 21:50 | 显示全部楼层
然后呢?你是怎么应对这个的呢        
 楼主| hanwe 发表于 2022-4-7 21:52 | 显示全部楼层
是用sbit定义的,前面一直用#define定义寄存器,结果转不过弯了,呵呵
dingy 发表于 2022-4-7 21:55 | 显示全部楼层
uchar         bdata sta;
sbit        RX_DR        =sta^6;
sbit        TX_DS        =sta^5;
sbit        MAX_RT        =sta^4;
xxrs 发表于 2022-4-7 21:57 | 显示全部楼层

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

#define RX_DR state^6    那就是  state 异或 6 的运算了, 肯定不对  
 楼主| hanwe 发表于 2022-4-7 21:59 | 显示全部楼层
嗯,平时位定义是用的sbit。主要是这次前面一大堆定时器。写#define 写着写着就一直define了,基础还是有点不扎实。看了你的解释,又学了不少,多谢解答
 楼主| hanwe 发表于 2022-4-7 22:01 | 显示全部楼层
嗯,看了2楼的,突然想起是用sbit。谢谢解答
dengdc 发表于 2022-4-7 22:04 | 显示全部楼层
嗯,呵呵,是啊
 楼主| hanwe 发表于 2022-4-7 22:06 | 显示全部楼层
搞定了,呵呵,犯了低级错误……多谢各位
tpgf 发表于 2022-5-1 18:12 | 显示全部楼层
这个引脚设置成什么模式了啊
晓伍 发表于 2022-5-1 18:15 | 显示全部楼层
程序流程看一下
八层楼 发表于 2022-5-1 18:26 | 显示全部楼层
估计是语法有问题
观海 发表于 2022-5-1 18:39 | 显示全部楼层
好像不能这样简写
guanjiaer 发表于 2022-5-1 18:59 | 显示全部楼层
这样写有点歧义
heimaojingzhang 发表于 2022-5-1 19:45 | 显示全部楼层
在什么时候执行赋值呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

979

主题

8749

帖子

4

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