无法从UART读取两个字符?

时间:2013-12-19 18:48:18

标签: embedded microcontroller pic uart

我不明白我在这里做错了什么。

我用9600波特率打开UART如下,我正在使用带有PIC18F87J11的MPLAB XC8编译器。

#include <usart.h>
#define FOSC (8000000UL)
 #define FCYC (FOSC/4UL)
 #define BAUD 9600UL
 #define SPBRG_INIT (FOSC/(16UL*BAUD) - 1)
Open1USART(USART_TX_INT_OFF & USART_RX_INT_OFF & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH, SPBRG_INIT);

这就是我回应我在终端上键入的内容

 while ( 1)
     {
          while(PIR1bits.RCIF == 0 );
          {
            message = Read1USART();
            Write1USART(message);

            while (!TXSTA1bits.TRMT);
              }

     }

但以下情况不起作用。如果消息等于12,我想将12打印到终端,但它永远不会是真的。它只能读取一个字符。

while ( 1)
     {
          while(PIR1bits.RCIF == 0 );
          {
            message = Read1USART();
            if (message == 12)
            {
            Write1USART(message);
            while (!TXSTA1bits.TRMT);
              }
          }
     }

如何修复它以便接受多个字符(如12)?然后输出到终端?谢谢!

1 个答案:

答案 0 :(得分:1)

我认为您需要了解ASCII code。字节数只是0到255之间的数字,ASCII定义这些数字如何映射到可打印(或不可打印)字符。数字91,数字0x61和字符'a'在C中都是相同的。

当您在终端程序中键入“1”时,它将其编码为ASCII格式为字节49(0x31)并将其发送到PIC。然后,当您在终端输入“2”时,它将其编码为字节50(0x32)并将其发送给您的PIC。

如果您希望PIC查找某个字符,请尝试使用C语言提供的字符文字:

if (message == 'a')