Su ayuda!!
Este programa lee un RING de llamada y enciende un led por tres segundos. Lo que no hace es iniciar nuevamente la rutina, es decir, si vuelvo a llamar para que detecte el RING y realice todo nuevamente. No hace nada. Alguien me podría ayudar?. Ya he intentado haciendo el goto pero ni así se clica el código nuevamente.
#include <18F4550.h>
#fuses PLL1,CPUDIV1,USBDIV,XTPLL,NOFCMEN,NOIESO,PUT,NOBROWNOUT,VREGEN,NOWDT,NOPBADEN,MCLR,NOSTVREN,NOLVP,NODEBUG,PROTECT,NOSTVREN,NOCPB,NOWRT
#use delay(clock=48000000)
#use rs232(baud=9600, xmit=PIN_c6, rcv=PIN_c7, parity=N, bits=8)
#byte porta = 0xF80 #byte portb = 0xF81 #byte portc = 0xf82 #byte portd = 0xf83 #byte porte = 0xf84
#priority rda
#define BUFFER_SIZE 60 //Buffer size you can adjust this size
char buffer[BUFFER_SIZE]; // buffer
char b=0x00; // Last characters recived
int xbuff=0x00;
int segundos,start=0;
int1 desbordamiento=0;
#INT_TIMER0
void retardo_trm0 (void)
{
set_timer0(18660); desbordamiento=1;
}
#int_RDA
RDA_isr() { if(kbhit()){b=getc();buffer[xbuff++]=b;}return 0;}
void inicbuff(void)
{ int i; for(i=0;i<buffer_size;i++){ buffer=0x00; restart_wdt(); } xbuff=0x00; }
void main()
{
enable_interrupts(int_rda);
enable_interrupts(INT_TIMER0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
set_timer0(18660);
enable_interrupts(global);
while (true)
{
if(buffer[2]=='R' && buffer[3]=='I' && buffer[4]=='N' && buffer[5]=='G') { delay_ms(100); start=1;} // Si lee RING, se hace el arranque del tmr0 con la bandera star=1
if (start==1 && desbordamiento==1) { disable_interrupts(int_rda); desbordamiento=0; segundos++; // Si arranca desabilitamos int_rda para que no siga recibiendo mas RING e iniciamos el contador
if (segundos<=3){ output_high(pin_a0);} // pin_a0 en alto de 0 a 3 segundos
if (segundos>=4 && segundos<=48){ output_low(pin_a0); } // pin_a0 en bajo de los 4 a los 48 segundos
if (segundos==49){ segundos=0; start=0; enable_interrupts(int_rda); inicbuff();} // a los 49 segundos reinicia el contador, start y habilita la interrupcion rda
}
}
}