Polecenie to :"zapal wszystkie diody. Po kliknięciu przycisku diody mają się gasić po jednej od prawej strony do lewej. Kiedy zgaśnie ostatnia - zaczynamy od nowa. Obsłużyć odbicia.
Działało do momentu gaszenia diod jednak nie gasły po jednej, po ile chciały i w dziwnych kombinacjach. Tutaj wchodzi obsługa odbić, której dotyczy ma pogrubiony kod. Niestety kompletnie nie jestem go pewna, a już nie mam gdzie tego sprawdzić. Próbowałam emulatory żeby sprawdzić zachowanie ale żaden nie chciał się poprawnie zainstalować i działać.
Mam taki oto kod
.include "m32def.inc"
.org 0
jmp start
.org 2
jmp procedure_przerwanie
;konfiguracja
start:
CLI
ldi R16, HIGH(RAMEND)
out SPH, R16
ldi R16, LOW(RAMEND)
out SPL, R16
LDI R16, 0xFF
OUT DDRA, R16
OUT PORTA, R16
SBI PORTD, 2
LDI R16, (1<<ISC01)
OUT MCUCR, R16
LDI R16, (1<<INT0)
OUT GICR, R16
LDI R17, 0XFF
SEI
main:
loop:
LDI R16, 0x00
OUT PORTA, R16
call procedure_delay
OUT PORTA, R17
call procedure_delay
rjmp main
procedure_delay:
ldi r18, 5
ldi r19, 75
ldi r20, 191
L1: dec r20
brne L1
dec r19
brne L1
dec r18
brne L1
nop
ret
procedure_przerwanie:
IN R30, SREG
PUSH R30
PUSH R27
PUSH R28
PUSH R29
LSL R17
SBRC R16, 1
LDI R18, 2
RCALL procedure_delay
POP R29
POP R28
POP R27
POP R30
OUT SREG, R30
RETI
Mam wątpliwości co do części kodu "procedure_przerwanie. Czy jest poprawna?