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.
Er müsste aber eigentlich reinspringen, denn irgendwann ist doch ZL wieder auf 0, oder?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






Zitieren

Lesezeichen