getcUSART没有按预期工作? (PIC18F带蓝牙)

时间:2018-04-20 21:01:19

标签: usart pic18

我正在开发一个带有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内容的缓冲区,但我不知道该怎么做。

任何帮助将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:0)

您运行PIC的频率是多少?

作为一般规则,最好在使用c18库之前直接使用寄存器进行测试,即使根据我的经验,c18库也是可靠的。这将有助于您更好地理解微处理器架构,强迫您一次又一次地浏览数据表......您明白了这一点。

首先应确保硬件设置正确,即TX到RX,RX到TX以及UART通信所需的全部接地。看起来你的要求应该足够以为我可能是错的。 确保您已正确设置UART。您选择的设置会影响您需要提供的SPBRG寄存器的值,以便尽可能接近您需要的波特率(通常会有轻微的错误)。

您需要查阅PIC18文档,其中包含您需要应用的公式,具体取决于您选择的设置,即同步,异步,高速,低速。

您需要调试和检查很多东西,有些寄存器显示发送/接收寄存器的状态,即是满/空?这可能是理解你的代码无法正常工作的关键(假设硬件很好)