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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.