summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Binaeruhr.asm21
1 files changed, 15 insertions, 6 deletions
diff --git a/Binaeruhr.asm b/Binaeruhr.asm
index 61d0f97..9aec076 100644
--- a/Binaeruhr.asm
+++ b/Binaeruhr.asm
@@ -163,7 +163,15 @@ Funk_initialisieren:
neue_Funksekunde:
-; TODO: Sekunde ausrichten, wenn Funk ok war
+ sbrs Status,2
+ rjmp nach_Funkflanke
+
+ mov r16,nTicsL
+ sub r16,TicsL ; wie viele TicsL bis zur nächsten Sekunde (nach Quarz)
+ mov nTicsL,TicsL ; wir setzen es auf "jetzt"
+ cpi r16,50 ; wurde die Sekunde durch den Quarz schon gezählt?
+ brcs nach_Funkflanke ; branch, wenn "noch nicht gezählt"
+ subi nTicsL,(256-100) ; wir setzen es jetz auf "in 100 TicsL"
nach_Funkflanke:
@@ -174,12 +182,12 @@ nach_Funkflanke:
mov r17,TicsL
subi r17,0x80
cp r16,r17
- brcc main_loop
+ brcs neue_Sekunde
+ rjmp main_loop
neue_Sekunde:
- ldi r16,100
- add nTicsL,r16
+ subi nTicsL,(256-100)
sbis PIND,2
rjmp neue_Stunde
@@ -228,11 +236,11 @@ neue_Funkminute:
mov r18,r16
rcall checksum
- brts Funk_initialisieren
+ brts neue_Funkminute_Ende
mov r18,r17
rcall checksum
- brts Funk_initialisieren
+ brts neue_Funkminute_Ende
mov r18,r16
cbr r18,0x80
@@ -248,6 +256,7 @@ neue_Funkminute:
sbr Status,0x04 ; die empfangene Minute ist ok
+neue_Funkminute_Ende:
rjmp Funk_initialisieren
neue_Minute: