Atmega328P - Assembler: keine Hexadarstellung möglich?

Gast #4986595
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
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.