Hum, grundsächlich wär mein Ansatz für eine Lösung für diese Aufgabe ein wenig anders ausgefallen, aber dies ist natürlich auch eine Möglichkeit.

Was wir als erstes auffällt, du hast call-Befehle in deinem Programm, die aber mit einem goto enden. Das ist seeehr ungesund, weil ein call immer ein Eintrag in der Stack zu folge hat und erst das "return" in der Unterfunktion lässt den Stack-Pointer eine Ebene höher springen und bringt den PCL zurück an den Punkt, von wo der call-Befehl aufgerufen wurde. Existiert dieser aber nicht, so wird schafft der nächste call einen weiteren Sprung tiefer im Stack und der nächste noch einen, etc. und irgendwann ist dein Call-Stack voll. Abhängig vom µC führt das wiederrum zu einem reset, oder einfach dazu, dass dein Programm plözlich nicht mehr in die Hauptfunktion "zurückfindet".
Also nie ein call ohne ein return benutzen. Wenn du ein goto am Ende der Funktion hast, dann spring auch mit einem goto hinein . Das erspart Frustrationen bei der Fehlersuche (weil es ein Laufzeitfehler ist, schreibt der Compiler auch nicht).

call clearstdz
Die Zeile ist unnütz, da du ja danach auch ein aufruf auf die gleiche Funktion hast

call LcdBusy
Das ist der Befehl, der wahrscheinlich für deine Misere verantwortlich ist. Den da ist eine Schleife drin und du kannst nicht sagen, wie lang sie durchlaufen wird. Deshalb könnte es theoretisch sein, dass der Timer1 überläuft, noch bevor der Interrupt vollends beendet wurde. Auch wenn es vom PIC her nicht möglich ist ein Interrupt in einem Interrput auszulösen schmeißt es jeden Versuch von Genauigkeit hin.

Also das inclusive or mit '0' (also 0x30) ist natürlich auch eine Möglichkeit, wobei ich persönlich eher einfach 0x30 oder '0' zu dem Arbeitsregister hinzuaddiert hätte.
MfG
Mobius

P.S.: Ich seh grad, dass du ja in deiner Hauptfunktion nichts zu tun hast ^_^. Es schadet dem armen Interrupt sicher nicht, wenn du die Ausgabe der Zahlen in diesem ausführen würdest, weil ein Interrupt ist eiegntlich dafür da, dass es schnell (betont) eine kleine Aufgabe ausführt.

Code:
  Hauptprogramm            Interrupt
-------------------      ------------

Inintialisierung           Timer 1
      |                       |
      |                       |
      V                       V
Uhrzeit auslesen<-+    Sekunde berechnen
      |           |           |
      |           |           |
      V           |           V
LCD auffrischen   |     Minute berechnen
      |           |           |
      |           |           |
      +-----------+           V
                        Stunde berechnen
                              |
                              |
                              |
                              V
                        Daten Abspeichern