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...
>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?
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
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
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
@Karl: Die Möglichkeit hatte ich auch schon in Betracht gezogen. Ich hab aber gehofft dass es vielleicht auch einfacher geht :-)
>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); |
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.