Variable auf Port schreiben und bits ausklammern

Gast #2054221
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
Gast #2054248
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

Antwort schreiben

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.

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.