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