summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Binaeruhr.asm178
1 files changed, 89 insertions, 89 deletions
diff --git a/Binaeruhr.asm b/Binaeruhr.asm
index 264b69e..59e2a22 100644
--- a/Binaeruhr.asm
+++ b/Binaeruhr.asm
@@ -1,23 +1,23 @@
/*
- * Fernbedienung.asm
- *
- * Created: 08.10.2015 14:35:11
- * Author: Erich
- */
+ * Binaeruhr.asm
+ *
+ * Created: 09.11.2020
+ * Author: Erich
+ */
.INCLUDE "tn2313def.inc"
-.EQU Spalte, 31 ; die anzuzeigende Spalte (als Bitmaske fuer PORTD)
-.EQU TicsH, 30 ; 300Hz-Tics High
-.EQU TicsL, 29 ; 300Hz-Tics Low
-.EQU nTicsL, 28 ; wann ist die naechste Sekunde gemessen in 300Hz-Tics Low
-.EQU Status, 27 ; Bit 0: Funksignal
- ; Bit 1: kein Fehler im aktuellen Empfang
- ; Bit 2: kein Fehler in der aktuellen oder letzten Minute
-.EQU lHTicsL, 26 ; wann war die letzte Funk Low-High-Flanke in 300Hz-Tics Low
-.EQU Stunde, 0 ; anzuzeigende Stunde
-.EQU Minute, 1 ; anzuzeigende Minute
-.EQU Sekunde, 2 ; anzuzeigende Sekunde
+.EQU Spalte, 31 ; die anzuzeigende Spalte (als Bitmaske fuer PORTD)
+.EQU TicsH, 30 ; 300Hz-Tics High
+.EQU TicsL, 29 ; 300Hz-Tics Low
+.EQU nTicsL, 28 ; wann ist die naechste Sekunde gemessen in 300Hz-Tics Low
+.EQU Status, 27 ; Bit 0: Funksignal
+ ; Bit 1: kein Fehler im aktuellen Empfang
+ ; Bit 2: kein Fehler in der aktuellen oder letzten Minute
+.EQU lHTicsL, 26 ; wann war die letzte Funk Low-High-Flanke in 300Hz-Tics Low
+.EQU Stunde, 0 ; anzuzeigende Stunde
+.EQU Minute, 1 ; anzuzeigende Minute
+.EQU Sekunde, 2 ; anzuzeigende Sekunde
.EQU Funk0, 3
.EQU Funk1, 4
.EQU Funk2, 5
@@ -27,53 +27,53 @@
.EQU Funk6, 9
.EQU Funk7, 10
- rjmp RESET
- reti
- reti
- reti
- rjmp TIMER1COMPA ; Timer1 Compare Match A
- reti
- reti
- reti
- reti
+ rjmp RESET
reti
- reti
- reti
- reti
- reti
- reti
- reti
- reti
-
- RESET:
- ldi r16,lo8(RAMEND) ; Stackpointer initialisieren
- out SPL,r16
-
- ldi r16,0x80
- out CLKPR,r16
- ldi r16,0x00
- out CLKPR,r16 ; System-Vorteiler auf 1
-
- ldi r16,0x00
- out WDTCSR,r16 ; Watchdog aus
+ reti
+ reti
+ rjmp TIMER1COMPA ; Timer1 Compare Match A
+ reti
+ reti
+ reti
+ reti
+ reti
+ reti
+ reti
+ reti
+ reti
+ reti
+ reti
+ reti
+
+ RESET:
+ ldi r16,lo8(RAMEND) ; Stackpointer initialisieren
+ out SPL,r16
+
+ ldi r16,0x80
+ out CLKPR,r16
+ ldi r16,0x00
+ out CLKPR,r16 ; System-Vorteiler auf 1
+
+ ldi r16,0x00
+ out WDTCSR,r16 ; Watchdog aus
ldi r17,0xd0
ldi r16,0x55
out OCR1AH,r17
- out OCR1AL,r16 ; TimerB bis 0xd055 laufen lassen (= 300 Hz)
+ out OCR1AL,r16 ; TimerB bis 0xd055 laufen lassen (= 300 Hz)
ldi r16,0x09
- out TCCR1B,r16 ; no prescaler
+ out TCCR1B,r16 ; no prescaler
ldi r16,0x40
- out TIMSK,r16 ; Counter1 Output Compare A Match Interrupt Enable
+ out TIMSK,r16 ; Counter1 Output Compare A Match Interrupt Enable
- ldi r16,0x55
- out PORTB,r16 ; Muster auf PORTB (Zeilen)
- ldi r16,0x7c
- out PORTD,r16 ; 2x n.d., 2x Pull-up (Taster), Muster auf Spalten
- ldi r16,0xff
- out DDRB,r16 ; Ausgänge: PORTB (Zeilen)
- ldi r16,0x70
- out DDRD,r16 ; Ausgänge: PORTD4..6 (Spalten)
+ ldi r16,0x55
+ out PORTB,r16 ; Muster auf PORTB (Zeilen)
+ ldi r16,0x7c
+ out PORTD,r16 ; 2x n.d., 2x Pull-up (Taster), Muster auf Spalten
+ ldi r16,0xff
+ out DDRB,r16 ; Ausgänge: PORTB (Zeilen)
+ ldi r16,0x70
+ out DDRD,r16 ; Ausgänge: PORTD4..6 (Spalten)
ldi Spalte,0x10
ldi r16,0x12
@@ -95,9 +95,9 @@ main_loop:
low_high_Funkflanke:
mov r16,TicsL
- sub r16,lHTicsL ; die gemessene "low" Zeit ist der Abstand der letzten lh-Flanke
+ sub r16,lHTicsL ; die gemessene "low" Zeit ist der Abstand der letzten lh-Flanke
cpi r16,205
- brcc Funkfehler ; "low" > 2050ms -- hierzu ist *keine* Flanke vonnöten
+ brcc Funkfehler ; "low" > 2050ms -- hierzu ist *keine* Flanke vonnöten
sbis PIND,1
rjmp nach_Funkflanke
@@ -106,22 +106,22 @@ low_high_Funkflanke:
mov lHTicsL,TicsL
cpi r16,95
- brcs Funkfehler ; "low" < 950ms
+ brcs Funkfehler ; "low" < 950ms
cpi r16,105
- brcs neue_Funksekunde ; 950ms < "low" < 1050ms (= normale Sekunde)
+ brcs neue_Funksekunde ; 950ms < "low" < 1050ms (= normale Sekunde)
cpi r16,195
- brcs Funkfehler ; 1050ms < "low" < 1950ms
+ brcs Funkfehler ; 1050ms < "low" < 1950ms
rjmp neue_Funkminute
high_low_Funkflanke:
mov r16,TicsL
- sub r16,lHTicsL ; 10 vs. 20 ( = 100ms vs. 200ms)
+ sub r16,lHTicsL ; 10 vs. 20 ( = 100ms vs. 200ms)
cpi r16,26
- brcc Funkfehler ; high > 250ms -- hierzu ist *keine* Flanke vonnöten
+ brcc Funkfehler ; high > 250ms -- hierzu ist *keine* Flanke vonnöten
sbic PIND,1
rjmp nach_Funkflanke
@@ -129,7 +129,7 @@ high_low_Funkflanke:
cbr Status,0x01
cpi r16,5
- brcs Funkfehler ; high < 50ms
+ brcs Funkfehler ; high < 50ms
com r16
cpi r16,240
@@ -142,7 +142,7 @@ high_low_Funkflanke:
ror Funk1
ror Funk0
- sbrs Funk0,3 ; zu viele Bits
+ sbrs Funk0,3 ; zu viele Bits
rjmp nach_Funkflanke
Funkfehler:
@@ -167,11 +167,11 @@ neue_Funksekunde:
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"
+ 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:
@@ -203,21 +203,21 @@ neue_Sekunde:
neue_Funkminute:
bst Status,1
- sbr Status,0x02 ; der nächstminütige Empfang ist bisher ok
+ sbr Status,0x02 ; der nächstminütige Empfang ist bisher ok
- brtc Funk_initialisieren ; die letzte Minute enthielt schon Fehler
- sbrs Funk0,4 ; Bit -1: Start-bit da?
+ brtc Funk_initialisieren ; die letzte Minute enthielt schon Fehler
+ sbrs Funk0,4 ; Bit -1: Start-bit da?
rjmp Funk_initialisieren
- sbrc Funk0,5 ; Bit 0: 2.Start-bit da?
+ sbrc Funk0,5 ; Bit 0: 2.Start-bit da?
rjmp Funk_initialisieren
- mov r16,Funk2 ; Bits 11..18
+ mov r16,Funk2 ; Bits 11..18
lsr r16
eor r16,Funk2
- sbrs r16,6 ; Bit 17 xor Bit 18 -> ME(S)Z ok?
+ sbrs r16,6 ; Bit 17 xor Bit 18 -> ME(S)Z ok?
rjmp Funk_initialisieren
- sbrs Funk3,1 ; Bit 20: Zeit-Start-bit
+ sbrs Funk3,1 ; Bit 20: Zeit-Start-bit
rjmp Funk_initialisieren
mov r16,Funk3
@@ -254,10 +254,10 @@ neue_Funkminute:
clr Sekunde
- sbr Status,0x04 ; die empfangene Minute ist ok
+ sbr Status,0x04 ; die empfangene Minute ist ok
mov nTicsL,TicsL
- subi nTicsL,(256-100) ; die nächste Sekunde startet in genau 100 TicsL
+ subi nTicsL,(256-100) ; die nächste Sekunde startet in genau 100 TicsL
neue_Funkminute_Ende:
rjmp Funk_initialisieren
@@ -284,14 +284,14 @@ neue_Stunde:
neuer_Tag:
clr Stunde
-
+
rjmp main_loop
TIMER1COMPA:
- push r16
- in r16,SREG
- push r16
- push r17
+ push r16
+ in r16,SREG
+ push r16
+ push r17
ldi r17,0x7c
out PORTD,r17
@@ -323,13 +323,13 @@ nach_Funkeinfuegung:
cbr r17,0x83
out PORTB,r16
out PORTD,r17
- pop r17
- pop r16
- out SREG,r16
- pop r16
+ pop r17
+ pop r16
+ out SREG,r16
+ pop r16
reti
-bcd_to_bin: ; input/output: r18; tmp: r19
+bcd_to_bin: ; input/output: r18; tmp: r19
mov r19,r18
cbr r18,0xf0
swap r19
@@ -341,7 +341,7 @@ bcd_to_bin: ; input/output: r18; tmp: r19
add r18,r19
ret
-checksum: ; input: r18; tmp: r19; output: T-Flag
+checksum: ; input: r18; tmp: r19; output: T-Flag
mov r19,r18
swap r19
eor r18,r19