¡ Saludos al foro !
Al parecer nadie ha tenido problemas así que voy a poner el código para que lo comprobéis. Si lo cargamos en el MPLAB (PIC10F200, lenguaje ensamblador, 4 MHz) y lo simulamos con el propio simulador del MPLAB funciona correctamente, es decir llega al bucle Salida_On al cabo de 1 segundo.
Si utilizamos el Proteus VSM no funciona, se queda en la instrucción goto Bajo_Consumo y NUNCA salta el Watchdog.
;==================================================================================================
; Test del Watchdog
;==================================================================================================
LIST P = 10F200, F = INHX8M
INCLUDE "P10F200.INC"
;==================================================================================================
; OPCIONES DE CONFIGURACION
;==================================================================================================
__CONFIG ( _MCLRE_OFF & _CP_OFF & _WDT_ON & _IntRC_OSC )
ERRORLEVEL 0,-205
;==================================================================================================
; Pines Asignados
;==================================================================================================
#define SALIDA GPIO,0 ; Pin de Salida
;==================================================================================================
; Posiciones de memoria
;==================================================================================================
CBLOCK 0x10 ; Memoria de Usuario
Num_WDTs ; Número de WDT's transcurridos
ENDC
;==================================================================================================
; PROGRAMA PRINCIPAL
;==================================================================================================
ORG 0x000 ; Origen de la memoria
MOVWF OSCCAL ; Guarda el valor de OSCCAL de la factoria (modelos OTPs)
;--------------------------------------------------------------------------------------------------
; Comprueba el Tipo de Reset. Si es el WDT bifurca
;--------------------------------------------------------------------------------------------------
Comprueba_WU
BTFSS STATUS,NOT_TO ; Comprueba el Flag del WDT
GOTO Es_Por_WDT ; Se ha reseteado por WDT
;==================================================================================================
; Arranque por el Reset POR (Power On Reset)
;==================================================================================================
Power_On_Reset
CLRF GPIO ; Borra el puerto
MOVLW B'00001000' ; GP3 entrada, el resto salidas
TRIS GPIO ; Configura los pines
BCF SALIDA ; Salida a cero
CLRF Num_WDTs ; No tenemos ningún WDT
;--------------------------------------------------------------------------------------------------
; Entramos al estado de Bajo Consumo.
; Salimos por WDT (Si funciona)
;--------------------------------------------------------------------------------------------------
A_Dormir
CLRF GPIO ; Borra el puerto
MOVLW B'00001000' ; GP3 entrada, el resto salidas
TRIS GPIO ; Configura los pines
MOVLW B'10001000' ; Preescaler 1:1
OPTION ; Asigna el Option
CLRWDT ; Inicializamos el WDT
Bajo_Consumo
SLEEP ; Pone el micro en bajo consumo
GOTO Bajo_Consumo ; Bucle de Bajo Consumo
;==================================================================================================
; Tratamiento de los Resets por WDT
;==================================================================================================
Es_Por_WDT
INCF Num_WDTs,F ; Ha transcurrido un WDT
MOVLW D'56' ; Retardo
SUBWF Num_WDTs,W ; Comprueba si es mayor
BTFSS STATUS,C ; Comprueba si lo es
GOTO A_Dormir ; Volvemos al Bucle
Salida_On
CLRWDT ; Resetamos el WDT
BSF SALIDA ; Salida a Uno
GOTO Salida_On ; Bucle Infinito
END