From 0d6d8dbd2a964449b13a8727dbdf29b878924230 Mon Sep 17 00:00:00 2001 From: "M.Schirmer" Date: Wed, 4 Jun 2025 14:07:44 +0200 Subject: [PATCH] =?UTF-8?q?Schlie=C3=9Fe=20=C3=9Cbungsziele=20der=20Stage?= =?UTF-8?q?=203=20ab?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 +++--- main.asm | 79 +++++++++++++++---------------------------------------- 2 files changed, 25 insertions(+), 62 deletions(-) diff --git a/README.md b/README.md index 04bebb9..28e8e29 100644 --- a/README.md +++ b/README.md @@ -12,10 +12,10 @@ ## Stage 3: -- [ ] Richtungswechsel via Taster Klick -- [ ] Animation läuft unbeirrt weiter bei Taster-Klick -- [ ] Wechsel von L2R auf R2L bei Taster-Links-Klick -- [ ] Wechsel von R2L auf L2R bei Taster-Rechts-Klick +- [x] Richtungswechsel via Taster Klick +- [x] Animation läuft unbeirrt weiter bei Taster-Klick +- [x] Wechsel von L2R auf R2L bei Taster-Links-Klick +- [x] Wechsel von R2L auf L2R bei Taster-Rechts-Klick ## Stage 4: diff --git a/main.asm b/main.asm index e4e5b36..b5cb1d8 100644 --- a/main.asm +++ b/main.asm @@ -71,15 +71,23 @@ loop: overflow_handler: inc overflows cpi overflows, 246 ; bei ~980 Überläufe/Sekunde entsprechen 245 Überläufe ca. 250ms - brne ret_overflow_handler ; early Return wenn Schwellenwert noch nicht erreicht + brne early_exit ; early Return wenn Schwellenwert noch nicht erreicht clr overflows ; Überlaufzähler kontrolliert zurücksetzen - in btn_status, PINB + in btn_status, PINB ; Aktuellen Button Zustand einlesen + ;-- + ; Geh direkt zur Animationslogik wenn + ; kein Button gedrückt + ; oder + ; wenn der gedrückt Button dem der aktuellen + ; Animation entspricht + ;---- cpi btn_status, 0 - breq run_animation + breq run_animation ; kein Button gedrückt cp cur_direction, btn_status - breq run_animation + breq run_animation ; Animation bildet aktuellen Button-Status bereit ab + ;------ ;-- ; Setze definierten Start für den @@ -96,70 +104,25 @@ overflow_handler: ldi cur_direction, R2L out PORTD, setter - ; mov cur_direction, btn_status - ; ldi setter, 0b10000000 - ; cpi btn_status, RBTN_PRESSED - ; breq PC+2 - ; ldi setter, 0b00000001 - ; out PORTD, setter ;------ run_animation: cpi cur_direction, L2R - brne PC+3 + brne check_r2l left_to_right active_led reti + check_r2l: cpi cur_direction, R2L - brne PC+3 + brne show_err_code right_to_left active_led reti - ldi setter, 0b00011000 - out PORTD, setter +early_exit: + reti - ;==================== - - ; cpi btn_status, R2L_PRESSED - ; brne PC+3 - ; ldi active_led, 0b00000001 - ; right_to_left active_led - ; - ; cpi btn_status, R2L_PRESSED - ; brne PC+3 - ; ldi active_led, 0b10000000 - ; left_to_right active_led - ; - ; cpi btn_status, 0xFF - ; brne PC+3 - ; ldi active_led, 0b00000001 - ; left_to_right active_led - - ;==================== - - ; cpi btn_status, 0x00 - ; brne PC+4 - ; ldi setter, 0b10101010 - ; out PORTD, setter - ; rjmp ret_overflow_handler - ; - ; cpi btn_status, RBTN_PRESSED - ; brne PC+5 - ; ldi setter, 0b00000001 - ; out PORTD - ; right_to_left active_led - ; rjmp ret_overflow_handler - ; - ; cpi btn_status, LBTN_PRESSED - ; brne PC+4 - ; ldi active_led, 0b00100000 - ; ; left_to_right active_led - ; out PORTD, active_led - ; rjmp ret_overflow_handler - ; - ; ser setter - ; out PORTD, setter - - ret_overflow_handler: - reti +show_err_code: + ldi setter, 0b00011000 + out PORTD, setter + reti