Hallo,
Zum Verständnis:
Mein Code funktioniert aber ich wollte ihn weiter optimieren/kürzen.
Das Codeschnipsel um das es geht ist eine Ausgabe eines Strings auf das 
LCD.
Einmal vom Programmspeicher und einmal vom SRAM.
Der Z-Pointer zeigt auf den Speicher - mit 0 endet der String.
Erst mal der funktionierende Code:
| 1 | LCD_string:  lpm    accu,z+    
 | 
| 2 |              tst    accu          ;ab hier gleich
 | 
| 3 |              breq   LCD_end
 | 
| 4 |              rcall  LCD_data
 | 
| 5 |              rjmp   pc-4
 | 
| 6 | 
 | 
| 7 | LCD_stringram:  
 | 
| 8 |              ld     accu,z+
 | 
| 9 |              tst    accu           ;mit diesem Segment
 | 
| 10 |              breq   LCD_end
 | 
| 11 |              rcall  LCD_data
 | 
| 12 |              rjmp   pc-4
 | 
| 13 | 
 | 
| 14 | LCD_end:    ret
 | 
Der einzige Unterschied ist der Befehl lpm zu ld.
Meine Idee war dass ich ein Flag setze um zu unterscheiden von wo ich 
den String lese.
| 1 | LCD_string:  
 | 
| 2 |     sbrc    flags,ram
 | 
| 3 |     ld      accu,z+
 | 
| 4 |     sbrs    flags,ram
 | 
| 5 |     lpm     accu,z+
 | 
| 6 |     tst     accu
 | 
| 7 |     breq    LCD_end
 | 
| 8 |     rcall   LCD_data  
 | 
| 9 |     rjmp    LCD_string
 | 
| 10 | LCD_end:  
 | 
| 11 |     ret
 | 
zum testen habe ich ein string in der ersten Zeile mit flags,ram gesetzt 
und die 2.te Zeile ohne.
| 1 | LCD_ausgabe:
 | 
| 2 |     cursor,0,0                 ;cursor auf erste stelle und 1 zeile 
 | 
| 3 |     ldi    zl,low(tempcopy)    ;lade Z-pointer auf Tempcopy im SRAM
 | 
| 4 |     ldi    zh,high(tempcopy)   ;
 | 
| 5 |     sbr    flags,ram           ;flag setzen 
 | 
| 6 |     rcall  LCD_string          ;Ausgabe Sram - LCD
 | 
| 7 |     cursor,0,1                 ;cursor auf erste stelle und zweite zeile
 | 
| 8 |     ldi    zl,low(Time_error*2) ;lade Z-pointer auf text im Programmspeicer
 | 
| 9 |     ldi    zh,high(Time_error*2) ;
 | 
| 10 |     cbr    flags,ram          ;flag setzen
 | 
| 11 |     rcall  LCD_string          ;Ausgabe SRAM - LCD
 | 
| 12 |   ret
 | 
Die zweite Zeile funktioniert richtig....die erste nicht... Warum ?!?
Danke im Vorraus