El temporitzador de vigilància (watchdog) és un sistema que porta internament el microcontrolador que fa un reinici (reset) si el programa es queda bloquejat (o s'allarga massa). Bàsicament és un comptador que s'incrementa amb el rellotge lent (LFINTOSC) del microcontrolador (31 kHz) i quan arriba a un determinat valor provoca un reinici. Per evitar el reinici, el programa ha d'anar posant a zero periòdicament el registre del temporitzador de vigilància fent servir la funció CLRWDT().
Hi ha dos prescaladors que controlen el temps que trigarà el temporitzador de vigilància (watchdog) a reiniciar el microcontrolador. Un d'ells és específic del temporitzador de vigilància i es controla en el registre WDTCON. L'altre es pot fer servir amb el timer 0 o amb el temporitzador de vigilància (però no amb els dos a la vegada) i es controla en el registre OPTION_REG. El temps en segons que trigarà (aproximadament) a reiniciar el microcontrolador si no es posa a zero el comptador serà l'invers del producte de 31000 pels dos prescaladors.
El temporitzador de vigilància es pot posar en marxa de forma permanent en els bits de configuració o bé controlar-lo des del registre WDTCON. En el primer cas el watchdog estàrà sempre en funcionament fins que enviem un nou programa. En el segon cas, en canvi, podem posar en marxa i aturar el temporitzador de vigilància quan ho considerem convenient. En aplicacions molt crítiques el primer mètode ens garanteix que no podem aturar el temporitzador de vigilància escrivint en un registre equivocat.
Per posar en marxa el temporitzador de vigilància de manera permanent cal modificar la paraula de configuració, posant WDTE = ON. En la línia següent s'ha marcat en groc el que s'ha modificat:
#pragma config FOSC = INTRCIO, WDTE = ON, PWRTE = OFF, MCLRE = OFF, CP = OFF, CPD = OFF, BOREN = OFF, IESO = OFF, FCMEN = OFF
La taula següent mostra les funcions dels registres que fa servir el watchdog.
| Registre | Bits | Nom | Funció | Observacions |
| WDTCON | 1 a 4 | WDTPS | Preselecció específica del watchdog | Valors del factor:0000 1/32 0001 1/64 0010 1/128 0011 1/256 0100 1/512 0101 1/1024 0110 1/2048 0111 1/4096 1000 1/8192 1001 1/16384 1010 1/32768 1011 1/65536 |
| 0 | SWDTEN | Marxa i aturada del watchdog | Si val 1 el watchdog està activat (també es pot activar a la configuració) |
|
| OPTION_REG | 4 a 7 | No es fan servir per al watchdog | Valor per defecte 1000 | |
| 3 | PSA | Ús del prescalador | Si és 1 serà per al Watchdog i si és 0 per al Timer0 | |
| 0 a 2 | PS | Preselecció del watchdog compartida amb el Timer0 | Valors per al watchdog:000 1/1 001 1/2 010 1/4 011 1/8 100 1/16 101 1/32 110 1/64 111 1/128 |
A continuació farem alguns exemples de càlcul:
| PSA | Prescalador específic |
Prescalador compartit |
Operació | Temps abans del reinici (aproximadament) |
| 0 | 1/32 | indiferent | 1 / (31000/32) | 1 ms |
| 0 | 1/65536 | indiferent | 1 / (31000/65536) | 2,11 s |
| 1 | 1/32 | 1/1 | 1 / (31000/32) | 1 ms |
| 1 | 1/65536 | 1/1 | 1 / (31000/65536) | 2,11 s |
| 1 | 1/65536 | 1/128 | 1 / ((31000/65536) / 128) | 270,6 s (4,51 min) |
En algunes aplicacions es combina el mode d'espera amb el temporitzador de vigilància fent que ell microcontrolador es vagi despertant periòdicament per fer una tasca i es torni a posar en repòs quan l'acaba.
A l'exemple WD podem veure com funciona.

Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.