我正在开发一个带有C18编译器和PIC18F4520的项目。
我在使用getcUSART时遇到问题。当我通过蓝牙模块发送字符时,它只会挂起。
int input(char Arr[])
{
Delay10KTCYx(400); // Delay between data transmissions
while(BusyUSART());
// wait for user input
while (!DataRdyUSART());
//get string from terminal
Arr[0] = getcUSART(); //read a byte from USART
Delay10KTCYx(400); // Delay between data transmissions
while(BusyUSART());
// wait for user input
while (!DataRdyUSART());
//get string from terminal
Arr[1] = getcUSART(); //read a byte from USART
Delay10KTCYx(400); // Delay between data transmissions
while(BusyUSART());
// wait for user input
while (!DataRdyUSART());
//get string from terminal
Arr[2] = getcUSART(); //read a byte from USART
Delay10KTCYx(400); // Delay between data transmissions
return 1;
}
这是我从终端接收字符时的代码。问题是我希望能够让用户选择一个选项,例如RUN或SET,但如果它是任何其他选项,它应该再次要求用户输入。问题是,如果我将POP放在终端中,它确实会要求用户再次输入,但是如果我键入RUN或SET,它仍然会认为它不是命令。此外,如果我输入RUNbre,例如,当我再次使用getcUSART时,将会读取bre。我想以某种方式能够清除确定getcUSART内容的缓冲区,但我不知道该怎么做。
任何帮助将不胜感激,谢谢。
答案 0 :(得分:0)
您运行PIC的频率是多少?
作为一般规则,最好在使用c18库之前直接使用寄存器进行测试,即使根据我的经验,c18库也是可靠的。这将有助于您更好地理解微处理器架构,强迫您一次又一次地浏览数据表......您明白了这一点。
首先应确保硬件设置正确,即TX到RX,RX到TX以及UART通信所需的全部接地。看起来你的要求应该足够以为我可能是错的。 确保您已正确设置UART。您选择的设置会影响您需要提供的SPBRG寄存器的值,以便尽可能接近您需要的波特率(通常会有轻微的错误)。
您需要查阅PIC18文档,其中包含您需要应用的公式,具体取决于您选择的设置,即同步,异步,高速,低速。
您需要调试和检查很多东西,有些寄存器显示发送/接收寄存器的状态,即是满/空?这可能是理解你的代码无法正常工作的关键(假设硬件很好)