我知道这可能是错误的部分,但我的问题是微控制器编程特定(主要是 AVR)!
我正在使用 Uart 在两个 AVR atmega8 之间发送字节,其中字节中的每一位代表某种东西,每个发送的字节中只有一位是 1
因此,如果我想检查,例如,接收到的字节中的第 5 位,那么如果按如下方式写入:
short byte=UDR;
if(byte&(1<<5))
{
// do stuff for bit 5
}
然后它总是工作正常
但是,如果我这样写:
short byte=UDR;
if(byte==0b00100000)
OR
short byte=UDR;
if(byte==0x20)
然后它不起作用,如果我使用 Switch-case 而不是 if-else 它也会失败我无法理解这个问题,编译器是否将其解释为有符号的 no 和第 7 位作为符号?或者是其他东西?编译器是来自 AVR studio 5 的 AVR-gnu
如果有人问我在接收器上也有显示接收到的字节的 LED,所以我知道接收到的字节是正确的,但由于某种原因,我无法比较它的条件!仍然会有一些噪音导致 Uart 误解位,从而改变接收到的实际字节吗?
帮助 !
看着每一个人
这里的东西就像超自然
最后,我已经解决了问题区域
我添加了 8 个 LED 来表示接收字节的位,这就是我发现的:
LED 将 (1<<5) 表示为 0b00100000 没关系,因为它是我发送的
但
接收到 0b00100000 时分配为发光的其他 LED(不包括 8 个)不发光!
FTW 男人!
我很确定收到的字节是正确的..但是 if-else 和 switch-case 比较有问题