Forum: Mikrocontroller und Digitale Elektronik Bits verschieben


von Freak5 (Gast)


Lesenswert?

Also ich habe einen Wert aus dem Speicher, den ich seriell ausgeben
möchte.
Der Wert sei jetzt einmal
01010101
Das dumme ist aber, dass ich ihn über zwei register verteilt ausgeben
muss. Die Einsen markieren den durch das Bit belegten Platz.
00011111 11100000
Reg. 1   Reg. 2
Muss ich das nun so machen, dass ich alles in Register eins speichere:
11111111 00000000
das erste Bit aus Register 1 auslese und als letztes Bit in Register 2
ausgebe, indem ich den Carry auslese und das dann widerhole?

von Joern G. (Gast)


Lesenswert?

> dass ich ihn über zwei register verteilt ausgeben muss

Hä? Wer zwingt dich dazu?
Formuliere am besten dein Frage nochmal verständlich, dann benötigst du
vermutlich nicht einmal mehr eine Antwort, weil ohne Durcheinander die
Lösung meist nahe liegt.

jörn

von ...HanneS... (Gast)


Lesenswert?

BLD/BST

...

von Freak5 (Gast)


Lesenswert?

Damit lade/schreibe ich das in den Frag T. Was ist eigentlich T?
Temporary?

@Joern:
Es ist so, dass ich ein 16Bit Schiftregister habe, welches an ein
Display angeschlossen ist. Um die Bilddaten zu laden muss ich diese
erst in ein Register laden. Die Pins vom Display liegen aber in der
Mitte des Schiftregisters, welches durch zwei Register repräsentiert
ist, also muss ich das verschieben.

HanneS Tipp hat das Problem um mehr als 50% vereinfacht.... Ne, ich
glaube es ist sogar noch mehr.

Danke für die schnelle Hilfe. Hätte ich das anders gemacht mit SBR und
CBR, dann wäre diese Aktion ziemlich fett geworden...

von A.K. (Gast)


Lesenswert?

Schieben kann man auch im AVR:

Input: r1:r0 (11111111 00000000)
   lsr r1
   ror r0
   lsr r1
   ror r0
   lsr r1
   ror r0
Output r1:r0 (00011111 11100000)

von Freak5 (Gast)


Lesenswert?

Also bei lsr wird das rauslaufende Bit in den Carry geschoben und bei
ror wird das Carry in die eine Seite und das überflüssige Bit wieder in
den Carry geschoben?
Mh das wäre noch einfacher und ich wosste gar nicht, dass das so
einfach geht.

Danke!
Jetzt muss ich mir nurnoch irgendwie die Werte für die ersten 3 Bits
des Registers 1 speichern... Aber die sind eigentlich weitgehend
konstant...

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.