Forum: Mikrocontroller und Digitale Elektronik Wie kann ich Daten von einem Register aufsplitten ?!


von Dennis Brücke (Gast)


Lesenswert?

Hi @all,

ich habe folgendes Problem, ich habe es endlich geschaft mein Grafik
LCD Display (KS0108B) halbwegs anzusteuern (manuell, also sprich per
feste befehle).
Das Problem ist das DB0-3 an PortC und DB4-7 an PortB liegen.

Gibt es eine möglichkeit, das ich z.b. ein Register wie z.b.
0b11110000 so aufzusplitten, das jetzt die ersten bits 0-3 auf PortC
Pin 2-5 ausgegeben werden und die anderen bits 4-7 auf PortD ausgegeben
werden ?!

Muss ich das irgendwie mit Bitshifting machen ?!
Ich grübel schon die ganze zeit. Stoße da schon an meine grenzen wenn
es darum geht die Page festzulegen. z.b. Page 2 währe 0b10011100 uff
und das muss ich ja dann irgendwie aufteilen auf meine beiden Ports :(

Gruß Dennis

von Thomas K (Gast)


Lesenswert?

also wenn du die "ersten" bits haben wills dann würd ich einfach mit
einem UND verknüpfen.
also wie z.B. hier im tutorial mit andi:
http://www.mikrocontroller.net/tutorial/lcd.htm

andi r16, 0b00001111   ;Nur die vier unteren (mit 1 markierten)
                       ;Bits werden übernommen, alle anderen werden
null

das ergebnis kannst du dann auf PortC ausgeben.

wenn du auf den ersten pins von PortD dann die "linken" 4 Bits
ausgeben willst, dann einfach 4 mal nach rechts shiften

von Dennis Brücke (Gast)


Lesenswert?

Hi,

danke Dir für die schnelle Antwort, das Problem ist, das ich es leider
nicht an den ersten Ports habe :(

Hier Die Portauflistung
; PB0  =  E
; PB1  =  D/I
; PB2  =  DB3
; PB3  =  DB2
; PB4  =  DB1
; PB5  =  DB0
;
; PC0   =  CS2
; PC1  =  CS1
; PC2  =  DB7
; PC3  =  DB6
; PC4  =  DB5
; PC5  =  DB4

bitte frag mich jetzt nicht warum so kompliziert :( aber theoretisch
muss es doch trotzalledem gehen oder ?!

Gruß Dennis

von Dieter B (Gast)


Lesenswert?

Hallo Dennis

Dann mußt halt die unteren 4 Bits 2 Stellen nach links schieben und
dann mit dem PORTB ODER verknüpfen.

Für die oberen 4 Bits  machst du dann erst eine UND Verknüpfung mit
1111 0000 und schiebst sie dann 2 stelle nach rechts und mit Portc ODER
verknüpfen.

Mal dir das mal auf einem Blatt Papier auf, da sieht man das gut.


MFG
Dieter

von Dennis Brücke (Gast)


Lesenswert?

Uff... ODER ?!

Ich habe mir gerade mal folgendes Ausgedacht,
*********************************************************************
      mov temp2, befehl

      andi befehl, 0b00001111

        bst befehl, 3
        bld temp1, 0

      bst befehl, 2
        bld temp1, 1

      bst befehl, 0
      bld temp1, 3

      bst befehl, 1
      bld temp1, 2
*********************************************************************

Denkweise so korrekt, oder liege ich da vollkommen falsch ?!

Gruß Dennis

P.S: Würde mich über eine kleine bestätigung freuen

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.