0

所以我有我正在查看的旧代码,我应该为新的微控制器更新。在旧代码中,有一个功能可以刷新 USART,以防一开始就出现垃圾。代码如下:

#define RXC 7 

#define RX_COMPLETE (1<<RXC)    

void UART1_FLUSH(void){
    unsigned char dummy;   
    while ( UCSR1A & RX_COMPLETE ) dummy = UDR1;
}

现在据我了解,只要从寄存器 UDR1 从 USART 中读取某些内容,while 循环就会继续运行,这就是为什么它被存储在 dummy 中的原因,因为我们不需要它。现在我需要帮助向我解释的是为什么 while 循环会以它的方式工作?

4

1 回答 1

1

http://upcommons.upc.edu/pfc/bitstream/2099.1/10997/4/Annex3.pdf中查找 UCSRNA,该代码只需等待 USCR1A 中的第 7 位(“RXCn:USART 接收完成”)关闭。

那个文件说关于第 7 位这个标志位在接收缓冲区中有未读数据时设置,当接收缓冲区为空时清除

(1<<RXC)是第 7 位的数值。&它与从 UCSR1A 读取的值之间的按位与 (the) 结果为 0(如果该位关闭)或(1<<RXC)(如果该位打开)。由于 (1<<7) 是 128 并且不为零,因此当设置该位时将进入循环。

于 2014-04-10T17:33:42.000 回答