while循环中,串口接收延时问题

2019-07-20 10:25发布

本帖最后由 飞羽1918 于 2017-12-12 21:07 编辑

想利用串口一直不停地读取外部数据。在while(1)循环中,用串口一直不停的读取外部数据,并在if条件成立时,打印读取的数据。但问题是,while循环中必须有一个延时才行,没有延迟串口不能读取数据。并且试了一下延时至少要500us,求问各位朋友,如何在while循环中一直不停的读取数据,而不设置延时。(上位机我用串口助手发一个16位的数)
[mw_shl_code=applescript,true]        while(1)
        {
                A=USART1_Rx_data();
                if(A&0x8000)
                {
                        printf("B");
                        printf("%02X",A);                              //测试,%X表示16进制输出;02表示不足两位,前面补0输出;超出两位时,不影响     
                }
                delay_ms(1);
               
        }
/********************************************
函数名:USART1_Rx_data
功  能:通过串口接收一个16位的数据
输  入:无
输  出:无
*********************************************/
u16 USART1_Rx_data(void)
{
        u8 len,t;        
        u16 RxData=0;
        if(USART_RX_STA&0x8000)                         // 从串口接收一个数,判断是否接收完成  
        {
                len=USART_RX_STA&0x3fff;                      //len的长度为2,设置从上位机发送一个16位的数据过来
                for(t=0;t<(len-1);t++)
                {
                        RxData=USART_RX_BUF[t] << 8;                //USART_RX_BUF[t]左移8位
                        RxData=RxData|USART_RX_BUF[t+1];
                }
        }
        USART_RX_STA=0;                                 //将接收状态寄存器清零
        return RxData;
}[/mw_shl_code]

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。