Ja, hab vorher in C, genauer gesagt in C++ programmiert.
Also muss ich das dann so machen? Denn eine Sprungmarke brauch ich ja, damit ich den Timer dann abstelle, wenn er das Ende erreicht hat, oder?
Doch dann hab ich ja 3 Zeilen doppelt. Die 3 Zeilen zum Wiederholen der Register vom Stack. Ist also auch nicht die beste Möglichkeit.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 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 pop tmp out SREG, tmp ;SREG wiederholen pop tmp ;tmp wiederholen reti ;Spring wieder dahin, wo du hergekommen bist endeTon: ldi tmp, (0<<CS02) ;Timer stoppen out TCCR0, tmp pop tmp out SREG, tmp ;SREG wiederholen pop tmp ;tmp wiederholen reti






Zitieren

Lesezeichen