4bit auf 8bit Port schreiben

Gast #1335587
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...
Gast #1335594
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?
#1335602
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
Gast #1335605
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
#1335606
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
Gast #1335618
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);

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren