Autor Tema: interrupción del tmr0  (Leído 1811 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado asd12

  • PIC10
  • *
  • Mensajes: 48
interrupción del tmr0
« en: 02 de Abril de 2004, 15:32:00 »
Estoy programando un pic16f876. Para el programa necesito programar un reloj que se muestra en un lcd. Hice el programa del reloj, a parte, para una frecuencia de 4mhz con interrupciones para que fuera preciso. Usé el tmr0 con interrupciones cada 10ms. Lo simulé en mplab y es totalmente preciso.
El problema es cuando lo meto en el programa principal. Al simularlo las interrupciones tenían un retraso de 1us. Eso es un ciclo de reloj a 4mhz. No todas las veces retrasaba, pero casi todas las veces lo hacia. Lo intenté solucionar poniendo un NOP en la rutina de interrupción. Pero ahora adelanta 1us en la mayoría de las veces.
Lo único que se me ocurre es que se produce la interrupción cuando se esta ejecutando una instrucción que necesite 2 ciclos, como un goto o call, y por eso del atraso y adelanto.
El reloj no tiene que ser preciso y he calculado que adelantará o atrasará unos 5 minutos al mes. Pero no me quiero molestar en estar poniéndolo en hora cada mes.
Salvo w, status y pclath al entrar en la interrupción y las restauro al salir.
¿Hay alguna solución para hacerlo preciso?