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


von Horst (Gast)


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...

von Lupin (Gast)


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

von Horst (Gast)


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 :)

von Josef (Gast)


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.

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.