aqui esta el programa para que lo puedan ver y ayudar.
#include "16f877.h"
#include "string.h"
#org 0x1F00, 0x1FFF void loader16F876(void) {} //protect bootloader code for the 8k 16F876/7
#use delay(clock=4000000)
//#fuses XT, NOWDT, NOPROTECT, NOPUT, NOBROWNOUT
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)
#zero_ram
#byte port_a=5
#byte port_b=6
#byte port_c=7
#byte port_d=8
#byte port_e=9
short timeout_error;
char timed_getc();
#int_rda
void datos_entrantes();
main()
{
//SET_TRIS_A(0xFE);
SET_TRIS_D(0X00);//SALIDAS RD0,RD1
//printf("online
"

;
enable_interrupts(int_rda);
enable_interrupts(global);
bit_clear(port_d,0);
bit_clear(port_d,1);
//bit_clear(port_a,0);
//disable_interrupts(global);
//printf("ATD93192792
"

;
//delay_ms(2000);
//enable_interrupts(global);
while(1)
{
bit_set(port_a,0);
delay_ms(1000);
bit_clear(port_a,0);
delay_ms(1000);
}// fin while(1)
}// fin de programa
#int_rda
void datos_entrantes()
{
char string_buffer[20];
if (timed_getc() == 0x0D)
{
bit_set(port_d,1);
gets(string_buffer);
bit_clear(port_d,1);
bit_set(port_d,0);
printf("%S",string_buffer); printf("%S",string_buffer);
bit_clear(port_d,0);
}
}// fin datos_entrantes
char timed_getc() {
long timeout;
timeout_error=FALSE;
timeout=0;
while(!kbhit()&&(++timeout<50000)) // 1/2 second
delay_us(10);
if(kbhit())
return(getc());
else {
timeout_error=TRUE;
return(0);
}
}
el problema lo tengo dentro de la interrupcion por RDA,
entro al if y se queda pegado en el gets(string_buffer), eso lo detecto ya que tengo un led antes y se debe apagar cuando termina la instrucción , lo cual no ocurre.
gracias por la ayuda anterior