我已经了解了按位运算符中的左移和右移寄存器。但我对以下代码感到困惑。 RX_DR转移?那是什么意思 ?这只是一个随机的例子我只需要知道它的含义。
nrf24_configRegister(STATUS,(1<<RX_DR)|(1<<TX_DS)|(1<<MAX_RT));
请帮忙。
答案 0 :(得分:1)
看起来这些常量是寄存器中各种标志的位数。看nRF24L01.h
让我相信他们的价值观是:
#define RX_DR 6
#define TX_DS 5
#define MAX_RT 4
这对应于如下的位布局:
TX_DS
v
(bit #) 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0
^ ^
(flag) RX_DR MAX_RT
这里我标记了8位寄存器中的一些位。第6位是RX_DR标志,第5位是TX_DS标志,第4位是MAX_RT标志。
(1<<RX_DR)|(1<<TX_DS)|(1<<MAX_RT)
这段代码构造一个寄存器值,其中三个位置位,其余位置未置位。它是如何做到的?考虑1<<TX_DS
。这取值1
(二进制00000001
)并将其左移5位,产生32
(二进制00100000
)。
该值与其他两个标志按位OR运算(|
)。 ORing数字组合在一起,产生一个值,其中每个操作数的所有1位都被设置。
1<<RX_DR == 1<<6 == 01000000 in binary
1<<TX_DS == 1<<5 == 00100000 in binary
1<<MAX_RT == 1<<4 == 00010000 in binary
ORing 1<<RX_DR
和1<<TX_DS
以及1<<MAX_RT
一起提供值112
或二进制:
01110000
查看二进制值如何设置位6,5和4?