Forum: Mikrocontroller und Digitale Elektronik Problem beim Code optimieren für LCD HD44780


von André M. (killroymenzel)


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

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Atmels klassische Falltür: SBI/SBRC brauchen Bitnummer, SBR eine Maske.

: Bearbeitet durch User
von André M. (killroymenzel)


Lesenswert?

A. K. schrieb:
> Atmels klassische Falltür: SBI/SBRC brauchen Bitnummer, SBR eine Maske.

Danke...jetzt funzt es...

von Peter D. (peda)


Lesenswert?

Für solche Sachen eignet sich auch gut das T-Bit.
Es ist ja sonst kaum zu was nütze.

von André M. (killroymenzel)


Lesenswert?

Peter Dannegger schrieb:
> Für solche Sachen eignet sich auch gut das T-Bit.
> Es ist ja sonst kaum zu was nütze.

Wenn ich jetzt nur ein Flag benutzen würde wäre das eine gute Idee..

aber...

.equ    presence    =  0
.equ    ram      =  1
.equ    sendLCD      =  2
.equ    sendUART    =  3
.equ    key0set      =  4
.equ    key1set      =  5
.equ    timeok      =  6
.equ    bit8      =  7

ich benutze ein ganzes Byte....

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.