Das
ks0108Init();
In der ISR sollte man vermeiden, auch wenn die Routine nur jede Sekunde einmal aufgerufen wird. Genau wiess ich zwar nicht was da drinsteht, aber ein Zugriff aufs LCD dauert oft sehr lange. Man sollte generell Funktionsaufrufe in einer ISR vermeiden, denn dann werden fast alle Register gesichert.

Beim Hochzählen der Zeit, kann man die IFs etwas ander Schachteln, die Studen werden nur hochgezahl, wenn auch die Sekunden dran waren. Außerdem ist am Ende des Tages die Sekunde und Minute ohnehin schon bei 0. Die variablen für sek, min und Stunde sollten ein 8- bit Typ ( z.B. char) sein. Sonst müßte man den Zugriff im Hauptprogramm jeweils Atomar gestallten.

Ein 32678 Hz Quarz muß nicht genauer sein als welche im 8 MHz Bereich. Auch da muß die Beschaltung mit den Kondensatoren stimmen. Welche Kapazitäten richtig sind hängt vom Quarz ab, da gibt es Unterschiede. Weil die Kapazitäten da oft recht klein sind, kommt es auch auf das Layout und die Eingangskapazität an. Den Hauptvorteil, den man mit einem 32kHz Quarz hat, ist die geringe Leistung, wenn man Stromsparmodi nutzt.


Wenn es sein muß, könnte man Abweichungen in der Frequenz auch noch softwaremäßig korrigieren: Nach einer Zeit im Bereich mehrerer Minuten den Zähler mit einem Anderen Wert Vorladen um so ein Intevall um 1/256 Sekunde zu verlängern oder verkürzen.