Note que se você manter o botão pressionado o watchdog não estoura mas se ficar com o botão livre ele irá reiniciar o pic a aproximadamente 2,3 segundos.Veja o código-fonte:
/////////////////////////////////////////////////////////////////////////////// //projeto : usando o watchdog do pic //autor : aguivone //data : 09/07/2012 //versão: 1 ////////////////////////////////////////////////////////////////////////////// #include <16F877A.h> #fuses XT,WDT,NOPROTECT,NOLVP // deve se habilitar aqui o watchdog(WDT) #use delay(clock=4M) #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) void main() { setup_wdt(WDT_2304MS);//programa pra estourar a cada 2,3 segundos printf("Iniciando teste de watch dog! \r\n"); for(;;) { delay_ms(1800); if(INPUT(PIN_B0)) { RESTART_WDT();// reinicia contagem,é mais usual //#fuses NOWDT se usar esta linha desliga watchdog printf("Não estourou ainda! \r\n"); } else { printf("Vai estourar em breve! \r\n"); } } } /*valores possiveis: WDT_18MS WDT_36MS WDT_72MS WDT_144MS WDT_288MS WDT_576MS WDT_1152MS WDT_2304MS */
contribua com o blog mande seus exemplos também!
Cara obrigado!! estafa fazendo uma matriz e travava entre 30min e 2hs de funcionamento
ResponderExcluiragora que vo como reinicia a contagem do WDT ta tudo legal ^^
apropósito... não sei se depende da PIC mas to usando uma 2550, nos testes coloquei WDT_4096MS e reseta em torno de 15/20s ... com isso acredito que os "valores possíveis" seja um default apenas... pode ser modificado o numero
Obrigado novamente o/
Olá, há como tornar as entradas do pic 16f877a independentes...? Pois todas as vezes que as ligo, uma depende que a outra esteja desligado para entrar em nivel baixo. Resumindo: ao acionar a entrada 2 (ex) e logo após a 3, a dois só desliga se a 3 for desligada primeiro. Gostaria de ativar as 8 entradas e aciona-las independentemente...obg.
ResponderExcluirapesar delas serem independentes e funcionar bem nas versões antes do XC8, não sei por que para este modelo de microcontrolador já tive problema parecido.Acho que é bug do compilador, uma solução é criar uma variável que está linkada a porta de saída, dai quando vc atualizar a variável, e no final do seu processo vc envia o valor da variável ao "port" inteiro.
ExcluirMas veja também se não foi alguma configuração dos pinos(se não for usar os comparadores internos é recomendado configurar eles para desligados).
obrigado ! ajudou muito!!!
ResponderExcluir