Prueba a poner así a ver que tal:
Codigo:
#INCLUDE <16F876.H>
#use delay(clock=16000000)
#use RS232(BAUD=4800,RCV=PIN_A0,PARITY=N,BITS=8)
#fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT,NOCPD,NODEBUG
#include "miLCD.c"
int j;
char cadena[17];
char *buffer = cadena;
#int_rda
void recepcion_serie() // Rutina de interrupción por recepción serie
{
// lcd_putc("fRecibido1
"); // Esto lo escribiría cada vez q se interrumpiese
buffer[j] = getc();
j++;
// delay_ms(200); // Si pones aquí un retardo perderás datos
}
void main()
{
j = 0;
lcd_init();
lcd_putc("fPreparado...
");
delay_ms(1000);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
while( j < 15 ) // No salimos hasta que tengamos 16 caracteres en el buffer
{
if(j == 15)
{
disable_interrupts(INT_RDA);
}
}
printf(lcd_putc,"DAT=%s",buffer); // Sacamos todo por el lcd
delay_ms(500);
for(;;) {}
}
Juanelete he estado probando el programa usando el pin A0 del pic para recibir los datos y no hay manera.He probado a hacer la comunicación usando los pines correspondientes a la usart del pic y va a la perfección :(RCV=PIN_C7,XMIT=PIN_C6).
Prueba a conectar el gps a estos dos pines y verás como te funciona.
No se yo si se podrán usar otros pines de la misma forma para comunicaciones serie,pero la cuestión es que lo he simulado en proteus y no hay manera.
Codigo:
#INCLUDE <16F876.H>
#use delay(clock=16000000)
#use RS232(BAUD=4800,RCV=PIN_C7,XMIT=PIN_C6,PARITY=N,BITS=8)
#fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT,NOCPD,NODEBUG
#include "miLCD.c"
int j;
char cadena[16];
char *buffer = cadena;
#int_rda
void recepcion_serie() // Rutina de interrupción por recepción serie
{
// lcd_putc("fRecibido1
"); // Esto lo escribiría cada vez q se interrumpiese
buffer[j] = getc();
j++;
// delay_ms(200); // Si pones aquí un retardo perderás datos
}
void main()
{
j = 0;
lcd_init();
lcd_putc("fPreparado...
");
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
while( j < 15 ) // No salimos hasta que tengamos 16 caracteres en el buffer
{
if(j == 15)
{
disable_interrupts(INT_RDA);
}
}
printf(lcd_putc,"%s",buffer); // Sacamos todo por el lcd
delay_ms(500);
for(;;) {}
}
También he quitado un retardo que había en el main pq no servía de nada.
Ya nos cuentas.
Un saludo