Danke erstmal für das Programm.
Nur würden mich ein paar Funktionen interessieren.

Warum werden OCR1AH, OCR1AL, OCR1BH und OCR1BL auf 0 gesetzt?

Und was wird hier gemacht?
Code:
         ldi      temp,   (1 << WGM10) | (1 << COM1A1) | (1 << COM1B1)
         out      TCCR1A,   temp
         ldi      temp,   (1 << CS11)
         out      TCCR1B,   temp