From a4b3a1f2ad3ad2b0cf9108c03b2c588edeafa1cb Mon Sep 17 00:00:00 2001 From: "M.Schirmer" Date: Sat, 31 May 2025 23:01:47 +0200 Subject: [PATCH] Stelle Lauflicht auf Rotate-Mechanismus um --- main.asm | 39 ++++++++++++++++----------------------- 1 file changed, 16 insertions(+), 23 deletions(-) diff --git a/main.asm b/main.asm index c754c2c..c1fdcb3 100644 --- a/main.asm +++ b/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