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...
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
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 :)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.