Forum: Compiler & IDEs 4bit auf 8bit Port schreiben


von ben.pu (Gast)


Lesenswert?

Hallo liebe Leute,

in zwei Situationen stoße ich bereits auf das Problem wenn ich einen 
4bit Wert auf einen 8bit Port legen und die restlichen 4bit unangetastet 
bleiben sollen.

Zb hat der Port den Wert 0b01011100. Auf die niederwertigen 4 bit soll 
nun der Wert 0b0101 geschrieben werden. Ist die mit einem logischen 
Befehl möglich oder nur duch mehrere kombinatorische Schritte machbar?

MFG ben.pu

PS: Problem tritt bei 4bit Ansteuerung von Displays und nun Ansteuerung 
von Touchscreens zustande...

von Zulu (Gast)


Lesenswert?

>Ist die mit einem logischen Befehl möglich
Was meinst Du mit einem "logischen Befehl"?

>oder nur duch mehrere kombinatorische Schritte machbar?

Was hat Kombinatorik (Untersuchung von Reihenfolgen von unterscheidbaren 
und nicht-unterscheidbaren Elementen) damit zu tun?

von Karl H. (kbuchegg)


Lesenswert?

ben.pu schrieb:
> Hallo liebe Leute,
>
> in zwei Situationen stoße ich bereits auf das Problem wenn ich einen
> 4bit Wert auf einen 8bit Port legen und die restlichen 4bit unangetastet
> bleiben sollen.
>
> Zb hat der Port den Wert 0b01011100. Auf die niederwertigen 4 bit soll
> nun der Wert 0b0101 geschrieben werden. Ist die mit einem logischen
> Befehl möglich oder nur duch mehrere kombinatorische Schritte machbar?

In C gehts nur mit einer Sequenz

  aktuellen Wert holen
  die 4 Bits auf 0 setzen
  die neuen 4 Bits auf 1 setzen
  neuen Wert ausgebem

von ben.pu (Gast)


Lesenswert?

Is bissel umständlich auusgedrückt aber mit ne kombinatorischen Befehl 
meinte ich sowas wie einen |= Befehl...

Kombinatorik is für mich auch die Verknüpfung von verschiedenen 
Operationen also Logik. Biher hab ich immer die Nullen mit dem &= 
geschrieben und die Einsen mit dem |=. Ich suche noch nach einer 
Möglichkeit falls es das geben sollte der die 4bit mit einer CodeZeile 
auf den Port schreibt.

LG

von Peter D. (peda)


Lesenswert?

ben.pu schrieb:
> PS: Problem tritt bei 4bit Ansteuerung von Displays

Wundert mich aber stark, daß Dir Google mit diesen Suchbegriff nicht 
schon Tonnen richtiger Antworten ausgespuckt hat.


Die universelle Methode sind Bitzugriffe, dann kannst Du die Pins 
würfeln, wie es für das Layout am besten geht:

http://www.mikrocontroller.net/attachment/30300/lcd_drv.zip


Sind 4 Pins richtig, dann gehts auch mit AND/OR.


Sind

von ben.pu (Gast)


Lesenswert?

@Karl:
Die Möglichkeit hatte ich auch schon in Betracht gezogen. Ich hab aber 
gehofft dass es vielleicht auch einfacher geht :-)

von Zulu (Gast)


Lesenswert?

>Kombinatorik is für mich auch die Verknüpfung von verschiedenen
>Operationen also Logik.

So? In meiner Welt heisst das "boolsche Logik" damit man es von 
Kombinatorik besser unterscheiden kann. :-)
1
unsigned char mask = 0x0F;
2
3
unsigned char neuer_wert 0x0B; // muss kleiner 0x10 sein
4
5
PORTB = (PORTB & ~mask) | neuer_wert;

oder
1
unsigned char mask = 0x0F;
2
3
unsigned char neuer_wert 0x0B; // muss nicht eingeschränkt werden
4
5
PORTB |= (PORTB & ~mask) | (neuer_wert & mask);

von ben.pu (Gast)


Lesenswert?

OK dankeschön!!!
Hat sich damit erledigt.

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.