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
RECEPTOR
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


0