mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interupts am 8535


Autor: Robert Nägele (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
?

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Robert Nägele (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
                    };

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.