Analog/Digitale Wanduhr 1 - Homepage von Stefan Buchgeher
Analog/Digitale Wanduhr 1 - Homepage von Stefan Buchgeher
Analog/Digitale Wanduhr 1 - Homepage von Stefan Buchgeher
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
4.5.5. INNEREUHR<br />
<strong>Analog</strong>/<strong>Digitale</strong> <strong>Wanduhr</strong> 1<br />
Aufgabe:<br />
Für den Fall dass kein gültiges DCF-Telegramm empfangen werden kann sorgt dieses<br />
Unterprogramm dafür, dass die Uhrzeit trotzdem jede Sekunde aktualisiert wird. Ist für<br />
eine längere Zeit kein korrekter DCF-Empfang möglich, so würden die Minuten,<br />
Stunden, Tage usw. stehen bleiben, da ja im Unterprogramm DCFUPMINUTE nur<br />
gültige DCF-Telegramme übernommen werden.<br />
Dieses Unterprogramm wird also parallel zu den Unterprogrammen für die DCF-<br />
Dekodierung aufgerufen.<br />
Vorgehensweise:<br />
Die Sekunden (Register UHRSEKUNDE) um 1 erhöhen. Beinhalte dieses Register nun<br />
den Wert 60, so beginnt eine neue Minute. Daher die Sekunden löschen und die<br />
Minuten (Register UHRMINUTE) um 1 erhöhen. Beinhaltet dieses Register nun den<br />
Wert 60, so beginnt eine neue Stunde. Daher die Minuten löschen und die Stunden<br />
(Register UHRSTUNDE) um 1 erhöhen. Beinhaltet dieses Register nun den Wert 24, so<br />
beginnt ein neuer Tag. Daher die Stunden löschen. Ist das Mitzählen des Datums<br />
notwendig, so muss nun ein Register für den Tag (z.B. DATUMTAG) um 1 erhöht<br />
werden und dieses Überprüft werden, wobei diese Prüfung nun nicht mehr so einfach<br />
ist, da ja jeder Monat unterschiedlich viele Tage besitzt. Erschwerend kommt auch noch<br />
hinzu, dass auch die Schaltjahre miteinbezogen werden müssen!<br />
Achtung:<br />
Dieses Unterprogramm muss daher jede Sekunde aufgerufen werden<br />
Hier das Unterprogramm:<br />
INNEREUHR incf UHRSEKUNDE,f ;Sekundenzähler um 1 erhöhen<br />
movf UHRSEKUNDE,w<br />
sublw .60<br />
btfss STAT,Z ;Pruefen, ob Sekunde=60<br />
goto INNERERUHRFERTIG<br />
clrf UHRSEKUNDE ;Wenn Sekunde=60, Sekunde loeschen<br />
incf UHRMINUTE,f ; und Minute um 1 erhöhen<br />
movf UHRMINUTE,w<br />
sublw .60<br />
btfss STAT,Z ;Pruefen, ob Minute=60<br />
goto INNERERUHRFERTIG<br />
clrf UHRMINUTE ;Wenn Minute=60, Minute loeschen<br />
incf UHRSTUNDE,f ; und Stunde erhoehen<br />
movf UHRSTUNDE,w<br />
sublw .24<br />
btfsc STAT,Z ;Pruefen, ob Stunde=24<br />
clrf UHRSTUNDE ;Wenn Stunde=24, Stunden loeschen<br />
INNERERUHRFERTIG<br />
return<br />
Seite 28