Hola a todos estoy haciendo un proyecto, donde estoy utilizando un gps. Lo que quiero hacer es que un micro reciba la trama NMEA que le envia el gps y la muestre en un lcd. Lo cual tengo una duda, ya he hecho el programa del micro, que a cotinuacion lo agrego, el problema que estoy teniendo es que el programa que hice no me actualiza los valores. es como que la primera trama que entra, es la que se guarda y las otra no las guarda.
me gustaria si alguien sabe donde me estoy confundiendo, o por que no anda. por que es mas facil a otro reconocer lo errores de uno, que a uno mismo. dede ya muchas gracias.
el programa es:
#INCLUDE <16F876.H>
#use delay(clock=4000000)
#use RS232(BAUD=4800, RCV=PIN_C7, XMIT=PIN_C6, PARITY=N, BITS=8)
#fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT,NOCPD,NODEBUG
#include <lcd.c>
#use standard_io(C)
#use standard_io(A)
int j=0;
char cadena[71];
char *buffer=cadena; // UNION entre el puntero y el vector
#int_rda
void recepcion_serie() // Rutina de interrupción por recepción serie
{
buffer[j] = getc();
j++;
}
void main()
{
lcd_init();
lcd_putc("\fPreparando...\n");
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
while(true)
{if(cadena[17]=='V')
{ printf(lcd_putc,"\f ERROR DE\n\t RECEPCION");
delay_ms(10);
}
else
{If(input(pin_a1)==1)
{printf(lcd_putc,"\fTiempo=%c%c:%c%c" ,cadena[7],cadena[8],cadena[9],cadena[10]);//imprime el tiempo
printf(lcd_putc,"\nFecha=%c%c/%c%c/%c%c" ,cadena[55],cadena[56] ,cadena[57],cadena[58],cadena[59],cadena[60]);//imprime la fecha
delay_ms(10);
}
else
{printf(lcd_putc,"\fLat=%c%c%c%c.%c%c%c%c%c%c", cadena[20], cadena[21],cadena[22],cadena[23],cadena[25],cadena[26],cadena[27],cadena[28],cadena[29],cadena[30]); // imprime la latitud
//printf(lcd_putc,"\nLon=%c%c%c%c%c.%c%c%c%c%c%c" ,cadena[32],cadena[33],cadena[34],cadena[35],cadena[36],cadena[38],cadena[39],cadena[40],cadena[41],cadena[42],cadena[43]);//imprime la longitud
printf(lcd_putc,"\n%d",j);
delay_ms(10);
}
}
if(j>=71)
{buffer[71]=(0);
j=0;
}
}
}
me gustaria si alguien sabe donde me estoy confundiendo, o por que no anda. por que es mas facil a otro reconocer lo errores de uno, que a uno mismo. dede ya muchas gracias.
el programa es:
#INCLUDE <16F876.H>
#use delay(clock=4000000)
#use RS232(BAUD=4800, RCV=PIN_C7, XMIT=PIN_C6, PARITY=N, BITS=8)
#fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT,NOCPD,NODEBUG
#include <lcd.c>
#use standard_io(C)
#use standard_io(A)
int j=0;
char cadena[71];
char *buffer=cadena; // UNION entre el puntero y el vector
#int_rda
void recepcion_serie() // Rutina de interrupción por recepción serie
{
buffer[j] = getc();
j++;
}
void main()
{
lcd_init();
lcd_putc("\fPreparando...\n");
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
while(true)
{if(cadena[17]=='V')
{ printf(lcd_putc,"\f ERROR DE\n\t RECEPCION");
delay_ms(10);
}
else
{If(input(pin_a1)==1)
{printf(lcd_putc,"\fTiempo=%c%c:%c%c" ,cadena[7],cadena[8],cadena[9],cadena[10]);//imprime el tiempo
printf(lcd_putc,"\nFecha=%c%c/%c%c/%c%c" ,cadena[55],cadena[56] ,cadena[57],cadena[58],cadena[59],cadena[60]);//imprime la fecha
delay_ms(10);
}
else
{printf(lcd_putc,"\fLat=%c%c%c%c.%c%c%c%c%c%c", cadena[20], cadena[21],cadena[22],cadena[23],cadena[25],cadena[26],cadena[27],cadena[28],cadena[29],cadena[30]); // imprime la latitud
//printf(lcd_putc,"\nLon=%c%c%c%c%c.%c%c%c%c%c%c" ,cadena[32],cadena[33],cadena[34],cadena[35],cadena[36],cadena[38],cadena[39],cadena[40],cadena[41],cadena[42],cadena[43]);//imprime la longitud
printf(lcd_putc,"\n%d",j);
delay_ms(10);
}
}
if(j>=71)
{buffer[71]=(0);
j=0;
}
}
}