mikrocontroller.net

Forum: Compiler & IDEs Byte aus Bits zusammenbasteln


Autor: flyingwolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann man ein Byte aus einzelnen Bits zusammenbasteln?
also z.B. PB1,PB2,PC1,PC3,PD0,PD1,PD3,PD4 = MyPorts,
so dass ich dann mittels einer einzigen Zuweisung, z.B.
Myports = char_irgendwas;
den Inhalt eines Bytes den Ports zuweisen kann?

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

Bewertung
0 lesenswert
nicht lesenswert
flyingwolf wrote:
> Kann man ein Byte aus einzelnen Bits zusammenbasteln?
> also z.B. PB1,PB2,PC1,PC3,PD0,PD1,PD3,PD4 = MyPorts,
> so dass ich dann mittels einer einzigen Zuweisung, z.B.
> Myports = char_irgendwas;
> den Inhalt eines Bytes den Ports zuweisen kann?

Nein.

Autor: flyingwolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kutz und knackig.
Danke.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
flyingwolf wrote:
> Kann man ein Byte aus einzelnen Bits zusammenbasteln?
> also z.B. PB1,PB2,PC1,PC3,PD0,PD1,PD3,PD4 = MyPorts,
> so dass ich dann mittels einer einzigen Zuweisung, z.B.
> Myports = char_irgendwas;
> den Inhalt eines Bytes den Ports zuweisen kann?

Ja.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Thomas (Gast)

> flyingwolf wrote:
> (...)
>
> Ja.

Nein. Karl Heinz hat das bereits korrekt beantwortet, man kann nicht.
Vermutlich hast Du die Aufgabenstellung nicht richtig verstanden.

Autor: Peter P. (bonsaibaum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie rufus + karl heinz schon geschrieben haben, geht das für mehrere 
ports nicht, man kann es aber für einen port über den umweg einer union 
machen ...

typedef union {
  uint8_t all;
  struct {
    uint8_t Pin0:1;
    uint8_t Pin1:1;
    uint8_t Pin2:1;
    uint8_t Pin3:1;
    uint8_t Pin4:1;    
    uint8_t Pin5:1;
    uint8_t Pin6:1;
    uint8_t Pin7:1;
  };
}MyPortA;

Dann kannst du irgendwo (z.B. im Timer) dann einfach
PORTA = MyPortA.all;
 machen.

Autor: Peter P. (bonsaibaum)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn einem dann noch wirklich fad ist, kann man einen Zeiger auf die 
Union machen, den dann auf PORTx umbiegen und dann direkt die Pins am 
Port setzen.

Ist halt 'etwas' langsamer, da jedesmal ein zeiger ausgelesen werden 
muss.

lg
  Peter

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich denke mal, es geht dem OP hier tatsächlich um Pins an mehreren 
unterschiedlichen Ports. Und da geht es so nicht, basta!

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In C nicht, aber in C++ kann man sich eine Klasse zusammenbasteln, die 
das erledigt. Das gibt aber ziemlich viel Bitgefriemel, das unter 
Umständen relativ großen und langsamen Code zur Folge hat.

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In C kann man sich eine Funktion schreiben, die das 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.