Como configura o Watchdog no pic18?

Crie um programa mais com 20 dias ou mais ele da uma bugada ai tem que desliga para volta a funciona, entendo muito pouco de programação entendo razoavelmente de eletrônica que é o meu ramo de trabalho , sei que o wdt da um reset automático após um travamento na execução do programa mais não sei como fazer tinha com da uma ideia ?

Olá Ronaldo, tudo bem?

Cara, muito difícil te ajudar. Você não deu muitos detalhes. Nem o compilador que você está usando a gente consegue saber, tampouco o código. Sugiro que detalhe mais - quanto mais detalhes melhor - para quem sabe eu ou outra pessoa possa te ajudar.

#include<16F628A.h>
#fuses HS, NOWDT, NOLVP
#use delay(clock=20000000)
int i =0;
#FUSES PROTECT //Code protected from reads
#FUSES CPD //Data EEPROM Code Protected

void main(){
enable_interrupts(GLOBAL);
enable_interrupts(INT_EXT);
ext_int_edge(H_TO_L);
port_b_pullups(1);
while(TRUE){

  if(input(pin_b4)==0){

   delay_ms(200);
    output_high(pin_a0);



  }

else{ output_low(pin_a0);
output_high(pin_b5);

  for(i=0; i<150; i++){
		output_high(pin_b6);
		delay_us(1500);
		output_low(pin_b6);
		delay_us(1500);
	}
	delay_ms(10000);

	for(i=0; i<150; i++){
		output_high(pin_b6);
		delay_us(1500);
		output_low(pin_b6);
		delay_us(1500);
  }

    delay_ms(10000);

}

    if(input(pin_b3)==0){
    delay_ms(200);
    output_high(pin_a1);
    }

 else{ output_low(pin_a1);
    }



    if(input(pin_b2)==0){
      delay_ms(200);
      output_high(pin_a2);
    }

    else{ output_low(pin_a2);
    }

  if(input(pin_b1)==0){
     delay_ms(200);
    output_high(pin_a3);
    output_low(pin_b5);   
  }

else{ output_low(pin_a3);

}

 }
}

#int_EXT

void EXT_isr(void){
if(input(pin_B0)==0){
output_toggle(pin_b7);
}
}

Estou usando o MPLAB IDE v8.70

Vou ficar te devendo resposta, caro Ronaldo. Faz muitos anos que não mexo no XC8 da MPLab. Quem sabe alguém com mais expertise não possa ajudar?

Conseguir resolver o código ficou assim
void main(){
enable_interrupts(GLOBAL);
enable_interrupts(INT_EXT);
ext_int_edge(H_TO_L);
port_b_pullups(1);
while(TRUE){
setup_wdt(WDT_576MS);

      if(input(pin_b4)==0){
    output_high(pin_a0);
    output_low(pin_b6);
   }

   else{output_low(pin_a0);
        output_high(pin_b6); 
   }
   
     if(input(pin_b3)==0){
       output_high(pin_a1);
    }
    else{ output_low(pin_a1);
    }

     if(input(pin_b2)==0){
       output_high(pin_a2);
    }

    else{ output_low(pin_a2);
    }

  if(input(pin_b1)==0){
     output_high(pin_a3);
    }

else{ output_low(pin_a3);
}

if(input(pin_b7)==0){
output_high(pin_a4);
}

else{output_low(pin_a4);
}
RESTART_WDT();

 }
}

#int_EXT

void EXT_isr(void){
if(input(pin_B0)==0){
delay_ms(200);
output_toggle(pin_b5);
}
}

1 curtida