Mit dem ret wollte ich bezwecken, dass er wieder dahin springt, wo er hergekommen ist. Also in dem Falle hier:
Springt er beim ersten ret wieder in die Zeile 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
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"![]()







Zitieren

Lesezeichen