Forum: Mikrocontroller und Digitale Elektronik Variable auf Port schreiben und bits ausklammern


von Holger (Gast)


Lesenswert?

Hallo

Ich habe folgendes Problem. Ich möchte von einem Port die Pins 0-3 für 
eine Motor benutzen und  die Pins 4-7 für eine Anzeige. Jetzt möchte ich 
aber eine  Variable auf den Port schreiben und die Pins 0-3 sollen sich 
aber nicht ändern.

Bsp
 PORTC= 0b00001010  //Port hat folgenden Zustand
 x= 0b11000000      //jetzt möchte ich die variable x auf Port schreiben 
aber bit 0-3 sollen so bleiben wie sie sind
also sollte jetzt auf PORTC= 0b11001010 stehen.

kann mir bitte jemand sagen wie ich das hinbekomme

vielen dank
holger

von Andreas (Gast)


Lesenswert?

PORTC |= x

von Fabian (Gast)


Lesenswert?

PORTC = (PORTC & 0x0F) | (x & 0xF0);

von g457 (Gast)


Lesenswert?

..depends.. exakt läufts im Allgemeinen ungefähr so:
1
uint8_t temp = PORTC;
2
temp &= 0x0F;
3
temp |= neuerwertfürdieoberenbits;
4
PORTC = port;

Jetzt musst Du noch dafür sorgen dass der Block atomar ausgeführt wird, 
d.h. entweder sind da per se Interrupts deaktiviert oder Du machst noch 
einen ATOMIC_BLOCK(ATOMIC_RESTORE_STATE) (oder was vergleichbarss) 
aussen rum.

HTH

von Tom (Gast)


Lesenswert?

> exakt läufts im Allgemeinen ungefähr so

Naja, exakt läuft es so schonmal gar nicht!

von Andreas (Gast)


Lesenswert?

Fabian schrieb:
> PORTC = (PORTC & 0x0F) | (x & 0xF0);

Für die gestellte Aufgabe ist das natürlich overkill. Der TE wollte ja 
nur wissen, wie man 1en reinschreibt, und nicht, wie man sie wieder 
wegbekommt. ;)

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.