Hmm...ich hab das jetzt so gelöst:
Sorry, versteh die Befehle cp und cpc aber leider nicht (wegen untere Bytes und obere?) Aber mein Code geht auch.Code:;Programm ;CDurTonleiter rauf und runter spielen .include "m8def.inc" .def tmp = r16 ;Mein Universallregister .def lpm_reg = r0 ;Mein lpm-Register .def zaehler = r17 ;Mein Zählregister, prüft, ob das Wort zu Ende ist .org 0x000 rjmp reset ;Interruptvektor "reset:" reset: ;Stack einrichten ldi tmp, HIGH(RAMEND) ;HIGH-Byte der obersten RAM-Adresse out SPH, tmp ldi tmp, LOW(RAMEND) ;Low-Byte der obersten RAM-Adresse out SPL, tmp ldi ZH, HIGH(daten1 * 2) ldi ZL, LOW(daten1 * 2) ldi zaehler, 0b00000000 ;Zähler auf 0 setzen sei ;Interrupts zulassen loop: cpi zaehler, 0b00000110 ;Vergleich Zähler mit 6 breq loop ;wenn Zähler != 6, dann wieder zu "loop:" springen einlesen: lpm ;nächstes Byte des String nach r0 einlesen mov tmp, lpm_reg ;Inhalt von R0 nach "tmp" kopieren adiw ZL,1 ;Adresse des Z-Pointers um 1 erhöhen inc zaehler ;Zähler um 1 erhöhen rjmp loop ;wieder zurück zu "loop:" daten1: .db "Hallo!" ;immer eine gerade Anzahl an Bytes
Nachteil ist eben, dass von Anfang an klar sein muss, aus wieviel Zeichen dsa Wort besteht.
[edit]
Ich bin auch mal eben was essen.







Zitieren

Lesezeichen