Con este código funciona correctamente:
#include <18F4550.h>
#FUSES WDT, INTRC_IO, NOMCLR
#use delay(clock=8M)
void main(){
setup_wdt(WDT_ON|WDT_2S);
RESTART_WDT();
output_HIGH(PIN_B2);
delay_ms(300);
output_LOW(PIN_B2);
delay_ms(300);
RESTART_WDT();
output_HIGH(PIN_B2);
delay_ms(300);
output_LOW(PIN_B2);
delay_ms(300);
RESTART_WDT();
output_HIGH(PIN_B2);
delay_ms(300);
output_LOW(PIN_B2);
delay_ms(300);
while(true){
if(input(pin_A4) == 1){while(true);}
else{
RESTART_WDT();
output_toggle(PIN_B1);
delay_ms(100);
}
}
}
Para comprobarlo se ejecuta una breve secuencia en el LED rojo de la simulación cada vez que se inicia el programa, la cual consiste en prender y apagar dicho LED 3 veces.
Posteriormente en el while se estará conmutando el estado del LED verde constantemente mientras no se pulse el botón que está conectado al pin B1 con una resistencia de pull-down. Importante, en este momento se reinicia el contador del WDT para evitar que el PIC se reinicie automáticamente.
Si se pulsa el botón, le llegará un pulso alto al PIC por lo que quedará en el bucle del while(true) y, al no resetear el contador del WDT, el PIC se reiniciará ejecutando nuevamente la secuencia del LED rojo.
View My Video