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.