/* * Fernbedienung.asm * * Created: 08.10.2015 14:35:11 * Author: Erich */ .INCLUDE "tn2313def.inc" .EQU Spalte, 31 .EQU TicsH, 30 .EQU TicsL, 29 .EQU nTicsL, 28 .EQU Stunde, 0 .EQU Minute, 1 .EQU Sekunde, 2 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,0x0c 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,61 brcs main_loop neue_Minute: clr Sekunde inc Minute mov r16,Minute cpi r16,61 brcs main_loop neue_Stunde: clr Sekunde clr Minute inc Stunde mov r16,Stunde cpi r16,25 brcs main_loop clr Stunde rjmp main_loop TIMER1COMPA: push r16 in r16,SREG push r16 push r17 ldi r17,0x07 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 ori r17,0x0c out PORTB,r16 out PORTD,r17 pop r17 pop r16 out SREG,r16 pop r16 reti