Problem beim Code optimieren für LCD HD44780

OP #3485792
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren