Werte uC-8051-Community, ich habe folgendes Problem: Wenn ich mein bestehendes 8-Bit-Lauflicht-Projekt "knight.asm" mit der Software ASEM5113 (v.1.3 von 2002) unter Windows 7 32 bit auf meinen AT89S8253 kompilieren will, erhalte ich folgende Fehlermeldung: MCS-51 Family Macro Assembler ASEM-51 V1.3 knight.asm(3): symbol already defined knight.asm(10): illegal operand knight.asm(13): illegal operand knight.asm(15): illegal operand knight.asm(17): illegal operand knight.asm(19): illegal operand knight.asm(21): illegal operand knight.asm(23): illegal operand knight.asm(25): illegal operand knight.asm(27): illegal operand knight.asm(29): illegal operand knight.asm(31): illegal operand knight.asm(33): illegal operand knight.asm(35): illegal operand knight.asm(37): illegal operand knight.asm(39): illegal operand knight.asm(41): illegal operand knight.asm(43): illegal operand knight.asm(45): illegal operand knight.asm(48): illegal operand knight.asm(50): illegal operand knight.asm(52): illegal operand knight.asm(54): illegal operand knight.asm(56): illegal operand knight.asm(58): illegal operand knight.asm(60): illegal operand knight.asm(62): illegal operand knight.asm(64): illegal operand knight.asm(66): illegal operand knight.asm(68): illegal operand knight.asm(70): illegal operand 31 errors detected Mit ASM51.exe bekomme ich die gleiche Fehlermeldung. 1)An was kann das liegen? 2)Wozu braucht man die *MCU-Dateien? Im Verzeichnis von ASEM gibt es auch ein AT59S8253.mcu. Für Hinweise bin ich sehr dankbar. Viele Grüße, Kohai
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.
:
Bearbeitet durch User
> 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!
Hi Kannst du mal verraten, was r1,r2, ... sein sollen? MfG Spess
Hi
>Kannst du mal verraten, was r1,r2, ... sein sollen?
Brauchst du nicht mehr. Habs gefunden.
MfG Spess
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
Da ist wohl noch einiges am Befehlssatz unbekannt.
1 | mov p0.1,r3 |
Sowas geht nicht, ein Byte in ein bit zu schieben.
Na ja, jetzt gibt es eben das Symbol P0 bzw. die entsprechenden Register überhaupt nicht mehr. Ich würds mal so probieren
1 | $NOMOD51 ; keine vordefinierten Symbole |
2 | $INCLUDE (AT59S8253.mcu) ; dafuer die fuer den AT59S8253 gültigen Symbole |
3 | |
4 | main: |
5 | loop: |
6 | mov r1,#0h |
7 | mov p0.0,r1 |
... frei nach einer Quelle, die ich mit Google als erstes gefunden habe
PS: Wenn ich die Knight.asm mit dem Keil uVision4 kompiliere und die 3.Zeile auskommentiere, erhalte ich diese Meldung: knight.asm(10): error A48: DATA-ADDRESS EXPECTED knight.asm(13): error A48: DATA-ADDRESS EXPECTED knight.asm(15): error A48: DATA-ADDRESS EXPECTED knight.asm(17): error A48: DATA-ADDRESS EXPECTED knight.asm(19): error A48: DATA-ADDRESS EXPECTED knight.asm(21): error A48: DATA-ADDRESS EXPECTED knight.asm(23): error A48: DATA-ADDRESS EXPECTED knight.asm(25): error A48: DATA-ADDRESS EXPECTED knight.asm(27): error A48: DATA-ADDRESS EXPECTED knight.asm(29): error A48: DATA-ADDRESS EXPECTED knight.asm(31): error A48: DATA-ADDRESS EXPECTED knight.asm(33): error A48: DATA-ADDRESS EXPECTED knight.asm(35): error A48: DATA-ADDRESS EXPECTED knight.asm(37): error A48: DATA-ADDRESS EXPECTED knight.asm(39): error A48: DATA-ADDRESS EXPECTED knight.asm(41): error A48: DATA-ADDRESS EXPECTED knight.asm(43): error A48: DATA-ADDRESS EXPECTED knight.asm(45): error A48: DATA-ADDRESS EXPECTED knight.asm(48): error A48: DATA-ADDRESS EXPECTED knight.asm(50): error A48: DATA-ADDRESS EXPECTED knight.asm(52): error A48: DATA-ADDRESS EXPECTED knight.asm(54): error A48: DATA-ADDRESS EXPECTED knight.asm(56): error A48: DATA-ADDRESS EXPECTED knight.asm(58): error A48: DATA-ADDRESS EXPECTED knight.asm(60): error A48: DATA-ADDRESS EXPECTED knight.asm(62): error A48: DATA-ADDRESS EXPECTED knight.asm(64): error A48: DATA-ADDRESS EXPECTED knight.asm(66): error A48: DATA-ADDRESS EXPECTED knight.asm(68): error A48: DATA-ADDRESS EXPECTED knight.asm(70): error A48: DATA-ADDRESS EXPECTED
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.
Danke für die Info. Wird gleich mal ausgetestet! VG
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.