Autor Tema: Bucle Infinito  (Leído 1695 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado jnavarro

  • PIC10
  • *
  • Mensajes: 33
Bucle Infinito
« en: 03 de Marzo de 2008, 15:09:13 »
Buenas a todos,

Trato de hacer una comunicación simple, rs232, utilizando una interrupcion, el codigo que me planteo es el siguiente:

#include <18F2550.h>
#fuses   HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use     delay(clock=48000000)

#use rs232(baud=115200,xmit=PIN_C6,rcv=PIN_C7)

#int_rda
void serial_isr(){

   if(kbhit()){
   
      printf("Interrupcion");
      delay_ms(500);
   }
}

void main(){

   enable_interrupts(global);
   enable_interrupts(int_rda);

   printf("INICIO");

   do{

   }while(TRUE);

}


Pues bien, al enviar desde el PC un solo caracter, el pic se me queda encerrado en un bucle infinito dentro de la interrupción, enviando constantemente la frase "Interrupcion".  :shock:

En teoria lo que intento, es que, cada vez que yo le envie un caracter, el envie una vez el texto "Interrupcion", pero una vez enviado un solo caracter, se queda en un bucle infinito enviandolo constantemente.

¿Alguna idea?

Salu2 a tod@s  :P
__El conocimiento humano pertenece al mundo__

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Bucle Infinito
« Respuesta #1 en: 03 de Marzo de 2008, 15:41:33 »
ese delay_ms(500) es mucho tiempo, prueba quitandoselo.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado huichoman

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 186
    • Pequeñas piezas para grandes proyectos.
Re: Bucle Infinito
« Respuesta #2 en: 03 de Marzo de 2008, 19:55:57 »
Hola Jnavarro.

No se mucho pero, al saltar la interrupción, pues no haces nada con ese caracter por lo que se mantiene en ciclo infinito, ponle un getc() para que se limpie el buffer de recepción, o como se llame  :mrgreen:  como a continuación te muestro:

Código: [Seleccionar]
#include <18F2550.h>
#fuses   HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use     delay(clock=48000000)

#use rs232(baud=115200,xmit=PIN_C6,rcv=PIN_C7)

#int_rda
void serial_isr(void)
{

   if(kbhit()){
      getc();
      printf(" Interrupcion ");
     
   }
}

void main(){

   enable_interrupts(global);
   enable_interrupts(int_rda);

   printf("INICIO");

   do{

   }while(TRUE);

}

Te adjunto el rar con el codigo fuente y simulacion.

Saludos

GAMBARIMASUUUUUUUUUUUUUUUU