Forum: Mikrocontroller und Digitale Elektronik LCD-Tutorial - Routine springt falsch


von Matthias S. (da_user)


Lesenswert?

Ich habe mir hier aus dem Tutorial die LCD-Routine heruntergeladen und 
wollte mit der einen Text ausgeben, hier der kurze Quellcode:

.include "m32def.inc"
.include "lcd_routines.asm"


.def temp1 = r16
.def temp2 = r17
.def temp3 = r18

    ldi temp1, LOW(RAMEND)
    out SPL, temp1
    ldi temp1, HIGH(RAMEND)
    out SPH, temp1

    rcall lcd_init
    rcall lcd_clear

    ldi ZL, LOW(text*2)
    ldi ZH, HIGH(text*2)

    rcall lcd_flash_string


loop: rjmp loop

text:
  .db "Hallo Welt!",0

Durch den Debugger habe ich herausbekommen, dass die lcd_routines beim 
intialisieren des Displays beim ersten "ret" in der Routine LCD_Enable 
falsch zurückspringt:

 ;sendet ein Datenbyte an das LCD
lcd_data:
[...]
           rcall lcd_enable
           andi  temp2, 0b00001111
[...]
lcd_enable:
[...]
           ret
[...]

Hier springt der Debugger nicht zu der Zeile "andi [...]" sondern auf 
den ersten Befehl nach lcd_data. Da ich noch relativ unerfahren mit dem 
Zeug bin: Wo kann ich nach meinem Fehler suchen? Wie gesagt, die Routine 
selbst ist hier heruntergeladen und es wurden nur die Portpins geändert.

von Matthias S. (da_user)


Lesenswert?

Ok, gerade den Fehler herausbekommen:

dadurch dass ich die Routine der übersichtlichkeit halber am Anfang 
"includen" wollte, wird diese als erstes durchgearbeitet und dann 
stimmen die Stack-Adressen noch nicht.

Trotzdem scheint das Ding das LCD nicht richtig zu initialisieren... 
erst seitdem ich die runtergeladene Routine benutze, mit der alten gings 
einwandfrei... hmm.. ma weitergucken ;-)

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.