本帖最后由 AAA1314 于 2014-3-19 11:47 编辑
这是风驰STM8开发板的例程中的一段程序,有点看不懂。为什么用UART_RX_NUM来判断是否接受完成?if(( UART_RX_NUM&0x80)==0)/*接收未完成*/ 在这句程序之前没有能改变他的值啊
#pragma vector=0x14
__interrupt void UART1_RX_IRQHandler(void)
{
u8 Res;
if(UART1_GetITStatus(UART1_IT_RXNE )!= RESET)
{/*接收中断(接收到的数据必须是0x0d 0x0a结尾)*/
Res =UART1_ReceiveData8();
/*(USART1->DR);读取接收到的数据,当读完数据后自动取消RXNE的中断标志位*/
if(( UART_RX_NUM&0x80)==0)/*接收未完成*/
{
if( UART_RX_NUM&0x40)/*接收到了0x0d*/
{
if(Res!=0x0a) UART_RX_NUM=0;/*接收错误,重新开始*/
else UART_RX_NUM|=0x80; /*接收完成了 */
}
else /*还没收到0X0D*/
{
if(Res==0x0d) UART_RX_NUM|=0x40;
else
{
RxBuffer[ UART_RX_NUM&0X3F]=Res ;
UART_RX_NUM++;
if( UART_RX_NUM>63) UART_RX_NUM=0;/*接收数据错误,重新开始接收*/
}
}
}
}
} |