Forum: Mikrocontroller und Digitale Elektronik Problem mit Macro's im AVR-Assembler


von Matthias (Gast)


Lesenswert?

Hallo,

ich habe ein kleines Problem mit Macro's im AVR-Assembler:

.DEF temp = r16

.MACRO  outi
  ldi  temp, @1
  out  @0, temp
.ENDMACRO

  outi  DDRB, 100000b  ; => DDRB = 00001011b => falsch
  outi  DDRB, 32  ; => DDRB = 32        => richtig
  outi  DDRB, 0x20  ; => DDRB = 0x20      => richtig


Warum ist nach dem ersten outi eine falscher Wert im DDRB Register ?



Gruß
Matthias

von thkaiser (Gast)


Lesenswert?

Kanns vielleicht dran liegen, daß Binärzahlen nicht mit
"100000b"

sondern
"0b100000"

angegeben werden?

von Matthias (Gast)


Lesenswert?

Hallo thkaiser,

Du hast recht !

Aber als was interpretiert er dann "100000b" ?


Gruß
Matthias

von thkaiser (Gast)


Lesenswert?

DAS ist eine gute Frage.....

von Matthias (Gast)


Lesenswert?

Hallo thkaiser,

Interpretiert er evtl. das letzte Zeichen in Hex ?:

100000b => 00001011b

0xB => 00001011b


Gruß
Matthias

von Gerhard Schmidt (Gast)


Lesenswert?

Nö. Mancher Assembler ignoriert das b einfach ganz. Der ATMEL Assembler 
gibt noch eine lapidare Warnung "Trash at end of line, ignored!". Ob er 
das auch macht, wenn der Parameter über einen Makroaufruf übergeben 
wird, weiß ich nicht.
Jedenfalls ist 100000 dezimal soviel wie 0x186A0. Und auch da bekleckert 
sich der ATMEL Assembler nicht gerade mit Ruhm: er nimmt halt, was 
passt, nämlich A0. Und ignoriert den Rest.
Oder sind die neuen Versionen besser? Ich arbeite noch mit den alten.

MfG
Gerd

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.