Estoy intentando configurar un receptor GPS con PIC16F876A. En el código a continuación, estoy recibiendo caracteres de UART y verificando si el carácter recibido es $
. Si la condición es verdadera, reciba los caracteres y guárdelos en la matriz de caracteres gps
hasta que se vea ,
.
Si escribo caracteres a través de un indicador de serie en Linux, el código funciona como se supone. Pero si lo conecto al receptor GPS, solo obtengo los primeros dos caracteres y la pantalla LCD mostrará OVERRUN . Soy nuevo en PIC. ¿Qué debo hacer?
char a, gps[50];
int i, j, k, flag = 0;
void GPS_init()
{
TXSTA = 0X24; //00100100
RCSTA = 0X90; //10010000
SPBRG = 25;
}
char uart_rx()
{
while(!RCIF);
//RCIF=0;
a=RCREG;
return(a);
}
void GPS()
{
for(i=0; ;i++)
{
a = uart_rx();
TXREG = a; //view received data in serial terminal
while(TRMT == 0);
data(a);
if(OERR == 1)
{
command(0Xc0);
display("OVERRUN"); //Display string to LCD
CREN = 0;
}
if(a == '$')
{
gps[0] = '$';
for(k=1; ;k++)
{
gps[k] = uart_rx();
data(gps[k]); //display character to LCD
TXREG = gps[k]; //view received data in serial terminal
while(TRMT == 0);
if(gps[k] == ',')
{
gps[k] = 'char a, gps[50];
int i, j, k, flag = 0;
void GPS_init()
{
TXSTA = 0X24; //00100100
RCSTA = 0X90; //10010000
SPBRG = 25;
}
char uart_rx()
{
while(!RCIF);
//RCIF=0;
a=RCREG;
return(a);
}
void GPS()
{
for(i=0; ;i++)
{
a = uart_rx();
TXREG = a; //view received data in serial terminal
while(TRMT == 0);
data(a);
if(OERR == 1)
{
command(0Xc0);
display("OVERRUN"); //Display string to LCD
CREN = 0;
}
if(a == '$')
{
gps[0] = '$';
for(k=1; ;k++)
{
gps[k] = uart_rx();
data(gps[k]); //display character to LCD
TXREG = gps[k]; //view received data in serial terminal
while(TRMT == 0);
if(gps[k] == ',')
{
gps[k] = '%pre%';
flag = 1;
break;
}
}
}
if(flag == 1)
{
flag = 0;
break;
}
}
}
main()
{
GPS_init();
LCD_init();
command(0x80);
display("Initializing");
command(0x01);
GPS();
while(1)
{
command(0XC0);
display(gps);
}
}
';
flag = 1;
break;
}
}
}
if(flag == 1)
{
flag = 0;
break;
}
}
}
main()
{
GPS_init();
LCD_init();
command(0x80);
display("Initializing");
command(0x01);
GPS();
while(1)
{
command(0XC0);
display(gps);
}
}