Bueno he solucionado el error de la basura transmitiendo dentro de la rutina de la interrupcion RDA por el puerto de la PC (SOFTWARE y el mismo que mandaba la basura) cuando me llega el paquete en el puerto del GPS (HARDWARE)
algo asi :
#int_rda
void serial_isr(void) {
while(kbhit(GPS))
{
////atiendo la rutina
c=fgetc(GPS);
if(c=='$')
{for (t=0;t<5;t++){
gpsID[t]=fgetc(GPS);}
////// transmito lo que quiero por el otro puerto
fprintf(PC,"HOLA -%d",k);
//////terimnar de limpiar el buffer
while(kbhit(GPS)){c=fgetc(GPS);}
}
clear_interrupt(int_rda);
}
Insisto en que tienes un error en el programa. En Proteus te funcionaba porque ponías 2MHz de clock, pero debe ir la velocidad a la cual queda trabajando el núcleo del PIC. Por ejemplo, en el caso de utilizar un cristal de 20MHz y que pase directo hacia el micro, el valor a colocar sería 20MHz.
de que tengo el error en la configuracion la tengo, algo curioso es que con los cristales tengo el mismo problema como si uso el oscilador interno, en proteus en cambio si tengo que poner el
#use delay(clock=2MHZ)
setup_oscillator(OSC_2MHZ);
pero al implementarlo en el pic si tengo que mantener esa relacion 1 a 4 para que me funcione el generador de BAUDRATE y los retardos =S esta raro eso, espero algun dia encontrar el problema de porque no me trabaja, tanto en CCS como en ASM de MPLAB, he leido la documentacion y buscado en foros pero no encuentro el por que, de igualmanera ya solucione mi problema que tambien no supe cual era la causa, solo cambie el momento donde transmitia y se soluciono, gracias AngelGris