这行简单的 C 代码如何工作?
How does this simple line of C code work?
我需要 Arduino Uno 上的 9 位 UART 数据,所以我必须对 Arduino UART 进行一些手动设置。
基本上,我不理解这行示例代码(来自数据表),它是为了在 Arduino 上启用 UART Tx 和 Rx 引脚,这是用简单易懂的机器语言完成的,只是意味着加载一个即时值到UCSR0B
(USART 控制和状态寄存器 B)RXE(接收启用)位和 TXE(传输启用)位均为高电平。换句话说,将 00011000
加载到 USCR0B
.
这是数据表中的示例 C 代码:
USCR0B = (1 << RXE) | (1 << TXE);
RXE
和 TXE
是位 索引 ,所以 (1<<RXE) | (1<<TXE)
是一个 掩码 ,其中 TXE
和 RXE
位都等于 1(所有其他位都为 0)。
例如我不知道 RXE
和 TXE
的实际值,但假设 TXE
是位 3,RXE
是位 4,那么相关的头文件定义可能看起来像这样:
#define TXE 3 // TX Enable = bit 3
#define RXE 4 // RX Enable = bit 4
掩码计算将像这样工作:
1<<TXE = 00001000 = 0x08
1<<RXE = 00010000 = 0x10
(1<<RXE) | (1<<TXE) = 00011000 - 0x18
我需要 Arduino Uno 上的 9 位 UART 数据,所以我必须对 Arduino UART 进行一些手动设置。
基本上,我不理解这行示例代码(来自数据表),它是为了在 Arduino 上启用 UART Tx 和 Rx 引脚,这是用简单易懂的机器语言完成的,只是意味着加载一个即时值到UCSR0B
(USART 控制和状态寄存器 B)RXE(接收启用)位和 TXE(传输启用)位均为高电平。换句话说,将 00011000
加载到 USCR0B
.
这是数据表中的示例 C 代码:
USCR0B = (1 << RXE) | (1 << TXE);
RXE
和 TXE
是位 索引 ,所以 (1<<RXE) | (1<<TXE)
是一个 掩码 ,其中 TXE
和 RXE
位都等于 1(所有其他位都为 0)。
例如我不知道 RXE
和 TXE
的实际值,但假设 TXE
是位 3,RXE
是位 4,那么相关的头文件定义可能看起来像这样:
#define TXE 3 // TX Enable = bit 3
#define RXE 4 // RX Enable = bit 4
掩码计算将像这样工作:
1<<TXE = 00001000 = 0x08
1<<RXE = 00010000 = 0x10
(1<<RXE) | (1<<TXE) = 00011000 - 0x18