Hmm...bin kurz davor, dass es geht, aber irgendwie will es noch nicht. Teste die ganze Zeit im Simulator. Er macht aber nie den Timer aus, also er springt nie da rein, wo er den Timer0 abestellen soll.
Code:
pruefSek:
	push tmp					;tmp sichern
	in tmp, SREG
	push tmp					;SREG sichern
		ldi tmp, HIGH(time1)	;Für den Timer1 (16Bit) benötigen
		out	TCNT1H, tmp			;wir 2 Register, in denen wir den Wert
		ldi tmp, LOW(time1)		;für die 1 Sekunde speichern ->
		out TCNT1L, tmp			;"TCNT1H" und TCNT2L"
			lpm                  		;Daten von tonleiter1: holen 
			sbrc tonleiterEnde, 0	;Ist tonleiterEnde = 0?
			rjmp subtrahiereZ	;Wenn tonleiter = 1, dann subtrahiere Z um 1

addiereZ:
	adiw ZL, 1            		;Z um 1 erhöhen
	rjmp pruefSek2				;zu "pruefSek2:" springen

subtrahiereZ:
	sbiw ZL, 1 					;Z um 1 erniedrigen

pruefSek2:
	ldi tmp, LOW  ((tonleiter1 * 2) + daten_laenge)	;vergleiche LOW-Byte 
   	cp ZL, tmp 
	ldi tmp, HIGH ((tonleiter1 * 2) + daten_laenge)	;vergleiche HIGH-Byte 
	cpc ZH, tmp 
	brne pruefTonaus								;zu "pruefTonaus:" springen
	sbr tonleiterEnde, 1							;Hilfsvariable.1 auf 1 setzen
	
pruefTonaus:
	cp ZL, tmp										;Ist Anfang erreicht?
	brne regwiederholen
	ldi tmp, (0<<CS02)      						;JA -> Timer0 abstellen
	out TCCR0, tmp

regwiederholen:
	pop tmp
	out SREG, tmp				;SREG wiederholen
	pop  tmp					;tmp wiederholen
	reti
Er müsste aber eigentlich reinspringen, denn irgendwann ist doch ZL wieder auf 0, oder?