本帖最后由 飞羽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]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>