Hallo,
ich möchte an ein Schieberegister Daten ausgeben. Jetzt habe ich mir mal den Artikel "Portexpander" im Roboternetz Wissen Bereich durchgelesen.
Funktioniert auch alles, bloß kann ich mir als C Einsteiger den Code nicht ganz erklären. Das ärgert mich gerade sehr.
Hier mal der Code:
Ich habe den Code mal soweit kommentiert wie ich klar komme. Mit * wird wohl ein sog. Pointer benutzt? Ich habe mal im Netz nach Antworten gesucht, leider ohne ErfolgCode:/* SERiell nach PArallel (serpa) via Software */ #include "serpa.h" /* Array fuer die Daten */ unsigned char serpa[SERPA_SIZE]; void serpa_init () { /* Verwendete Ports auf OUT */ MAKE_OUT (PORT_SER); MAKE_OUT (PORT_SCK); MAKE_OUT (PORT_RCK); /* SCR und RCK auf definierten Level HIGH */ SET (PORT_SCK); SET (PORT_RCK); } void serpa_out () { unsigned char anz = SERPA_SIZE; unsigned char* serp = serpa+SERPA_SIZE; //??? // do...while pro Byte einmal -> wird bestimmt durch Array Größe do { unsigned char bits; //Anzahl Bits unsigned char data = *--serp; // ??? wohl ein Pointer /* 8 Bits pro Byte rausschieben */ // for schleife pro Bit einmal durchlaufen (8 mal) for (bits = 8; bits > 0; bits--) { CLR (PORT_SER); //SER Port auf Masse if (data & 0x80) //??? { SET (PORT_SER); //SER Port auf 1 } data <<= 1; //??? /* Strobe an SCK schiebt Daten im Gaensemarsch */ /* um 1 Position weiter durch alle Schieberegister */ CLR (PORT_SCK); //Takt Port auf Masse SET (PORT_SCK); //Takt auf 1 } } while (--anz > 0); /* Strobe an RCK bringt die Daten von den Schieberegistern in die Latches, also übernehmen wenn alle Arrays geschoben wurden*/ CLR (PORT_RCK); SET (PORT_RCK); }![]()
Ich wäre euch dankbar wenn wir den Code so auseinander nehmen können das auch ich es verstehe.
DANKE
Lesezeichen