Kohai schrieb:> 1)An was kann das liegen?
Schau dir die erste Fehlermeldung an. Die Zeilennummer hast du ja in der
Fehlermeldung genannt bekommen. Es ist die Zeile 3.
Also schaust du dir diese mal in deinem Programmtext an.
1
P0 equ 080H ;Port 0
Die Fehlermeldung lautet: symbol already defined
Welches ist in dieser Zeile das 'symbol'. Offenbar P0.
Was ist mit diesem Symbol? Es ist 'already defined'.
D.h. den Namen 'P0' gibt es schon und du versuchst gerade ihn nochmal zu
definieren.
P0 ist meines Wissens das Name des Ports auf einem 8051. Da würde ich
doch glatt gleich mal davon ausgehen, dass der Assembler auch ohne deine
Hilfe weiß, dass es diesen Port gibt und an welcher Adresse der
anzutreffen ist.
Lass dich nicht von vielen Fehlermeldungen verwirren. Fehlermeldungen
sind oft Folgefehler. Korrigierst du den ersten, auslösenden Fehler,
verschwinden oft eine ganze Latte weiterer Fehler gleich mit. Fang in
der Liste der Fehlermeldungen oben bei der ersten an, korrigiere sie und
lass erneut assemblieren. Dann wieder: die erste hernehmen und
korrigieren. etc. etc.
> 2)Wozu braucht man die *MCU-Dateien? Im Verzeichnis von ASEM gibt es> auch ein AT59S8253.mcu.
Keine AHnung.
Schnapp dir einen Texteditor und mach sie auf. Wenn es eine Textdatei
ist, dann kannst du lesen was da drinnen steht und dann weiß man
meistens schon mehr.
> 2)Wozu braucht man die *MCU-Dateien? Im Verzeichnis von ASEM gibt es> auch ein AT59S8253.mcu.
Du hast Dir mit ASEM einen sehr gut dokumentierten Assembler gewählt.
Lies Dir die Beschreibung zum ASEM durch. Darin werden alle Fragen
beantwortet.
Hallo,
danke für die schnelle Antwort. Hab die erste ZEile auskommentiert und
trotzdem erhalte ich noch die weiteren Fehlermeldungen mit illegal
operand.
Viele Grüße,
Kohai
Kohai schrieb:> Hallo,>> danke für die schnelle Antwort. Hab die dritte Zeile auskommentiert und> trotzdem erhalte ich noch die weiteren Fehlermeldungen mit illegal> operand.>> Viele Grüße,>> Kohai
Wenn ich die Zeile $nomod51 hinzufüge und die dritte Zeile
auskommentiere, erhalte ich folgende Fehlermeldung:
MCS-51 Family Macro Assembler ASEM-51 V1.3
knight.asm(10): symbol not defined
knight.asm(13): symbol not defined
knight.asm(15): symbol not defined
knight.asm(17): symbol not defined
knight.asm(19): symbol not defined
knight.asm(21): symbol not defined
knight.asm(23): symbol not defined
knight.asm(25): symbol not defined
knight.asm(27): symbol not defined
knight.asm(29): symbol not defined
knight.asm(31): symbol not defined
knight.asm(33): symbol not defined
knight.asm(35): symbol not defined
knight.asm(37): symbol not defined
knight.asm(39): symbol not defined
knight.asm(41): symbol not defined
knight.asm(43): symbol not defined
knight.asm(45): symbol not defined
knight.asm(48): symbol not defined
knight.asm(50): symbol not defined
knight.asm(52): symbol not defined
knight.asm(54): symbol not defined
knight.asm(56): symbol not defined
knight.asm(58): symbol not defined
knight.asm(60): symbol not defined
knight.asm(62): symbol not defined
knight.asm(64): symbol not defined
knight.asm(66): symbol not defined
knight.asm(68): symbol not defined
knight.asm(70): symbol not defined
30 errors detected
Weiß jmd. weiter?
Vielen Dank im Voraus!
spess53 schrieb:> Hi>> Kannst du mal verraten, was r1,r2, ... sein sollen?>> MfG Spess
ich dachte r1 und r2 wären meine Register. Ich hab mal vor Jahren, noch
zu Uni-Zeiten, Assembler programmiert und bin jetzt aber "total
draußen";)
Muss ich die Register vorher noch deklarieren/inititalisieren? Kann ich
mit der Datei überhaupt ein Lauflicht programmieren oder ist es eine
unvollständige Assemblercode-Datei?
Danke,
mfg,
Kohai
Hi
>mov p0.0,r1
Der Knackpunkt ist, wie Wilhelm F schon bemerkt hat, das der TO
versucht, ein Bit mit einem Byte zu beschreiben. Da wäre ich als
Assembler auch sauer.
MfG Spess
Karl Heinz schrieb:> $NOMOD51 ; keine vordefinierten Symbole> $INCLUDE (AT59S8253.mcu) ; dafuer die fuer den AT59S8253 gültigen
Symbole
>
Das ist genau das, was er so oder so ähnlich in der Doku zum Assembler
hätte finden können. Aber wahrscheinlich wieder jemand, der alles auf
dem Silbertablett präsentiert bekommen möchte.
Vielen Dank für eure Antworten. @ ASEM User: kein Grund so zu grantln.
Hab über ne halbe Stunde gegoogled und nix gefunden. So viel Zeit hab
ich dann auch nicht und da dacht ich mir, hier im Forum gibts immer paar
Spezialisten die dir schnelle helfen können.
Übrigens das mit dem Einbinden der *.mcu datei funktioniert trotzdem
nicht, vlt. liegts daran das diese im übergeordneten ordner /ASEM/MCU
liegen und nicht im Verzeichnis /ASEM, wo auch die Quellcode *asm Datei
liegt...
Viele Grüße
Hallo!
Auch ich habe mich deinem Problem mal angenommen und folgendes
festgestellt:
- wie schon an vorangegangener Stelle bemerkt versuchst du einzelne Bits
des
Port 0 mit dem Inhalt eines ganzen Registers zu beschreiben. Das kann
nicht funktionieren, denn ein Register beim Standard-8051 umfasst ein
Byte, also 8 Bit. Um dass Problem zu beheben, schreibe z.B.:
mov p0,r1 anstatt mov p0.0,r1
- desweiteren ist es nicht nötig P0 einem Register zuzuweisen, das macht
der
Assembler schon von selbst. Kannst du also ausklammern, bzw. löschen.
- das Unterprogramm delay1s wird zwar funktionieren, aber es geht
einfacher
;)
Ich erlaube mir einfach mal ein funktionierendes Lauflicht anzuhängen.
Vielleicht hilft dir das ja ein wenig weiter.
@tobishinobi:
Vielen Dank, das Problem auf meinerseite hat sich auch gelöst;) Ja, der
Fehler lag u.a. an der Bitzuweisung. Habe aber hauptächlich auch ein
Problem gehabt den Quellcode auf meinen uC zu flashen.
Nutze ASEM.exe zum kompilieren und ATMEL ISP (von Ulrich Bangert) zum
flashen. Klappt prima;)
Viele Grüße.
Kohai schrieb:> Ja, der Fehler lag u.a. an der Bitzuweisung.
Den Booleschen Prozessor (Einzelbitverarbeitung) des 8051 kann man
trotzdem verwenden, wenn man das möchte. Er hat dafür separate
MOV-Befehle, die nur ein bit beeinflussen.
Wenn man wirklich mal nur einzelne bits aus einer beliebigen Position
eines bitadressierbaren Bytes in eine andere beliebige Position eines
anderen bitadressierbaren Bytes kopieren möchte:
mov c,bit bzw. mov bit,c
Das geht alles über das Carry-Flag, welches für den Bitprozessor der
Akkumulator ist.
mov c,P0.0 bzw. mov P0.0,c würde auf diese Weise funktionieren.
Bitadressierbare Register sind im 8051 der Flag-Bereich des internen RAM
von Adresse 20h bis 2Fh und alle SFR-Adressen, die glatt durch 8 teilbar
sind. Dazu gehören auch die I/O-Ports.