Múltiples bytes de datos que no se leen desde PIC18F46K80

0

Estoy tratando de recibir múltiples bytes de datos desde el hiperminal al PIC18F46K80.

Este es mi código fuente

uint8_t uart_recv_uchar() {
   while(!(PIR1bits.RC1IF))
   {
       //wait till the data is received
       ;
   }
   return RCREG;
}


uint8_t uart_get_value() {
    uint8_t byte[5];
    byte[0] = uart_recv_uchar();
    byte[1] = uart_recv_uchar(); 
    byte[2] = uart_recv_uchar();
    byte[3] = uart_recv_uchar(); 
    byte[4] = '
uint8_t uart_recv_uchar() {
   while(!(PIR1bits.RC1IF))
   {
       //wait till the data is received
       ;
   }
   return RCREG;
}


uint8_t uart_get_value() {
    uint8_t byte[5];
    byte[0] = uart_recv_uchar();
    byte[1] = uart_recv_uchar(); 
    byte[2] = uart_recv_uchar();
    byte[3] = uart_recv_uchar(); 
    byte[4] = '%pre%';
    return (uint8_t) strtol(byte, NULL, 16);
}
'; return (uint8_t) strtol(byte, NULL, 16); }

Cuando escribo los datos que intento enviar más de un byte de datos al escribir 0x1234 en el terminal, el microcontrolador lee solo el primer byte de datos 0x12 y luego espera el siguiente byte en el byte de instrucción [2] = uart_recv_uchar ().

¿Qué debo hacer para leer varios bytes de datos después de escribirlos a la vez desde el terminal?

    
pregunta Phaneesh

1 respuesta

3

La mejor manera es usar la función definida en la biblioteca de periféricos PIC18 para UART.

char RxBuffer[5];
OpenUART2( UART_EN | UART_NO_PAR_8BIT | UART_1STOPBIT, UART_RX_ENABLE | UART_TX_ENABLE, (pbFreq/16/BAUDRATE)-1);
while(1)
{
    if((U2STAbits.URXDA)!=0)
    {
        getsUART2(5,RxBuffer , 123);
        U2STAbits.URXDA = 0;
        U2STAbits.OERR = 0; 
    }
    putsUART2(RxBuffer);
 }
    
respondido por el Aircraft

Lea otras preguntas en las etiquetas