
hola amigos

quiero preguntarles como puedo solucionar dicho problema,
estoy leyendo una trama de datos 25&52 por rs232, con un pic16f628a...pero el problema es que la lectura se queda pegada y no es capas de seguir leyendo los datos que le están llegando
nota: después de leer la trama separo los datos y los muestro en display de 4 segmentos
aquí envió el programa para que me puedan orientar con la solución;
saludos

////////////////////////////////////////////////////////////////////////////////////////////
// NUMEROS [0-9] = [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ]
int Numeros[10] = {0X00,0X01,0X02,0x03,0x04,0x05,0X06,0x07,0X08,0x09};
char trama_serial[4]; // Arreglo para recibir los datos.
int1 flag_rx = 0; // Variable bandera de recepción.
int8 Num_1,Num_2,Num_3,Num_4;
// Servicio de interrupción por recepción de datos RS-232
#INT_RDA
void RECEPCION_RS232(void)
{
gets(trama_serial); // Se recibe la cadena de datos.
flag_rx = 1; // Se indica recepción completa.
}
void main (void)
{
int tiempo = 10;
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
set_tris_a(0x00);
set_tris_b(0x02);
while (true)
{
if(flag_rx == 1) // Si hay datos en el buffer...
{
//
Num_1 = ((trama_serial[0])-48); Num_3 = ((trama_serial[3])-48);
Num_2 = ((trama_serial[1])-48); Num_4 = ((trama_serial[4])-48);
printf("%d%d%d%d\r",Num_1,Num_2,Num_3,Num_4);
// Limpiar la bandera "flag_rx"
while (true)
{
output_b(0x12); output_a(Numeros[Num_1]); delay_ms(tiempo);
output_b(0x22); output_a(Numeros[Num_2]); delay_ms(tiempo);
output_b(0x42); output_a(Numeros[Num_3]); delay_ms(tiempo);
output_b(0x82); output_a(Numeros[Num_4]); delay_ms(tiempo);
}
flag_rx = 0;
}
}
}