Gast
#2555024
Ich bekomme folgende Fehlermeldung: Error : adiw can only use
registers R24, R26, R28 or R30
Soweit ich das verstehe, wird in den Z Registern die Anfangs-Adresse der
db gespeichert. Wie Funktioniert da genau die Zeigererhöhung? Wird dabei
die Adresse des nächsten zeichens ins Z Register geladen?
Wie kann ich den Befehl adiw "umgehen". Eine erhöhung im zl wird wohl
nicht reichen oder? Oder muss ich nur noch kontrollieren falls es im zl
einen Überlauf gibt, und diesen dann im zh "übertragen".
USART_TX_STRING:
lpm ; nächstes Byte aus dem Flash laden
and r0,r0 ; = Null?
breq string_ende ; wenn ja, -> Ende
warten:
lds temp, UCSR0A
sbrs temp, UDRE0 ; Warten bis Senden möglich
rjmp warten
sts UDR0, r0
ldi temp, 0x01
adiw zl:zh,1 ; Zeiger erhöhen
rjmp USART_TX_STRING ; nächstes Zeichen bearbeiten
string_ende:
ret ; zurück zum Hauptprogramm