Microcontroladores - TRANSMITIR Y RECIBIR 16 BITS EUSART

 
Vista:

TRANSMITIR Y RECIBIR 16 BITS EUSART

Publicado por Fernando Roman (1 intervención) el 24/07/2020 03:21:20
Hola buenas tardes. Estoy ocupando el módulo EUSART del PIC16F15325 para enviar y leer 16 bits. Estoy ocupando un micro para la transmisión y otro para la recepción. Mi problema es que cuando quiero visualizar el dato recibido solo tengo el segundo byte (dos veces) y el primero nunca lo veo. Espero alguien pueda asistirme. Y una disculpa de antemano por la molestia.

Les dejo el Código del Tx y del Rx

TRANSMISOR
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
void EUSART1_TX(unsigned char txData)
{
    while(0 == PIR3bits.TX1IF)
    {
    }
    TX1REG = txData;    // Registro de Transmisión
}
 
char EUSART1_Rx()
{
    return RC1REG;    // Registro de recepcion
}
 
void SYSTEM_Initialize(void)
{
    PIN_MANAGER_Initialize();
    OSCILLATOR_Initialize();
    EUSART1_Initialize();
}
 
void main(void)
{
    // initialize the device
    SYSTEM_Initialize();
 
        uint8_t firstbyte = 0u;
        uint8_t secondbyte = 0u;
        uint16_t myint16 = 0x63C2; //25538
        firstbyte = myint16 & 0xFF;
        secondbyte =(myint16 >> 8 )& 0xFF;
 
        EUSART1_TX(firstbyte);
        EUSART1_TX(secondbyte);
}

RECEPTOR

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
void EUSART1_Write(char txData)
{
    while(0 == PIR3bits.TX1IF)
    {
    }
    TX1REG = txData;    // Write the data byte to the USART.
}
 
unsigned char EUSART1_RX(){
 
    return RC1REG; //Registro de Recepción
}
 
 
uint16_t UART_GetUInt16()
{
    uint16_t lo = EUSART1_RX(); //firstbyte
    uint16_t hi = EUSART1_RX(); //secondbyte
    return (hi << 8 ) | lo;
}
void SYSTEM_Initialize(void)
{
    PIN_MANAGER_Initialize();
    OSCILLATOR_Initialize();
    EUSART1_Initialize();
}
 
void main(void)
{
    // initialize the device
    SYSTEM_Initialize();
 
    TRISAbits.TRISA0=0; //Limpio puerto para visualizar dato
    TRISAbits.TRISA1=0; //Limpio puerto que me servirá como señalización
    for (int i=0; i<16; i++) { //Recorremos el arreglo para leer cada bit
        PORTAbits.RA0=UART_GetUInt16()>>i; //Por aquí sale el dato bit a bit
        __delay_ms(1000); //Retardo para poder visaluzar el dato
        }
       PORTAbits.RA1=1; //LED que indica que se mostraron los 16 bits
       __delay_ms(1000);
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder