In Deiner "Start-Schleife" setzt Du Z immer auf das erste Zeichen
zurück.
Desweiteren hast Du eine Abfrage auf das "0-Byte" vergessen.
Das ganze muss so aussehen, damit es alle Zeichen ausgibt:
start:
ldi ZL, LOW(text*2)
ldi ZH, HIGH(text*2)
start1:
lpm
tst R0 ;Text-Ende erreicht?
breq Ende ;Dann Ende.
mov temp1, R0
rcall pause
rcall lcd_data
adiw ZL, 1
rcall pause
rjmp start1
Ende:
rjmp Ende
Mach es doch lieber gleich als Unterprogramm:
start:
ldi ZL, LOW(text*2)
ldi ZH, HIGH(text*2)
rcall Print
Stop:
rjmp Stop
....
....
Print:
lpm temp1,Z+ ;Zeichen von Adresse Z in temp1 und Z+1
tst temp1 ;Text-Ende erreicht?
breq PrintEnde ;Dann Ende.
rcall pause
rcall lcd_data
rcall pause
rjmp start1
2 mal eine Pause wird eigentlich nicht benötigt.
Normalerweise Gibt man ein Zeichen aus und dann kommt EINE Pause.
Man kann das natürlich auch umdrehen, also zuerst ne Pause und dann die
Ausgabe. Aber nicht unbedingt vorher und nachher.
Gruß
Andi