Forum: Mikrocontroller und Digitale Elektronik Fehler bei Laufllicht Programmierung AT89S8253


von Kohai (Gast)


Angehängte Dateien:

Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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
von asem user (Gast)


Lesenswert?

> 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.

von asem user (Gast)


Lesenswert?

..vielleicht noch einen Tipp: NOMOD51

von Kohai (Gast)


Lesenswert?

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

von Kohai (Gast)


Lesenswert?

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

von Kohai (Gast)


Angehängte Dateien:

Lesenswert?

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!

von spess53 (Gast)


Lesenswert?

Hi

Kannst du mal verraten, was r1,r2, ... sein sollen?

MfG Spess

von spess53 (Gast)


Lesenswert?

Hi

>Kannst du mal verraten, was r1,r2, ... sein sollen?

Brauchst du nicht mehr. Habs gefunden.

MfG Spess

von Kohai (Gast)


Lesenswert?

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

von Wilhelm F. (Gast)


Lesenswert?

Da ist wohl noch einiges am Befehlssatz unbekannt.
1
mov p0.1,r3

Sowas geht nicht, ein Byte in ein bit zu schieben.

von Karl H. (kbuchegg)


Lesenswert?

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

von Kohai (Gast)


Angehängte Dateien:

Lesenswert?

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

von spess53 (Gast)


Lesenswert?

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

von asem user (Gast)


Lesenswert?

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.

von Kohai (Gast)


Lesenswert?

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

von tobishinobi (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Kohai (Gast)


Lesenswert?

@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.

von Wilhelm F. (Gast)


Lesenswert?

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.

von Kohai (Gast)


Lesenswert?

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