diff options
-rw-r--r-- | Binaeruhr.asm | 21 |
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: |