Mit dem ret wollte ich bezwecken, dass er wieder dahin springt, wo er hergekommen ist. Also in dem Falle hier:
Code:
pruefSek:
	push tmp					;tmp sichern
	in tmp, SREG
	push tmp					;SREG sichern
		rjmp tonPruefen			;springe zu "tonPruefen"
		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 (10000) speichern ->
		out TCNT1L, tmp			;"TCNT1H" und TCNT2L"
	pop tmp
	out SREG, tmp				;SREG wiederholen
	pop  tmp					;tmp wiederholen
	reti						;Spring wieder dahin, wo du hergekommen bist

;Hier wird Z-Zeiger um 1 erhöht. Es wird hier auch verglichen,
;ob der letzte Ton erreicht, wenn ja, dann springt er zu "endeTon"
tonPruefen:
	lpm                  		;Daten von tonleiter1: holen 
   	adiw ZL,1            		;Z um 1 erhöhen, nächstes Byte 
   	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 
	breq endeTon         		;springe zu "endeTon:", wenn letztes Byte ausgelesen 
	ret							;zurück, wo du hergekommen bist

;Hier wird der Timer gestoppt, indem wir den Prescaler auf 0 setzen
endeTon:
	ldi tmp, (0<<CS02)         	;Timer stoppen 
   	out TCCR0, tmp
	ret							;zurück wo du hergekommen bist
Springt er beim ersten ret wieder in die Zeile hier:
ldi tmp, HIGH(time1) ;Für den Timer1 (16Bit) benötigen
also 1 unter dem rjmp-Befehl, wo er ja vorher weggesprungen ist.

PS: Traurig bin ich nicht, will nur nicht, dass du böse bist *g* Weiß ja nicht, wie du die Hände übern Kopf zusammenschlägst und dir denkst "Wie kann man nur so blöd sein"