.INCLUDE "m8def.inc" .DEF workreg = R16 ;Arbeitsregister definieren .DEF comph = R18 ;Vergleichsregister HIGH definieren .DEF compl = R19 ;Vergleichsregister LOW als R1en .DEF sekunde = R20 ;R20 als Sekundenregister "sekunde" definieren .DEF minute = R21 ;R21 als Minutenregister "minute" definieren .DEF stunde = R22 ;R22 als Stundenregister "stunde" definieren .DEF zaehlen = R25 ;R25 als Zählregister "zaehlen" zum "zählen" der Anzahl der Timer-Matches definieren .DEF temp = R17 .DEF vergl = R24 .MACRO Uhr1 ;Makro "Uhr1" erstellen clr sekunde ;Sekunden auf 0 setzen und inc minute ;Minute um 1 erhöhen cpi minute, 60 ;Minuten = 60? brlo tictac1 ;wenn nicht, Sprung zu tictac1 Uhr2 .ENDMACRO ;Ende des Markos .MACRO Uhr2 ;Makro "Uhr2" erstellen inc stunde ;Stunde erhöhen cpi stunde, 12 ;Stunde = 12? brlo tictac1 ;wenn nicht, Sprung zu tictac1 .ENDMACRO ;Ende des Markos .CSEG ;Anfang des Programmierbereichs .ORG 0x000 ;Reset Direktive rjmp setup ;Sprung zum Setup ;.ORG INT0addr ;Interrupt für externes Signal an INT0 (PORTD2) ; rjmp StundeTaste ;Ziel bei Auslösen des Interrupts: StundeTaste ; .ORG INT1addr ;Interrupt für externes Signal an INT1 (PORTD3) ; rjmp MinuteTaste ;Ziel bei Auslösen des Interrupts: MinuteTaste .ORG OC1Aaddr ;Timer Compare Handler rjmp tictac ;Interruptziel "tictac" bei Erreichen des Timers des Compare-Werts setup: ldi workreg, LOW(RAMEND) ;Stapel anlegen out SPL, workreg ldi workreg, HIGH(RAMEND) out SPH, workreg ldi workreg, 0b11111111 ;Arbeitsregister vollständig aktivieren out DDRD, workreg ;PORTB auf Ausgang setzen out DDRC, workreg ;PORTC auf Ausgang setzen clr sekunde ;Sekunde auf 0 stellen clr minute ;Minute auf 0 stellen out PORTC, minute ;Mnute auf PORTB ausgeben clr stunde ;Stunde auf 0 stellen out PORTD, stunde ;Stunde auf PORTD ausgeben clr zaehlen ;Zählregister auf 0 setzen ldi comph, HIGH(39999) ;Vergleichsregister HIGH den Wert 39999 geben out OCR1AH, comph ;Timer 1 Output Compare A Match Interrupt (HIGH) ldi compl, LOW(39999) ;Vergleichsregister LOW den Wert 39999 geben out OCR1AL, compl ;Timer 1 Output Compare A Match Interrupt (LOW) ldi workreg, (1<