¿Error al leer datos a través de UART al usar la biblioteca periférica en PIC32?

2

Estoy tratando de recibir datos usando UART. Estoy usando el microcontrolador PIC32MX795F512L y uso la biblioteca de periféricos de 32 bits, así que estoy usando funciones como putsUART o ReadUART1 Ahora en el código:

int main()
{
 OpenUART1( UART_EN | UART_NO_PAR_8BIT | UART_1STOPBIT  , UART_RX_ENABLE | UART_TX_ENABLE, (FPB/16/BAUDRATE)-1 );
 TRISDbits.TRISD5 = 0;
  while(1)
  {
    char RX_data;
    RX_data = ReadUART1();
    if(RX_data == '1')
    {
      LATDbits.LATD5 = 1;
      putsUART1("LED ON");
     }

     elseif(RX_data == 'q')
     {
       LATDbits.LATD5 = 0;
       putsUART1("LED OFF");
      }
   }
}

Ahora, cada vez que escribo 1 en el terminal, el led se enciende, pero cuando escribo q, el led no se apaga. Funciona con dígitos pero no con letras. Como si lo hiciera

elseif(Rx_data == '2')

Entonces funcionará pero no con

elseif(RX_data == 'q')

No sé dónde me estoy perdiendo el punto. Por favor ayuda.

    
pregunta user46573544

2 respuestas

4

Suponiendo que solo desea que haga una o la otra, debe modificar su código de la siguiente manera:

char RX_data = ReadUART1();
if(RX_data == '1')
{
    LATDbits.LATD5 = 1;
    putsUART1("LED ON");
}
else if(RX_data == 'q')
{
    LATDbits.LATD5 = 0;
    putsUART1("LED OFF");
}

Si lógicamente recorre su código original, verá que cuando ingresa 'q', se lee y se compara con '1', que no coincide, pero luego realiza otra lectura , por lo que pierdes la 'q' que ya habías leído.

    
respondido por el Roger Rowland
0

Si ReadUART() te está haciendo difícil. Puedes usar otras opciones como getsUART1()

El documento dice:

  

Descripción: esta función lee una cadena de datos de una longitud específica y la almacena en   la ubicación del búfer especificada.

     

Incluye: plib.h

     

Prototipo:       unsigned int getsUART1 (unsigned int length, char * buffer, unsigned int uart_data_wait);

     

Ejemplo de código: getsUART1 (12, myBuffer, 123);

O podría intentar poner valores en los registros UART.

    
respondido por el Aircraft

Lea otras preguntas en las etiquetas