Parece que estás correcto en lo de generar 1 segundo.Con el temporizador 0 o TMR0, para conseguir lo que deseas, los pulsos contados (que son los pulsos del oscilador) se incrementen al ritmo que deseas, deben seguir la ruta mostrada por la flecha roja:
El primer bit que se debe verificar/activar a 0 lógico es T0CS (caso contrario estarías usando como fuente de pulsos el pin externo TOCKI)
El segundo bit que se debe verificar o activar a cero lógico es el PSA. (Caso contrario la fuente de pulsos es el perro guardián.
Hasta ese punto parece estar correcto:
´
Si la frecuencia del oscilador es 4Mhz, antes del escalamiento, sería 4MHz/4 = 1MHz, luego del escalamiento (que es de 64), la frecuencia sería de 15.625 kHz, o en periodo 64 us.
Al ser un temporizador de 8 bits, la interrupción se produciría según como calibras tu temporizador cada (256 - 100) pulsos = 64 us x (256 - 100) = 9.984 ms., y con la variable que usas, el tiempo creado sería de 0.998 segundos.
Lo que no entiendo y no me parece correcto es la deshabilitación de las interrupciones. Deshabilitar la interrupción es poner en pausa al temporizador, lo que introduciría
jitter e incrementa el error que ya por defecto tiene (no es 1 segundo exacto)
Algo que no comprendo es cuándo se ejecuta la línea 38.
DISABLE ;DESHABILITAR INTERRUPCIONES
Por que al producirse la interrupción, la línea que se ejecuta es la 39, y según yo, la línea 38 nunca sucedería.
Esta línea de acá:
INTCON.2 = 0 ;REHABILITAR INTERRUPCIÓN TMR0
No habilita la interrupción, esa línea limpia la bandera de interrupción y siempre debe ser ejecutada antes de retornar al flujo normal del CPU.
También la línea 52, me parece que nunca se ejecuta:
ENABLE ;HABILITAR INTERRUPCIONES
ya que antes se ejecuta RESUMe y regresas al flujo normal del CPU.
Algo que podría meter latencia al sistema tal vez es la función que maneja el display (LCDOUT) ya que tu interrupción se ejecuta aproximadamente cada 1ms, y esas rutinas tras bambalinas hacen muchos procesos, no creo que es buena idea que la coloques ahí.Una interrupción debe ser lo más simple y corta en sus procesos.