summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Binaeruhr.asm334
1 files changed, 167 insertions, 167 deletions
diff --git a/Binaeruhr.asm b/Binaeruhr.asm
index 9a18a11..8d7eb53 100644
--- a/Binaeruhr.asm
+++ b/Binaeruhr.asm
@@ -1,167 +1,167 @@
-/*
- * Fernbedienung.asm
- *
- * Created: 08.10.2015 14:35:11
- * 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
-
- rjmp RESET
- reti
- 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)
- ldi r16,0x09
- out TCCR1B,r16 ; no prescaler
- ldi r16,0x40
- 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 Spalte,1
- ldi r16,0x12
- mov Stunde,r16
- ldi r16,0x34
- mov Minute,r16
- ldi r16,0x56
- mov Sekunde,r16
-
- ldi nTicsL,100
-
- sei
-
-main_loop:
- cp nTicsL,TicsL
- brcc main_loop
- mov r16,nTicsL
- subi r16,0x80
- mov r17,TicsL
- subi r17,0x80
- cp r16,r17
- brcc main_loop
-
-neue_Sekunde:
-
- ldi r16,100
- add nTicsL,r16
-
- sbis PIND,2
- rjmp neue_Stunde
- sbis PIND,3
- rjmp neue_Minute
-
- inc Sekunde
- mov r16,Sekunde
- cpi r16,60
- brcs main_loop
-
-neue_Minute:
-
- clr Sekunde
- inc Minute
- mov r16,Minute
- cpi r16,60
- brcs main_loop
-
-neue_Stunde:
-
- clr Sekunde
- clr Minute
- inc Stunde
- mov r16,Stunde
- cpi r16,24
- brcs main_loop
-
- clr Stunde
-
- rjmp main_loop
-
-TIMER1COMPA:
- push r16
- in r16,SREG
- push r16
- push r17
- ldi r17,0x7c
- out PORTD,r17
-
- inc Spalte
- cpi Spalte,2
- brne nicht_Stunde_Anzeigen
- ldi r17,0x60
- mov r16,Stunde
- rjmp anzeigen
-nicht_Stunde_Anzeigen:
- cpi Spalte,3
- brne nicht_Minute_Anzeigen
- ldi r17,0x50
- mov r16,Minute
- rjmp anzeigen
-nicht_Minute_Anzeigen:
- ldi r17,0x30
- mov r16,Sekunde
- subi Spalte,3
- inc TicsL
- brne anzeigen
- inc TicsH
-anzeigen:
- com r16
- sbr r16,0x80
- sbic PIND,1
- cbr r16,0x80
- ori r17,0x0c
- out PORTB,r16
- out PORTD,r17
- pop r17
- pop r16
- out SREG,r16
- pop r16
- reti
+/*
+ * Fernbedienung.asm
+ *
+ * Created: 08.10.2015 14:35:11
+ * 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
+
+ rjmp RESET
+ reti
+ 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)
+ ldi r16,0x09
+ out TCCR1B,r16 ; no prescaler
+ ldi r16,0x40
+ 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 Spalte,1
+ ldi r16,0x12
+ mov Stunde,r16
+ ldi r16,0x34
+ mov Minute,r16
+ ldi r16,0x56
+ mov Sekunde,r16
+
+ ldi nTicsL,100
+
+ sei
+
+main_loop:
+ cp nTicsL,TicsL
+ brcc main_loop
+ mov r16,nTicsL
+ subi r16,0x80
+ mov r17,TicsL
+ subi r17,0x80
+ cp r16,r17
+ brcc main_loop
+
+neue_Sekunde:
+
+ ldi r16,100
+ add nTicsL,r16
+
+ sbis PIND,2
+ rjmp neue_Stunde
+ sbis PIND,3
+ rjmp neue_Minute
+
+ inc Sekunde
+ mov r16,Sekunde
+ cpi r16,60
+ brcs main_loop
+
+neue_Minute:
+
+ clr Sekunde
+ inc Minute
+ mov r16,Minute
+ cpi r16,60
+ brcs main_loop
+
+neue_Stunde:
+
+ clr Sekunde
+ clr Minute
+ inc Stunde
+ mov r16,Stunde
+ cpi r16,24
+ brcs main_loop
+
+ clr Stunde
+
+ rjmp main_loop
+
+TIMER1COMPA:
+ push r16
+ in r16,SREG
+ push r16
+ push r17
+ ldi r17,0x7c
+ out PORTD,r17
+
+ inc Spalte
+ cpi Spalte,2
+ brne nicht_Stunde_Anzeigen
+ ldi r17,0x60
+ mov r16,Stunde
+ rjmp anzeigen
+nicht_Stunde_Anzeigen:
+ cpi Spalte,3
+ brne nicht_Minute_Anzeigen
+ ldi r17,0x50
+ mov r16,Minute
+ rjmp anzeigen
+nicht_Minute_Anzeigen:
+ ldi r17,0x30
+ mov r16,Sekunde
+ subi Spalte,3
+ inc TicsL
+ brne anzeigen
+ inc TicsH
+anzeigen:
+ com r16
+ sbr r16,0x80
+ sbic PIND,1
+ cbr r16,0x80
+ ori r17,0x0c
+ out PORTB,r16
+ out PORTD,r17
+ pop r17
+ pop r16
+ out SREG,r16
+ pop r16
+ reti