www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ASM: Teil-Register zusammenfügen


Autor: Horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Huhu

Ich möchte folgende 5 Bit zusammengefügt in ein Register stehen haben:

PortA Bits 0,1,2
&
PortC Bits 0,1

also so: A2,A1,A0,C1,C0 ins Register level

    in level, PINA
    andi level, 0b00000111
    rol level
    rol level
    in temp, PINC
    andi temp, 0b00000011
    or level, temp


    ; level hat nun Format 000xxxxx

level wird dann als LED-Zeile ausgegeben
Ich habe Auf die Ports A und C Tasten geschalten. A funktioniert, C
reagiert nicht. Weis nicht warum...

Autor: Lupin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du musst die unteren bits von level auch löschen

ersetz mal die "rol" instruktionen durch "shl" (also shift left,
kann auch sein das die bei AVR ASM anders heißen) dann sollte es vom
code her richtig sein

Autor: Horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie meinst du das "untere Bits löschen"?

nochmal genauer:

    in level, PINA
    andi level, 0b00000111    ; lösche obere 5 bits
    rol level                 ; Ergebnis 0000xxx0
    rol level                 ; Ergebnis 000xxx00
    in temp, PINC
    andi temp, 0b00000011     ; obere 6 Bits löschen, Ergebnis
000000XX
    or level, temp            ; 000xxx00 OR 000000XX = 000xxxXX

markiere mal die Zeile mit dem Fehler, ich seh es nicht :)

Autor: Josef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich nehme mal an, das es hier um Atmel-AVR geht.

Der Befehl rol (rotate left) schiebt nicht nur die Bits um eine Stelle
nach links, sondern auch das Carry-Bit in das Bit0.
Bit7 wird ins Carry-Bit geschoben und kommt mit dem nächsten rol auf
der anderen Seite auf das Bit0, daher die Bezeichnung rotate.

Falls das Carry-Bit vor deiner Befehlssequenz gesetzt ist, wird dein
Ergebnis verfälscht.

Ersetze die rol durch lsl (logical shift left). Hier wird das Bit0
immer mit 0 besetzt.

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.