mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 32bit Konstantenzuweisung in ASM mit µVision


Autor: Frank (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich möchte eine 32bit Konstante einigen Registern zuweisen. Verwenden 
möchte ich den Assembler von Keil µVision3.
Das funktioniert nur mit einem MX51-Prozessor!
Dabei wird im Assembler control string "MOD_MX51" verwendet und die 
additional reserved symbols sind verwendbar.

Wenn ich nun als Device ein SAB80C537 verwende und über Misc Controls 
"MOD_MX51" eintrage, erhalte ich folgende Fehlermeldung des Assembler:

A51 FATAL ERROR -
  LINE:       D:\Programme\Keil\C51\BIN\A51.EXE main.a NOMOD51 MOD_MX51 
#
  ERROR:      UNKNOWN CONTROL
A51 TERMINATED.
Target not created

Meine Frage ist wie mache ich eine 32bit-Konstantenzuweisung ab dem 
dritten Byte bei einem SAB80C537? Siehe Projekt im Anhang!

Danke

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
warum funktioniert es nicht wenn ich so zuweise?

Konstante  equ  12345678h

  mov  r7,#Konstante mod 256
  mov  r6,#Konstante/0ffh mod 256
  mov  r5,#Konstante/0ffffh mod 256
  mov  r4,#Konstante/0ffffffh mod 256

Der Assembler macht daraus:

C:0x0000    7F78     MOV      R7,#0x78
C:0x0002    7E56     MOV      R6,#0x56
C:0x0004    7D00     MOV      R5,#0x00
C:0x0006    7C00     MOV      R4,#0x00

Als wäre "Konstante" nur ein Datenwort, also 16bit.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>warum funktioniert es nicht wenn ich so zuweise?

Weiß ich nicht. Aber rechnen kann er auch nicht:

#Konstante/0ffh mod 256 ist $9D und nicht $56.

Es müsste nämlich richtig  '#Konstante/0100h mod 256' heissen. Für die 
restlichen Ausdrücke analog.

Kennt dein Assembler keine Shift-Operatoren?

MfG Spess

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zuerst möchte ich mich bei Euch für Eure Antworten bedanken.
spess53,
Du hast natürlich Recht, eigenartig ist aber, dass ich in meinem 
Hex-File nach der Übersetzung von (Konstante/0ffh mod 256) 56h erhalten 
habe. Warum, muss ich nochmals überprüfen. Ab dem dritten Byte ist bei 
dieser Art der Zuweisung das Ergebnis immer 0h. Daraus folgere ich, dass 
"Konstant" im Assembler nur als Datenwort mit 16bit geführt wird.
Wie könnte ich die Zuweisung mit Shift-Operatoren ausführen?

Ralf,
genau diese Operatoren sind bei meinem Device (SAB 80C537) nicht ohne 
weiteres verwendbar. Diese sind eine Erweiterung, die mit "MOD_MX51" 
zugänglich gemacht wird. Dazu sollte ich noch erwähnen, dass ich C51 und 
nicht C166 von Keil verwende. Benutze ich nur probeweise einen 
MX51-Prozessor (z.B. 8x51MA2), wird die Quelle fehlerlos übersetzt und 
bei einem Test mit dem Debuger erfolgen die Zuweisungen fehlerfrei. 
Leider kann ich diese Device nicht in dem Projekt, in dem ich eigentlich 
solch eine Zuweisung brauche.


Kann ich in µVision diese Zuweisung auch in C schreiben und dann alles 
weiter in Assemblersprache? Könnte mir jemand das mit dem Projekt (ist 
eine Variante des Projekt aus der ersten Anfrage) im Anhang 
demonstrieren?

Danke

Autor: Frank (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hier der vergessene Anhang.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.