Forum: Mikrocontroller und Digitale Elektronik Bit nach links schieben


von Gast (Gast)


Lesenswert?

Hallo,
ich brauche eure Hilfe.
Wie kann ich ein Bit eines Ports verschieben, ohne das mir ein Bit
verloren geht?
Alle Bits bis auf eins der ersten 4 Bits sind gesetzt. Es dürfen nur
Bit 0 bis 3 geschoben werden. Wenn Bit3 Null ist, soll die Prozedur
wieder von vorne anfangen.
Beispiel:
0b11111110
0b11111101
0b11111011
0b11110111
0b11111110 usw.

Bei <<1 wird ja immer eine Null nachgeschoben.
Wäre nett, wenn mir jemand helfen würde.

von Unbekannter (Gast)


Lesenswert?

out = (in & 0xf0) | ((in & 0x07) << 1) | ((in & 0x08) >> 3);

von Peter D. (peda)


Lesenswert?

in C:

if( (i+=i+1) == 0xEF )
  i = 0xFE;


oder in 8051-Assembler:

  mov  a, i
  setb c
  rlc  a
  jb   acc.4, m1
  swap a
m1:
  mov i, a


Peter

von Simon Küppers (Gast)


Lesenswert?

beim AVR gibts doch dafür ROR RotateRight oder?

von Wolle (Gast)


Lesenswert?

Der Befehl heisst ROL = Rotate Left through carry

Bitmuster laden = 11111110, Carry setzen und dreimal ROL.
Dann von vorne beginnen.

von Gast (Gast)


Lesenswert?

Danke für eure Hilfestellung, werde es mal wie Peter es beschrieben hat
in C ausprobieren.

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.