Buenas de nuevo,
vuelvo a la carga porque llevo un par de meses intentando dar con el problema pero no he sido capaz. Por necesidad de más puertos migré de un 16F628A a un 16F876. Adapté todo el programa a la nueva distribución de puertos, reconfiguré el oscilador y la configuración de los fuses, pero no funcionó. He ido simplificando el código hasta llegar a un simple bucle que enciende y apaga un led en RB0 cada medio segundo.
He probado con cristales de 12 y 20 y con condensadores de 15, 22, 27 y 33 pF, pero solo he conseguido una cadencia de parpadeo que nada tiene que ver con medio segundo. He testeado 5 pics, con lo cual descarto que sea problema del pic. Dependiendo del código que escribo hace cosas diferentes, por ejemplo:
loop:
portb.0 = 1
waitms 500
portb.0 = 0
waitms 500
goto loop
Con esta simple rutina el led queda siempre prendido;
loop:
toggle portb.0
waitms 500
goto loop
Con esta rutina parpadea, pero no cumple ni de coña el medio segundo.
Desde mi ignorancia, deduzco que es un problema de calibración de tiempo, pero por más que me leo el ds del pic no logro dar con la solución. ¿Alguna idea?.
Como siempre, gracias de antemano.