如何刷新USART c代码?

时间:2014-04-10 17:05:00

标签: usart

所以我有一些我正在看的旧代码,我应该更新一个新的微控制器。在旧代码中,有一个函数可以刷新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循环的工作原理是什么?

1 个答案:

答案 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且不为零,因此在设置该位时将进入循环。