¿No puede realizar operaciones basadas en los datos recibidos a MCU a través de UART?

1

He intentado realizar una operación simple basada en el byte de datos recibido por la MCU (pic18F) desde el terminal de la PC a través de UART. La operación enciende un LED según el contenido del byte de datos recibido. Así que aquí está el código para la lógica:

char data = 0;
unsigned char UARTReadByte()
{
   while(!PIR1bits.RCIF); //Wait until the receive buffer is full 
   return RCREG; //Return received byte 
}

void main()
{
   TRISAbits.TRISA1 = 0
   UARTInit(); //Initialize UART
   LCDInit(); //Initialize LCD
   while(1)
  {
     data = UARTReadByte(); //The received data from the virtual terminal (UART) is stored in another variable char 
     Write_Command(0x80); 
     Write_data(data); //Display the received data on the LCD
     if(data==1)  //check if the data is 1, if 1 turn ON the LED
     PORTAbits.RA0 = 1;
 }
}

El número recibido se muestra en la pantalla LCD, sin embargo, el LED no se enciende. Supongo que la MCU no puede verificar ni validar el byte recibido debido a problemas en el formato de datos. ¿Puede alguien ayudarme a resolver este problema? Gracias a todos de antemano.

    
pregunta PsychedGuy

1 respuesta

4

Si está enviando un carácter ASCII "1", entonces su declaración if debería ser

si (datos == '1')

tal como lo tiene, está comparando el carácter recibido con el valor hexadecimal 0x01, pero el carácter ASCII '1' es 0x31.

    
respondido por el Peter Bennett

Lea otras preguntas en las etiquetas