Interupts am 8535

Gast #70549
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
?
Gast
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
Gast
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
                    };

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.