Forum: Mikrocontroller und Digitale Elektronik Atmega328P - Assembler: keine Hexadarstellung möglich?


von Teddy (Gast)


Lesenswert?

Hallo,

ich nutze den Arduino Uno und programmiere durch den AVR Studio in 
Assembler.
Die Konfiguration habe ich hingekriegt. Die Ports einzustellen auch.
Aber in Hexadezimalschreibweise scheints nicht zu klappen.

Jemand ne Idee?

.include "m328Pdef.inc"

;Hauptfunktion
start:
    ldi r16, 0b00001111
  out DDRB, r16
  ldi r15, 0b00001111
  out PORTB, r15
Schleife:

    rjmp Schleife

So läufts, aber statt 0b00001111 Schreibweise will ich 0x01 schreiben. 
Da tut der Arduino aber nicht.

von Max M. (jens2001)


Lesenswert?

Teddy schrieb:
> aber statt 0b00001111 Schreibweise will ich 0x01 schreiben.

0b00001111 != 0x01

von Heinz V. (heinz_v)


Lesenswert?

Teddy schrieb:
> So läufts, aber statt 0b00001111 Schreibweise will ich 0x01 schreiben.
> Da tut der Arduino aber nicht.

Das kann wohl kaum am Arduino liegen, der Code wird ja im AVR Studio 
übersetzt, gibt dieses Fehlermeldungen raus?

BTW: 0b00001111 = 0x0f nicht 0x01

von wb1 (Gast)


Lesenswert?

Load immediate funktioniert nicht mit Registern kleiner r16

So wäre es richtig:

   ldi r16, 0b00001111
  out DDRB, r16
  ldi r16, 0b00001111
  out PORTB, r16

von Teddy (Gast)


Lesenswert?

Max M. schrieb:
> Teddy schrieb:
>> aber statt 0b00001111 Schreibweise will ich 0x01 schreiben.
>
> 0b00001111 != 0x01

>.< Natürlich :D

wb1 schrieb:
> Load immediate funktioniert nicht mit Registern kleiner r16
>
> So wäre es richtig:
>
>    ldi r16, 0b00001111
>   out DDRB, r16
>   ldi r16, 0b00001111
>   out PORTB, r16

Alles klar, danke.

von Teddy (Gast)


Lesenswert?

wb1 schrieb:
> Load immediate funktioniert nicht mit Registern kleiner r16
>
> So wäre es richtig:
>
>    ldi r16, 0b00001111
>   out DDRB, r16
>   ldi r16, 0b00001111
>   out PORTB, r16

Ähh nochmal zu dir. Wo steht das denn?
in der Anleitung findet ich beim Befehl LDI dazu nichts.

von Carl D. (jcw2)


Lesenswert?


von spess53 (Gast)


Lesenswert?

Hi

>Ähh nochmal zu dir. Wo steht das denn?
>in der Anleitung findet ich beim Befehl LDI dazu nichts.

Was für eine Anleitung?

Es gibt eine Ausführliche Beschreibung der Assembler-Befehle:

www.atmel.com/images/Atmel-0856-AVR-Instruction-Set-Manual.pdf

MfG Spess

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Der Wortlaut des ausgegebenen Fehler sollte Das ungefähr aber auch 
ausdrücken. Somit ist nicht die Darstellung der Zahl der Fehler, sondern 
das unpassende Register.

Als kleine Zusatzinformation: Wenn man den Wert eines eingebbaren 
ASCII-Zeichen in das Register laden will, pack das Zeichen in zwei 
Hochkomma/einfache Anführungszeichen.
ldi r16,'9'
lädt somit das Register r16 mit dem Wert 0x39 57d 0b00111001
Klappt im Atmel-Studio 4.x

MfG

von wb1 (Gast)


Lesenswert?

Hallo Teddy,
ich hab erst jetzt bemerkt, daß Du auch noch ein Problem mit den 
Zahlensystemen hast.

Du schreibst:

"So läufts, aber statt 0b00001111 Schreibweise will ich 0x01 schreiben."

"0b" bedeutet binär, "0x" bedeutet hexadezimal

also 0b00001111 ist in hexa 0x0F

wenn Du also 0x01 benötigst ist das in binärer schreibweise 0b00000001.

Bitte etwas besser in Mathematik aufpassen.

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.