Atmega328P - Assembler: keine Hexadarstellung möglich?

Gast #4986595
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.
Gast #4986702
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.
Gast #4986705
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.
Gast #4986715
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
#4986725
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
Gast #4986736
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren