4bit auf 8bit Port schreiben

Gast #1335587
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
>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
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
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
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
>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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.