Voy a resumir tu programa en 4 lineas de codigo ( Aunque el while tampoco deberia ir, y serian 3).
while(TRUE)
{
output_high(PIN_A0);
delay_ms(31);
reseteo_de_micro();
}
Y si, eso es todo tu programa. ¿Por que?
A 4MHz suponiendo que el preescaler de WTD es el maximo 1:128, serian 32ms para que el WDT se dispare. Es decir a 4Mhz son 1us por cuenta, con preescaler 1:128 serian 128us por cada 1 que sume el WDT, en 8 bits es decir contar 256 veces, son 32ms.
Asi que eso se reiniciaria en el delay_ms o tal ves antes. por eso puse el resteo ese.
Despues otros problemas muy basicos. El if esta comparando F con 100. Curiosamente, F es 1/T, y T es un valor fijo que es 32/4000000 , F siempre es 125000 y es mayor a 100 por ende siempre va a entrar al if. Por lo tanto el if no funciona para nada, y es como si no estuviera.
Tick no se usa para nada, por lo tanto es lo mismo que nada. Por eso no lo puse. Es cierto que calculas algo y lo depositas en "Periodo" pero eso no se usa para nada. Por eso tambien lo quite
PD:
Te diste cuenta que la frecuencia es mas facil asi:
O mejor dicho es mas facil asi: