我有一个小问题,希望有一个简单的答案。在C/C++中编程Arduino时,会出现一行"DDRB |= 0b00101000;“。虽然我知道DDRB是端口B的数据方向寄存器,以及"0b00“之后的数字的含义(这是插槽13到9),但我仍然不知道"0b00”是什么意思。
在我只读过的定义中,它意味着高(而0b11表示低),但这意味着什么?
完整代码:
#include <avr/io.h>
#include <util/delay.h>
int main (void) {
float seconds = 0.5;
int time = 1000 * seconds;
DDRB |= 0b00101000;
while (1) {
PORTB |= 0b00001000;
_delay_ms(time);
PORTB &= 0b11110111;
PORTB |= 0b00100000;
_delay_ms(time);
PORTB &= 0b11011111;
}
return 0;
}
发布于 2020-01-13 13:37:14
0b表示需要二进制表示的数字。
对于数据方向寄存器,将位设置为1将使各自的行输出,而设置为0将使其输入。
DDRB |= 0b00101000
将使用掩码在DDRB
中的位当前值之间执行二进制或操作。
这将导致DDRB = 0b××1×1xxx
,因此这意味着DDRB
将保留第7和第6行的值。这个操作基本上将第5行和第3行设置为输出,其余部分保持原样。
发布于 2020-01-13 13:29:58
当你把你的问题贴上"Arduino“标签时,你可能会感兴趣的是,除了标准的c++ 0b.IDE还以B00101000
格式提供所有8位二进制数字的组合,有前导零,也有前导零。
通常,十六进制表示法(在你的例子中是0x28)甚至更容易读懂。
发布于 2020-01-13 13:14:54
线
DDRB |= 0b00101000
基本上,使用掩码0b00101000
进行位或,并将结果重新分配给DDRB。
0b
指出,接下来发生的任何事情都应该解释为二进制,因此更容易看出您正在掩蔽哪些位。
代码只是将隐藏的比特设置为1到更高,而其他比特则保持不变。
https://stackoverflow.com/questions/59717295
复制相似问题