Hallo,
ich hab gerade mit AVR-Programmierung angefangen. Vor 5-6 Jahren hatte
ich C mal im Studium, die Grundzüge sind mir also klar. PHP programmiere
ich täglich, das ist ja mein Job. Also wie ein Programm "funktioniert",
ist mir schon klar.
Nun habe ich eine Frage, wie ich den Zustand von Ports speichersparend
ablegen kann. Ich möchte gerne ein Variable haben, in der nur steht
"Taster gedrückt: ja/nein".
Dazu habe ich folgendes gemacht:
1 | struct {
|
2 | uint8_t t1;
|
3 | uint8_t t2;
|
4 | uint8_t t3;
|
5 | } Taster;
|
6 |
|
7 |
|
8 | int main (void) {
|
9 | while(1) {
|
10 | DDRD = 0b11100011;
|
11 | PORTD = 0b00000011;
|
12 |
|
13 | Taster.t1 = PIND & (1 << PIND2);
|
14 | Taster.t2 = PIND & (1 << PIND3);
|
15 | Taster.t3 = PIND & (1 << PIND4);
|
16 |
|
17 | [...]
|
18 | }
|
Das funktioniert. Ich möchte aber haben:
1 | struct {
|
2 | uint8_t t1 : 1; // Also nur ein Bit des Integers (Quasi-Bool)
|
3 | uint8_t t2 : 1;
|
4 | uint8_t t3 : 1;
|
5 | } Taster;
|
6 |
|
7 |
|
8 | int main (void) {
|
9 | while(1) {
|
10 | DDRD = 0b11100011;
|
11 | PORTD = 0b00000011;
|
12 |
|
13 | Taster.t1 = PIND2;
|
14 | Taster.t2 = PIND3;
|
15 | Taster.t3 = PIND4;
|
16 |
|
17 | [...]
|
18 | }
|
Dass das mit PINDx nicht geht, weil es nur ein Alias ist, ist mir klar.
Ich würde aber gerne nur den Wahrheitswert des einzelnen Bits speicher,
um es einfacher ansprechen zu können.
Wenn es nicht geht, ist's auch OK. Nur würde ich's gerne mal wissen...
Viele Grüße & danke schonmal,
Matthias