Forum: Compiler & IDEs Byte aus Bits zusammenbasteln


von flyingwolf (Gast)


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?

von Karl H. (kbuchegg)


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.

von flyingwolf (Gast)


Lesenswert?

Kutz und knackig.
Danke.

von Thomas (Gast)


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.

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Peter P. (bonsaibaum)


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 ...

1
typedef union {
2
  uint8_t all;
3
  struct {
4
    uint8_t Pin0:1;
5
    uint8_t Pin1:1;
6
    uint8_t Pin2:1;
7
    uint8_t Pin3:1;
8
    uint8_t Pin4:1;    
9
    uint8_t Pin5:1;
10
    uint8_t Pin6:1;
11
    uint8_t Pin7:1;
12
  };
13
}MyPortA;

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

von Peter P. (bonsaibaum)


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

von Johannes M. (johnny-m)


Lesenswert?

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

von Rolf Magnus (Gast)


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.

von Uhu U. (uhu)


Lesenswert?

In C kann man sich eine Funktion schreiben, die das erledigt.

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.