Forum: Mikrocontroller und Digitale Elektronik Interupts am 8535


von Robert Nägele (Gast)


Lesenswert?

Hi ,

Ich habe mir einen Programmer gebastelt und arbeite im Moment
mit dem CodeVision Compiler und das funktioniert auch ganz gut.

Bisher habe ich ein bissl mit LEDs rumgespielt habe den gesamten PortC
mit LEDs versehen und der PORTD hat hier Taster.
Nach verschiedenen rumspielereien wollte ich mal wissen ob es ein paar
Tutorials gibt die auch was bringen ? Ergo die Interupt geschichten
oder ähnliches ? Ich habe in C jetzt noch nicht so die Ahnung.

Des weiteren schaffe ich es auch nicht ein "einfaches" Lauflicht zu
coden. Wenn ich sowas mache :

        PORTC = a ;
  delay_ms(speed);
  a = a + 1 ;

Dann arbeitet der µC ja wie ein Zähler aber wie kann ich das mit
wenigen Zeilen hinbekommen das er als Lauflicht fungiert ohne 7 Zeilen
zu nutzen die ich dann durchgehe ?

Habe es zuerste mit dem Bitshiften versucht also "a = a << 1"
nur will das leider auch nicht so recht. Kann mir da mal jemand helfen
?

von Olaf (Gast)


Lesenswert?

Hey Robert,

wie sieht denn dein Schleifenkonstrukt um a = a << 1; aus? Du musst
natürlich dafür sorgen, dass a wieder mit 1 initialisiert wird, nachdem
das MSB rausgeschoben wurde.

Gruß,
Olaf

von Robert Nägele (Gast)


Lesenswert?

Ich hab das nun ein bisschen anderst gelöst denke aber mal das der Code
nicht gerade sauber ist ;P

unsigned s1, s2, s3, p1, p2, p3, p4,  ;

   s1 = PIND.5      ;
   s2 = PIND.6      ;
        s3 = PIND.7  ;
  p1 = PIND.0  ;
  p2 = PIND.1  ;
  p3 = PIND.2  ;
  p4 = PIND.3  ;

        // Speed Selection
        if ( s1 == 0 )   speed = 100 ;
        if ( s2 == 0 )  speed = 200 ;
        if ( s3 == 0 )  speed = 500 ;
        if (( s1 != 0 ) && ( s2 != 0 ) && ( s3 != 0 )) speed = 50 ;

            // PROGRAM 1
            // Direction Selection
            if ( direction == 1 )
              {
                    i = 0xFF - a ;        // LED Inverter
        PORTC = i ;        // Ausgabe
        delay_ms(speed) ;                       // Pause
        a = a * 2 ;        // LedCycler
                    if ( a == 0x80 ) direction = 0 ;    // If EndofLeds
toogle Direction
                    };
        if ( direction == 0 )
          {
          i = 0xFF - a ;        // LED Inverter
        PORTC = i ;        // Ausgabe
        delay_ms(speed) ;                       // Pause
        a = a / 2 ;        // LedCycler
                    if ( a == 0x01 ) direction = 1 ;    // If EndofLeds
toogle Direction
                    };

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.