www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bits verschieben


Autor: Freak5 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Joern G. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ...HanneS... (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
BLD/BST

...

Autor: Freak5 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Freak5 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.