所以我有一些我正在看的旧代码,我应该更新一个新的微控制器。在旧代码中,有一个函数可以刷新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循环将继续运行,这就是为什么它存储在虚拟中,因为我们不需要它。现在我需要帮助向我解释为什么while循环的工作原理是什么?
答案 0 :(得分:0)
在http://upcommons.upc.edu/pfc/bitstream/2099.1/10997/4/Annex3.pdf中查找UCSRnA代码只是等到USCR1A中的第7位(&#34; RXCn:USART接收完成&#34;)关闭。
该文件说明了第7位当接收缓冲区中有未读数据时,该标志位置1;当接收缓冲区为空时,该标志位清零。
(1<<RXC)
是位7的数值。它与从UCSR1A读取的值之间的按位AND(&
)导致0(如果该位关闭)或{{1} }(如果该位打开)。由于(1 <&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; 7)是128且不为零,因此在设置该位时将进入循环。