Zitat 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