Hallo,
ich habe ein Problem in Atmel Studio 6.2
Ich habe ein Display (Displaytech162c) in Assembler zu programmieren
aber habe Probleme bei der Einbindung des Unterprogrammes.
Ich habe schon oft in Assembler Unterprogramme und enthaltene
Sprungmarken aufgerufen
Dieses Programm wurde aus einem größeren Kontext kopiert, in dem alles
funktioniert. Allerdings bekomme ich einen Fehler ausgegeben, dass das
Objekt "rcall LCDinit" nicht definiert sei und ich finde diesen Fehler
nicht. Vielleicht könnt ihr mir ja helfen :)
Beide ".asm" Dateien befinden sich im selben Ordner.
Mit freundlichen Grüßen
Jonas
Hi
>Allerdings bekomme ich einen Fehler ausgegeben, dass das>Objekt "rcall LCDinit" nicht definiert sei und ich finde diesen Fehler>nicht.
Fehlende .include-Anweisungen?
MfG Spess
Eine Zeile über der 1. Zeile auf dem Bild steht noch
.include"M16def.inc", aber offensichtlich fehlt da keine
".include-Anweisung".
Hier ist der gesamte Code der .asm-Datei:
> Das ist nicht der gesamte Assemblercode. Und das was ich sehe wirkt> schon recht abschreckend.
Es gibt natürlich nocheinmal die Datei "Display.asm":
Display:
1
2
/*
3
4
rcall lcd_enable ; Enable-Routine aufrufen
5
rcall delay50us ; Delay-Routine aufrufen
6
ret ; zurück zum Hauptprogramm
7
*/
8
LCDpoweron: ldi Time3,3 ;Poweron-Schleife 15ms
9
rcall wait5ms
10
dec Time3
11
brne LCDpoweron
12
LCDinit: cbi PortA,PIN_RS ;RS auf Instruktionen setzen
13
ldi LCD1,0b00110000 ;8-Bit-Interface
14
out PortC,LCD1 ;Initialisierungsprozess ...
15
call wait5ms ;Zeitschleife
16
out PortC,LCD1 ;...
17
call wait50us ;Zeitschleife
18
call wait50us ;"
19
out PortC,LCD1 ;...
20
ldi LCD1,0b00111000 ;8Bit / 2 Zeilen / 5x8
21
out PortC,LCD1 ;
22
rcall LCDEnable ;
23
rcall wait5ms
24
ldi LCD1,0b00001100 ;Display ein / Cursor aus / Cursor blinken aus
25
out PortC,LCD1 ;
26
rcall LCDEnable ;
27
rcall wait5ms
28
ldi LCD1,0b00000110 ;Eingabemodus zeichen nach rechts
29
out PortC,LCD1
30
rcall LCDEnable ;zu LCDEnable
31
rcall wait5ms
32
rcall LCDClear ;zu LCDClear
33
rcall wait5ms
34
ret
35
LCDClear:
36
cbi PortA, PIN_RS ;
37
ldi LCD1, 0b00000011 ;LCDDisplay löschen und Cursor zum Anfang zurück
38
out PortC, LCD1 ;
39
rcall LCDEnable ;zu LCDEnable
40
ret ;zurück
41
LCDData: sbi PortA,PIN_RS
42
out PortC,LCD2
43
rcall LCDEnable
44
rcall wait50us
45
LCDEnable:
46
sbi PORTA, 0 ; Enable high
47
nop
48
nop
49
nop
50
cbi PORTA, 0 ; Enable wieder low
51
ret ; zurück
52
wait5ms:
53
ldi Time1, (XTAL*5/607)/1000
54
WL5ms1: ldi Time2, 201
55
WL5ms2: dec Time2
56
brne wL5ms2
57
dec Time1
58
brne WL5ms1
59
ret
60
wait50us: ; 50µs Pause (bei 4 MHz)
61
ldi Time1, (XTAL*50/3)/1000000
62
wait50us_: dec Time1
63
brne wait50us_
64
ret
Aber inwiefern wirkt dies denn abschreckend?
Und wo ist nun mein Fehler?
Mit freundlichen Grüßen
Jonas
Hi
>Includiere am besten gleich alles zusammen am Anfang wie es mit der M16>Inc Datei gemacht wird.
An den Anfang dürfen nur Includes die keinen Code enthalten.
MfG Spess
Danke, wenn es nur funktioniert wenn ich die .asm Datei nur vorher
einbinde, frage ich mich warum es in meinen anderen Programmen
funktioniert, wenn die .asm-Dateien am Ende stehen, wie ich es auch in
meinem Elektrotechnik-Unterricht gelernt habe?
Mit freundlichen Grüßen
Jonas Nelson
schreibe es mal wie folgt
.include "Display.asm" und danach ein paar Leerzeichen oder nen
Tabulator
Hab das mal nach längeren recherchieren hier im Forum rausgelesen und
begreife nicht warum das im 6.2er Studio so absolut dämlich gemacht
worden ist, es sei denn in neueren Updates wurde es schon geändert
Hi
>schreibe es mal wie folgt
<.include "Display.asm" und danach ein paar Leerzeichen oder nen
>Tabulator>Hab das mal nach längeren recherchieren hier im Forum rausgelesen und>begreife nicht warum das im 6.2er Studio so absolut dämlich gemacht>worden ist, es sei denn in neueren Updates wurde es schon geändert
Weder Leerzeichen noch Tabulatoren. Die letzte Zeile muss einfach mit
einem ENTER abgeschlossen sein. Wenn dieses fehlt ist kein Zeilenende
vorhanden und der Assembler verschluckt sich. Ist aber dem Type vor
dem Bildschirm anzukreiden.
Jonas schrieb:> frage ich mich warum es in meinen anderen Programmen> funktioniert, wenn die .asm-Dateien am Ende stehen
Es ist auch egal.
Der Assembler macht 2 Durchläufe, sonst könnte man ja nicht nach vorne
springen.
.include fügt nur die Dateien zu einer großen zusammen, sonst nichts.
Es liegt an was anderem.