meldano
20.01.2008, 21:02
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:
/* 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 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 Erfolg :(
Ich wäre euch dankbar wenn wir den Code so auseinander nehmen können das auch ich es verstehe.
DANKE
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:
/* 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 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 Erfolg :(
Ich wäre euch dankbar wenn wir den Code so auseinander nehmen können das auch ich es verstehe.
DANKE