Se você é novo no mundo dos microcontroladores em geral, você deve estar se questionando se o recurso Watchdog Timer dos microcontroladores PIC tem realmente alguma utilidade. Afinal, quem gostaria de ter o microcontrolador reiniciado, em determinadas circunstâncias, periodicamente?
Na realidade, o Watchdog timer (WDT) tem um função muito importante não apenas contra bugs de software, mas também em situações ambientais agressivas. O WDT oferece a possibilidade de reestabelecer o controle da aplicação pelo microcontrolador através da reinicialização do sistema (um simples reset) mesmo que a falha esteja na próprio oscilador do microcontrolador (o WDT possui clock independente através de um RC interno e, por isso, possui tempo de incremento constante). Esse insucesso do microcontrolador de manter o fluxo do programa adequadamente pode ter várias causas:
Portanto, o WDT pode ser utilizado em qualquer tipo de aplicação. O WDT tem um timeout padrão de 18ms que pode ser aumentado para até alguns segundos através do postscaler. Este postscaler é comum entre o WDT e o TMR0; portanto, pode-se utilizar o postscaler para o WDT apenas quando o postscaler não está sendo aplicado ao TMR0 (o controle é feito através do bit PSA do registrador OPTION_REG). Para evitar que o sistema resete, deve-se adicionar a instrução clrwdt a algum loop do programa para que ela seja executada periodicamente e em tempo menor do que o período de WDT.
O WDT pode ser desativado adicionando-se o parâmetro _WDT_OFF no __CONFIG. A detecção de um reset devido ao WDT é efetuada pela verificação do bit /TO (TimeOut) do registrador STATUS. Este sinal é ativo-baixo: /TO igual a 0 significa que houve um estouro no temporizador watchdog.
Caso o sistema esteja no modo sleep, o WDT acorda o microcontrolador. Este procedimento é chamado de WDT wake-up.