links shift / rechts shift



  • ich will über das lpt port leds ansteuern. und will das die von rechts nach links und von links nach rechts fahren (lauflicht).

    gibt es da was immer 1 dazuzählt zum latzten stand der led?-habe es zur zeit so das ich jedes led einzaln anspreche!

    ich glaube das heißt links- / rechts shift oder?
    wie wende ich das an??

    mfg linux-tux 🙂



  • linux-tux schrieb:

    ich glaube das heißt links- / rechts shift oder?

    Links- bzw. Rechtsshift (in C durch << bzw. >> geschrieben) ist sozusagen eine Multiplikation mit einem Vielfachen von zwei. Dabei werden die Bits nach links bzw. rechts verschoben.

    Beispiel:
    Die Zahl 5 ist in binärer Schreibweise 101. Wird jetzt ein linksshift von 1 angewendet, so ergibt sich 1010 (Rest wird mit Nullen aufgefüllt). 1010 in binärer Schreibweise ist die 10 in dezimaler Schreibweise.

    Ein Rechtsshift funktioniert genau andersherum, wobei Ziffern, die 'rausfallen' einfach weg sind (nicht wie bei rotate).

    Um Deine Frage zu beantworten:

    linux-tux schrieb:

    gibt es da was immer 1 dazuzählt zum latzten stand der led?-habe es zur zeit so das ich jedes led einzaln anspreche!

    Ja, der ++ operator macht genau das.

    Beispiel:

    int a = 0;
    a++; //a ist jetzt 1
    a++; //a ist jetzt 2
    


  • aha ok!

    ich habe jetzt die ausgabe 0x1 und die soll auf 0x2, dann 0x4, dann 0x8 weiter laufen und wieder zurück!

    das heißt ich mache dan einfach nur

    0x1++;

    oder????

    😞 habe vom links shift / rechts shift keine ahnung!!!!

    mfg linux-tux
    🙂



  • Nein, dann machst Du:

    a = 1;
    while (!amlinkenanschlag())
      a << 1;
    while (!amrechenanschlag())
      a >> 1;
    


  • Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Linux/Unix in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • darf ich dir mein programm schicken?
    und kannst du mir bitte dann die fehlenden zeilen umschreiben oder weiterschreiben?
    ich brauche nämlich ein beispiel. weil so wie du es aufgeschrieben hast funktioniert es nicht!

    mfg linux-tux



  • linux-tux schrieb:

    darf ich dir mein programm schicken?
    und kannst du mir bitte dann die fehlenden zeilen umschreiben oder weiterschreiben?
    ich brauche nämlich ein beispiel. weil so wie du es aufgeschrieben hast funktioniert es nicht!

    mfg linux-tux

    Poste den Code doch einfach hier: http://rafb.net/paste/ und stelle dann den
    Link hier in das Post rein. Dann kann sich jeder den Code anschauen.

    mfg
    v R



  • ok!habe ich!ich habe es zur zeit so gelöst aber ich will es nun mit dem links shift und rechts shift machen.

    #include <stdio.h>
    #include <string.h>
    #include <sys/io.h>
    #include <unistd.h>
    #define D_LPT1_DATA		0x378
    
    int main( int argc, char *argv[] )
    {
    	int I_port;
    	char *pC_port;
    
    	I_port = D_LPT1_DATA;
    	if ( ioperm( I_port, 3, 1) != 0 ) { /* get IO/perm */
    	  perror( "ERROR: Kann LPT Device nicht öffnen,da es gerade verwendet wird." );
    	  return(-1);
    	}
    	outb( 0x00, I_port );
    	printf( "\nProgramm wurde gestartet. Mit STRG+C wir das Programm beendet.\n\n",
    		pC_port );
    	printf( "Start: " ), fflush ( stdout);
    	while( 1==1 ) {
    	outb( 0x1, I_port );
    	printf( "1-" ), fflush ( stdout);
    	usleep( 1*70*1000 );
    	outb( 0x2, I_port );
    	printf( "2-" ), fflush ( stdout);
    	usleep( 1*70*1000 );
    	outb( 0x4, I_port );
    	printf( "3-" ), fflush ( stdout);
    	usleep( 1*70*1000 );
    	outb( 0x8, I_port );
     	printf( "4 -- " ), fflush ( stdout);
    	usleep( 1*70*1000 );
    	}
    	return ( 0 );
    
    }
    

Anmelden zum Antworten