I/O - ein LED-Lauflicht



  • Hi @all,

    ich möchte mir ein kleínes LED-Lauflicht basteln, welches über den Parallelport am PC gesteuert werden soll. Ich habe mir dazu auch ein Buch gekauft, in dem so etwas auch beschrieben ist, jedoch- werden im Buch die Haupt-Funktionen zur Steuerung des Parallelports nicht weiter erläutert, und genau hierin liegt mein Problem:

    char light[12] = " 0\r";

    outb (1<<i, port_adr);
    write (STDOUT_FILENO, &(light[i]), 11-i);

    Die Deklaration der beiden Funktionen verstehe ich nicht so recht-ich weiß ja, dass mir die Funktion outb, den Wert des 1. Parameters in die Addresse port_adr schreibt. Aber...was bedeutet denn genau der Ausdruck 1<<i ?
    Ich meine so was kenn ich ja schon von cout, aber wieso hier ? Hier brauche ich doch nur einen Wert anzugeben, ...z.B. i, aber wozu das 1<< ?

    Bei der zweiten Funktion bin ich mir leider auch etwas unschlüssig, vor allem wofür das Array char light [12] gut sein soll...für was stehen denn eigentlich die Leerzeichen und das 0\r in dem Array ?

    Ich würde mich echt rießig freuen, wenn sich jemand, der den oben stehenden Code versteht, (sich auf mein niedriges Niveau herablassen könnte *lol*) und mir erklären könnte, wie und warum....

    Schöne Grüße
    Chris



  • << ist der Bitshift-Operator. Es werden also in der Binärdarstellung i Nullen hinten angehängt. Wozu das write gut sein soll, kann ich dir auch nicht sagen. Es scheint mir auch irgendwie auf den nicht initialisierten Teil von light[] zuzugreifen...



  • Xzibit schrieb:

    char light[12] = "          0\r";
    
    outb (1<<i, port_adr);
    write (STDOUT_FILENO, &(light[i]), 11-i);
    

    Die Deklaration der beiden Funktionen verstehe ich nicht so recht-ich weiß ja, dass mir die Funktion outb, den Wert des 1. Parameters in die Addresse port_adr schreibt. Aber...was bedeutet denn genau der Ausdruck 1<<i ?
    Ich meine so was kenn ich ja schon von cout, aber wieso hier ? Hier brauche ich doch nur einen Wert anzugeben, ...z.B. i, aber wozu das 1<< ?

    Mit << verschiebst du Bits!

    Die 1 ist in Binärschreibweise 00000001
    Wenn i=1 ist, dann wird die 1 so verändert, dass 00000010 daraus entsteht.
    Wenn i=2 ist, dann wird die 1 so verändert, dass 00000100 daraus entsteht.

    Jede 1 steht für einen mit strom versorgten Pin am Port.

    Bei der zweiten Funktion bin ich mir leider auch etwas unschlüssig, vor allem wofür das Array char light [12] gut sein soll...für was stehen denn eigentlich die Leerzeichen und das 0\r in dem Array ?

    Hier schreibst du, welche Lampe gerade leuchtet. Die \0 Bedeutet String Ende.



  • Yeah vielen vielen Dank für eure Antworten-
    ihr wisst gar nicht, wie sehr ihr mir beide damit weitergeholfen habt.

    Vielen vielen Dank nochmals und 'n schön Gruß
    Chris


Anmelden zum Antworten