Quienquiera que haya leído esta pregunta, tenga paciencia para leer hasta el final, necesita su ayuda ... Estoy tratando de analizar la cadena $ GPGGA del módulo GPS con PIC16f877A utilizando una comunicación UART simple establecida a una velocidad de 9600 en 20MHz. Mi programa funciona de la siguiente manera: comprueba cada carácter de los datos entrantes para encontrar la cadena $ GPGGA y una vez que encuentre esa cadena usando una coma como delimitador, solo extraerá información de latitud y longitud y las almacenará en una matriz, luego la transmitirá en serie a la computadora. No obtuve respuesta, entonces trato de transmitir cada dato recibido en serie y noté que los datos Recibidos son un valor de basura, como el caso de la falta de coincidencia de la velocidad en baudios, pero me aseguro que la velocidad en baudios conecte el módulo GPS por separado a mi computadora y también el PIC IC a mi la computadora por separado y la prueba con la aplicación Terminal a 9600 Baudios todo funciona bien. ¿Existe algún tipo de desbordamiento o la condición de desbordamiento de búfer se desencadena de acuerdo con mi Código ... Necesito ayuda? Código adjunto con esta pregunta ...
#include<pic.h>
char lat[]="000000000";
char lat_dir='0';
char lon[]="000000000";
char lon_dir='0';
char x='0';
int i=0,j=0;
void init_uart(void);
void tx(char );
char rx(void);
void main()
{
init_uart();
while(1)
{
while(rx()!='$');
tx('0'); // to make sure that $ is reveived nothing to do with rest of the code section
tx(0x0d);
if(rx()=='G')
{
if(rx()=='P')
{
if(rx()=='G')
{
if(rx()=='G')
{
if(rx()=='A')
{
if(rx()==',')
{
while(rx()!=',');
while(1) // here as a test i only try to extract latitute
{
x=rx();
if(x!=',')
{
lat[i]=x;
i++;
}
if(x==',')
{
break;
}
}
tx(0x0d);
for(j=0;j<i;j++) // here as a test i only try to transmit latitute //cooridinate back to computer after extraction
{
tx(lat[j]);
}
j=0,i=0;
}
}
}
}
}
}
}
}
void init_uart(void)
{
// TXSTA = 0X24;
// SPBRG = 0X81;// 20Mhz baud rate 9600. Refer datasheet..
// RCSTA = 0X90;
TRISC=0x80; // Configure Rx pin as input and Tx as output
TXSTA=0x24; // Asynchronous mode, 8-bit data & enable transmitter
RCSTA=0x90; // 8-bit continous receive enable
SPBRG=0x81; // 9600 Baud rate at 20MHz
}
void tx(char x)
{
TXREG =x;
while(TXIF==0); // these bit will cleared when a data
//is loaded in to TXREG again
}
char rx(void)
{
char x;
while(RCIF==0); // These bit will automatically cleared
x= RCREG; // and RCIF is read only
return x;
}