mikrocontroller.net

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


Autor: ben.pu (Gast)
Datum:

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

Autor: Zulu (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: ben.pu (Gast)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

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

Autor: ben.pu (Gast)
Datum:

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

Autor: Zulu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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. :-)
unsigned char mask = 0x0F;

unsigned char neuer_wert 0x0B; // muss kleiner 0x10 sein

PORTB = (PORTB & ~mask) | neuer_wert;

oder
unsigned char mask = 0x0F;

unsigned char neuer_wert 0x0B; // muss nicht eingeschränkt werden

PORTB |= (PORTB & ~mask) | (neuer_wert & mask);

Autor: ben.pu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK dankeschön!!!
Hat sich damit erledigt.

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.