【问题标题】:Can't read two characters from UART?无法从 UART 读取两个字符?
【发布时间】:2013-12-19 18:48:18
【问题描述】:

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

我以 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 个)?然后输出到终端?谢谢!

【问题讨论】:

    标签: embedded microcontroller pic uart


    【解决方案1】:

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

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

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

    if (message == 'a')
    

    【讨论】:

    • 如何查找两个字符?喜欢'hi'
    • 如何在 UART 中查找两个字符?例如,十进制的0x1218。但是一旦用户输入1,它就会将其与0x12进行比较,直到有两个字符时才将其与0x12进行比较,我希望我的问题很清楚。
    • @Ammar:您可以一次将一个字符读入一个字符数组。然后使用 strcmp() 将您读取的内容与预期的字符串进行比较。 (确保在从 UART 读取的字符数组上附加一个空终止符。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    • 2016-09-14
    • 2022-01-20
    • 2016-10-23
    • 1970-01-01
    相关资源
    最近更新 更多