Tengo un PIC16F688 corriendo a 4MHz (intosc) y necesito un retraso de aproximadamente 1 segundo. Usando este bucle for:
for (unsigned long n = 0; n < 219300; n++) {}
produce este resultado en la función de cronómetro en el simulador:
Stopwatch cleared. Stopwatch cycle count = 0 (0 ns)
Target halted. Stopwatch cycle count = 4038340 (1.009585 s)
Eso está perfectamente bien para mi aplicación.
Pero cuando ejecuto el código en un chip real, el retraso demora entre 10 y 12 segundos en lugar de 1. Esto me hizo pensar que el chip se está ejecutando en una frecuencia inferior a 4MHz, pero lo he comprobado dos veces y de hecho está funcionando a 4MHz. El simulador también está configurado para funcionar a 4MHz, por lo que no hay discrepancias aquí.
Aparte de una frecuencia demasiado baja, no puedo pensar en ningún otro error que haga que este retraso se desactive. Las interrupciones están desactivadas (INTCON = 0).
¿Alguna pista de por qué sucede esto? ¿Por qué el valor del cronómetro no coincide con la realidad?