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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.