这段简单的C代码如何工作?

Nat*_*ker 3 c arduino bitwise-operators usart arduino-uno

我需要在Arduino Uno上使用9位UART数据,所以我必须手动设置Arduino UART.基本上,我不理解这一行示例代码(来自数据表),它意味着在Arduino上启用UART Tx和Rx引脚,它以简单易懂的机器语言完成,只意味着加载一个立即值 UCSR0B(USART控制和状态寄存器B)RXE(接收使能)位和TXE(传输使能)位均为高电平.换句话说,加载00011000USCR0B.

以下是数据表中的示例C代码:

USCR0B = (1 << RXE) | (1 << TXE);
Run Code Online (Sandbox Code Playgroud)

Pau*_*l R 12

RXE并且TXE是位索引,因此(1<<RXE) | (1<<TXE)掩码,其中TXERXE位都等于1(并且所有其他位都是0).

例如,我不知道发生的实际值RXETXE,但假设TXE是第3位,并RXE为第4位,那么相关的头文件定义可能是这个样子:

#define TXE 3  // TX Enable = bit 3
#define RXE 4  // RX Enable = bit 4
Run Code Online (Sandbox Code Playgroud)

并且掩码计算将如下工作:

            1<<TXE  = 00001000 = 0x08
            1<<RXE  = 00010000 = 0x10
(1<<RXE) | (1<<TXE) = 00011000 - 0x18
Run Code Online (Sandbox Code Playgroud)