
Zitat von
cipoint
Ist das programmiertechnisch und stilistisch richtig?
Programmiertechnisch schon, über den Stil und die Lesbarkeit kann man sicher streiten.
Anstatt:
Code:
ldi temp, 0b00000001
out TCCR0, temp
ldi temp, 0b00000001
out TIMSK, temp
würde ich in dem Teil das folgende schreiben:
Code:
ldi temp, (1<<CS00)
out TCCR0, temp
ldi temp, (1<<TOIE0)
out TIMSK, temp
Das ganze ist meiner Ansicht nach vor allem besser lesbar.
Im übrigen sollte man in Interupt Routinen prinzipiell das Status Register SREG sichern. dieses kann z.B. wie folgt erfolgen:
Code:
timer:
push temp
in temp, SREG
push temp
sbic PORTD, PD5
rjmp LEDoff
sbi PORTD, PD5
rjmp timer_exit
LEDoff:
cbi PORTD, PD5
timer_exit:
pop temp
out SREG, temp
pop temp
reti
Dieses ist insbesondere dann wichtig, wenn in deinem Loop und in der ISR Operationen durchgeführt werden, bei denen Flags im SREG verändert werden können.
In deinem Programmablaufplan würde ich die Timer Interupt Routine komplett entkoppelt zeichnen. Zum einen, weil der µC nach dem Interupt exakt dort weitermacht, wo er aufgehört hat und zum anderen, weil es später weniger verwirrend wirkt.
Grüße,
Hanni
Lesezeichen