xc886和电脑的串口调试小助手485通信问题
时间:10-02
整理:3721RD
点击:
本人写了个小程序(xc886是基于c51内核的),UART用的是模式1(波特率可变,为了和串口调试小助手通信,设置成9600baud;用的是查询法;选的引脚,初始化等基本东西没错),其中主程序while(1)中内容如下:
while(1)
{
// USER CODE BEGIN
delay(10);
while(!RI);
receive=UART_ubGetData9();
UART_vSendData9(receive+3);
while(!TI);
// USER CODE END
}
结果在串口调试小助手向单片机发送数据,例如receive=04,按道理串口调试小程序显示窗口会出现receive+3=07,但是并不是每次发送都能顺利接收到数据07(串口调试小程序设置没问题),即有时候发送了04,没显示07,好像数据丢失。但是当我把程序改成下面的,就33 44 07 33 44 07...显示,即发送几次04,就显示几次33 44 07,不会发生上述的发送数据丢失现象。这是不是说明硬件没问题?那这是为什么?
// USER CODE BEGIN
delay(10);
UART_vSendData9(0X33);
while(!TI);
UART_vSendData9(0X44);
while(!TI);
while(!RI);
receive=UART_ubGetData9();
UART_vSendData9(receive+3);
while(!TI);
// USER CODE END
}
while(1)
{
// USER CODE BEGIN
delay(10);
while(!RI);
receive=UART_ubGetData9();
UART_vSendData9(receive+3);
while(!TI);
// USER CODE END
}
结果在串口调试小助手向单片机发送数据,例如receive=04,按道理串口调试小程序显示窗口会出现receive+3=07,但是并不是每次发送都能顺利接收到数据07(串口调试小程序设置没问题),即有时候发送了04,没显示07,好像数据丢失。但是当我把程序改成下面的,就33 44 07 33 44 07...显示,即发送几次04,就显示几次33 44 07,不会发生上述的发送数据丢失现象。这是不是说明硬件没问题?那这是为什么?
// USER CODE BEGIN
delay(10);
UART_vSendData9(0X33);
while(!TI);
UART_vSendData9(0X44);
while(!TI);
while(!RI);
receive=UART_ubGetData9();
UART_vSendData9(receive+3);
while(!TI);
// USER CODE END
}