Speichere Zwischenstand
This commit is contained in:
124
main.asm
124
main.asm
@@ -10,6 +10,13 @@
|
|||||||
.def setter = R16
|
.def setter = R16
|
||||||
.def overflows = R17
|
.def overflows = R17
|
||||||
.def active_led = R18
|
.def active_led = R18
|
||||||
|
.def btn_status = R19
|
||||||
|
.def cur_direction = R20
|
||||||
|
|
||||||
|
.equ L2R = 0x01
|
||||||
|
.equ R2L = 0b00000100
|
||||||
|
.equ RBTN_PRESSED = 0b00000100
|
||||||
|
.equ LBTN_PRESSED = 0b00000001
|
||||||
|
|
||||||
.org 0x0000
|
.org 0x0000
|
||||||
rjmp init
|
rjmp init
|
||||||
@@ -23,7 +30,18 @@ init:
|
|||||||
; Output Ports definieren
|
; Output Ports definieren
|
||||||
;----
|
;----
|
||||||
ser setter
|
ser setter
|
||||||
out DDRD, setter ; Alle LEDs standardmäßig aus
|
out DDRD, setter ; Alle PortD Pins als OUTPUT
|
||||||
|
|
||||||
|
;--
|
||||||
|
; Taster Pins definieren
|
||||||
|
;----
|
||||||
|
; ldi setter, 0b11111010
|
||||||
|
ser setter
|
||||||
|
out DDRB, setter ; PB0 und PB2 als Inputs definieren
|
||||||
|
; ldi setter, 0b00000101
|
||||||
|
; out PORTB, setter ; Interne Pullups aktivieren
|
||||||
|
clr setter
|
||||||
|
out PORTB, setter
|
||||||
|
|
||||||
;--
|
;--
|
||||||
; Timer/Counter konfigurieren
|
; Timer/Counter konfigurieren
|
||||||
@@ -40,20 +58,108 @@ init:
|
|||||||
ldi setter, 0
|
ldi setter, 0
|
||||||
out TCNT0, setter ; Timer/Counter explizit mit 0 initialisieren
|
out TCNT0, setter ; Timer/Counter explizit mit 0 initialisieren
|
||||||
ldi setter, 0b00000001
|
ldi setter, 0b00000001
|
||||||
out PORTD, setter
|
out PORTD, setter ; erste LED einschalten
|
||||||
|
clr btn_status ; initialer Status = kein Taster gedrückt
|
||||||
|
ldi cur_direction, L2R ; initial mit Laufrichtung von links nach rechts starten
|
||||||
|
|
||||||
main:
|
loop:
|
||||||
;--
|
;--
|
||||||
; Dreh Dräumchen und lass den Timer-Interrupt die Show leiten
|
; Dreh Dräumchen und lass den Timer-Interrupt die Show leiten
|
||||||
;----
|
;----
|
||||||
rjmp main
|
rjmp loop
|
||||||
|
|
||||||
overflow_handler:
|
overflow_handler:
|
||||||
inc overflows
|
inc overflows
|
||||||
cpi overflows, 246 ; bei ~980 Überläufe/Sekunde entsprechen 245 Überläufe ca. 250ms
|
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
|
brne ret_overflow_handler ; early Return wenn Schwellenwert noch nicht erreicht
|
||||||
clr overflows ; Überlaufzähler kontrolliert zurücksetzen
|
clr overflows ; Überlaufzähler kontrolliert zurücksetzen
|
||||||
right_to_left active_led
|
in btn_status, PINB
|
||||||
overflow_handler_exit:
|
|
||||||
|
cpi btn_status, 0
|
||||||
|
breq run_animation
|
||||||
|
|
||||||
|
cp cur_direction, btn_status
|
||||||
|
breq run_animation
|
||||||
|
|
||||||
|
;--
|
||||||
|
; Setze definierten Start für den
|
||||||
|
; Laufrichtungswechsel
|
||||||
|
;----
|
||||||
|
cpi btn_status, LBTN_PRESSED
|
||||||
|
brne PC+3
|
||||||
|
ldi setter, 0b10000000
|
||||||
|
ldi cur_direction, L2R
|
||||||
|
|
||||||
|
cpi btn_status, RBTN_PRESSED
|
||||||
|
brne PC+3
|
||||||
|
ldi setter, 0b00000001
|
||||||
|
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
|
||||||
|
left_to_right active_led
|
||||||
|
reti
|
||||||
|
|
||||||
|
cpi cur_direction, R2L
|
||||||
|
brne PC+3
|
||||||
|
right_to_left active_led
|
||||||
|
reti
|
||||||
|
|
||||||
|
ldi setter, 0b00011000
|
||||||
|
out PORTD, setter
|
||||||
|
|
||||||
|
;====================
|
||||||
|
|
||||||
|
; 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
|
reti
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user