mikrocontroller.net

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


Autor: Holger (Gast)
Datum:

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

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PORTC |= x

Autor: Fabian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PORTC = (PORTC & 0x0F) | (x & 0xF0);

Autor: g457 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
..depends.. exakt läufts im Allgemeinen ungefähr so:
uint8_t temp = PORTC;
temp &= 0x0F;
temp |= neuerwertfürdieoberenbits;
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

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> exakt läufts im Allgemeinen ungefähr so

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

Autor: Andreas (Gast)
Datum:

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

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.