Schieberegister lesen vs. Array / Variable mit C

OP Persönliche Seite #1537210
Lesenswert?

Hallo!

Ich lese mein Schieberegister mit nem kleinen C-Programmschnipsel ein:
1
void inp_read()
2
{
3
  INP_PORT |= (1<<INP_PL);
4
  INP_PORT &= ~(1<<INP_PL);  // An /PL neg. stroben!
5
  INP_PORT |= (1<<INP_PL);  // = Eingänge in Speicher lesen!
6

7
  unsigned char bits;
8

9
  // 8 Bits einlesen!
10
  for (bits = 8; bits > 0; bits--)
11
  {
12
    INP_PORT |= (1<<INP_CLK);
13
    INP_PORT &= ~(1<<INP_CLK);  // An Clock neg. stroben!
14
    INP_PORT |= (1<<INP_CLK);  // = Eins weiterschieben!
15

16
    if (INP_PORT2 & (1<<INP_DIN))
17
    {
18
      inp_data[0] |= (1<<bits);
19
    } else {
20
      inp_data[0] &= ~(1<<bits);
21
    }
22
  }
23

24

25
}

Das Programm funktioniert übrigens, wenn ich zur Diagnose einfach 
anstatt "inp_data[0] |= (1<<bits);" die Eins oder Null am LCD ausgebe. 
Also die Verkabelung ist Ok, der Programmablauf auch.

Nur die Sache mit dem Array ist etwas doof. Ich würde gern die acht Bits 
reinstopfen und dann später abfragen können.

Und im Hauptprogramm versuche ich so, den Array zu lesen:
1
  
2
    while(1)
3
    {
4
  inp_read();
5

6
  unsigned char bit;
7
    for (bit = 8; bit > 0; bit--)
8
    {
9
      if (inp_data[0] & (1<<bit))
10
      {
11
        lcd_data('1');
12
      } else {
13
        lcd_data('0');
14
      }
15
  }
16
  lcd_home();
17
    }

Das Problem liegt im Handling des Arrays in C.

Wie kann ich also die in der Einlese-Prozedur gemerkten Bits irgendwie 
möglichst stinkeinfach in ner Variable/Array speichern und auch wieder 
stinkeinfach abfragen?

Danke schonmal für eure hoffentlich hilfreichen Tipps! :-)

Stefan
Gast #1537218
Lesenswert?

Anders gehts nicht, es gibt in C keinen Datentyp, der ein Bit lang ist, 
also auch keine Arrays desselben.

Spendier jedem Bit ein eigenes Byte und dann hat sichs, oder sind wir 
auf einem AVR? Falls ja, hast du dir mit (1<<bit) mit Abstand eine 
unglaublich aufwendige Operation eingehandelt :-)

Denk also mal über Makros und/oder ganze Bytes nach.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren