Hallo,
ich bin neu in Assembler und komme nicht ganz mit der $include Funktion
bzw. den headerfiles in Assembler zurecht. Als IDE benutzte ich Keil.
Ich habe ein Programm geschrieben, mit dem ich auf ein LCD Display
zugreifen kann. Um alles etwas zu vereinfachern möchte ich das ganze
jetzt als externe Datei haben und eben die einzelnen
Methoden/Unterprogramme so aufrufen.
Allerdings funktioniert es nicht ganz so wie ich es mir vorstelle, trotz
Tutorials und Erklärungen.
Zudem habe ich niergends gefunden, ob die Variablendeklaration, so wie
ich es gemacht habe überhaupt funktionieren kann. Oder ob ich die
Register für meine externe Datei verwenden darf.
Wie gesagt bin ich blutiger Anfänger, ich hoffe trotzdem, dass mir
jemand helfen kann.
Einzubinden habe ich es auf diesem Weg versucht:
1
$include(lcd_display.h)
2
3
ORG 00h
4
SJMP INIT_PROGRAMM
5
6
INIT_PROGRAMM:
7
MOV P1,#00110011b
8
9
ACALL LCD_INIT // Unterprogramm aus lcd_display
10
11
MOV A, #41h // A
12
ACALL LCD_DATA // Unterprogramm aus lcd_display
13
14
MOV P1,#11001100b
15
END
Das ist das Programm, welches ich gerne als Headerfile benutzten würde:
Dominik schrieb:> $include(lcd_display.h)
Das solltest du erst an der Stelle im Code schreiben, an der es passt.
Im Moment steht es vor dem Reset Vektor und damit wird vermutlich etwas
überschrieben, spätestens, wenn das .ORG Statement kommt. Also erst an
einer Stelle einfügen, wo es passt.
BTW. liegt die Include Datei (wieso eigentlich xxx.h und nicht xxx.inc?)
denn im selben Verzeichniss wie dein Quellcode? Oder erwartet Keil vll
sowieso eine absolute Pfad Angabe?
Das macht man doch heutzutage nicht mehr so, oder?
(ORG und Programmcode über include einfügen. Dafür hat man doch den
Linker)
Keil kabe schon seit Ewigkeiten nicht mehr benutzt, aber ich kann mir
irgendwie nicht so recht vorstellen, dass das der Weg ist.
Frage an erfahrene Keil Assembler Nutzer: "Irre ich mich da total?"
Volker S. schrieb:> Das macht man doch heutzutage nicht mehr so, oder?> (ORG und Programmcode über include einfügen. Dafür hat man doch den> Linker)
Include bindet einfach weiteren Quelltext ein, zur Zeit des
Assemblierens, das ist aber kein einfaches 'merging' bei MASM32 oder A86
werden nur die Prozeduren übersetzt die das Hauptprogramm auch
verwendet.
Der org Pseudoopcode legt den Programmstart fest, doch manchmal ist das
wohl nötig (x.bin Dateien starten normalerweise bei 0 und wei DOS/WIN
Executables steht ein jmp Startaddresse am Anfang des Programmheaders.)