Stelle Lauflicht auf Rotate-Mechanismus um
This commit is contained in:
39
main.asm
39
main.asm
@@ -16,13 +16,20 @@
|
||||
.org 0x0020
|
||||
rjmp overflow_handler
|
||||
|
||||
.macro check_led
|
||||
cpi active_led, @0
|
||||
brne PC+3
|
||||
ldi setter, (1<<@0)
|
||||
out PORTD, setter
|
||||
;========
|
||||
; Macros
|
||||
;========
|
||||
|
||||
.macro left_to_right
|
||||
in active_led, PORTD
|
||||
rol active_led
|
||||
brcc PC+2
|
||||
ldi active_led, 0b00000001
|
||||
out PORTD, active_led
|
||||
.endmacro
|
||||
|
||||
;========
|
||||
|
||||
init:
|
||||
;--
|
||||
; Output Ports definieren
|
||||
@@ -42,26 +49,15 @@ init:
|
||||
;--
|
||||
; Definiere Startzustand
|
||||
;----
|
||||
ldi active_led, 0
|
||||
ldi setter, 0
|
||||
out TCNT0, setter ; Timer/Counter explizit mit 0 initialisieren
|
||||
ldi setter, 0b00000001
|
||||
out PORTD, setter
|
||||
|
||||
main:
|
||||
clr setter
|
||||
out PORTD, setter ; Alle LEDs erstmal aus
|
||||
|
||||
;--
|
||||
; Schalte aktuell aktive LED gezielt wieder an
|
||||
; Dreh Dräumchen und lass den Timer-Interrupt die Show leiten
|
||||
;----
|
||||
check_led 0
|
||||
check_led 1
|
||||
check_led 2
|
||||
check_led 3
|
||||
check_led 4
|
||||
check_led 5
|
||||
check_led 6
|
||||
check_led 7
|
||||
|
||||
rjmp main
|
||||
|
||||
overflow_handler:
|
||||
@@ -69,10 +65,7 @@ overflow_handler:
|
||||
cpi overflows, 246 ; bei ~980 Überläufe/Sekunde entsprechen 245 Überläufe ca. 250ms
|
||||
brne overflow_handler_exit ; early Return wenn Schwellenwert noch nicht erreicht
|
||||
clr overflows ; Überlaufzähler kontrolliert zurücksetzen
|
||||
inc active_led ; nächste LED aktivieren
|
||||
cpi active_led, 8 ; prüfen ob LED-Zähler überzählt wurde
|
||||
brne overflow_handler_exit ; early Return solange die aktive LED im erlaubten Bereich liegt
|
||||
ldi active_led, 0 ; LED-Zähler kontrolliert zurücksetzen
|
||||
left_to_right
|
||||
overflow_handler_exit:
|
||||
reti
|
||||
|
||||
|
||||
Reference in New Issue
Block a user