GREETBoard ATMega128 – Ports ganz einfach ein- und ausschalten (Toggeln)

Während meiner Netzrecherche für den Schrittmotortreiber mit L6208 bin ich auf eine sehr schöne kleine Funktion aufmerksam geworden, die das Ein- und Ausschalten eines Ports sehr einfach macht. Mit dieser Methode entfällt die Abfrage ob ein Port eingeschaltet ist, um ihn dann auszuschalten völlig. Der Port wird einfach „getoggelt“, also umgeschaltet.

Bislang habe ich eine Hilfsvariable benutzt um den Zustand der LED zu speichern. War x == 0, dann wurde die LED aus-, ansonsten eingeschaltet.

Das folgende Beispiel habe ich aus dem letzten Beitrag GREETBoard ATMega128 – Interrupt gesteuerte LED mit timer0. Nachdem der Timer0 122x übergelaufen ist, wird der LED Zustand entsprechend der Hilfsvariable x geändert.

if ( tcount > 121 ) {           // 122*4,096ms Warten (499,712ms)
    if ( x == 0 ) {             // Wenn x gleich 0 ist...
        PORTC |= (1<<PC3);      // ...deaktiviere Port C3
        x = 1;                  // Setze X auf 1
    } 
    else {                      // Ansonsten...
        PORTC &= ~( (1<<PC3));  // ...aktiviere Port C3
        x = 0;                  // Setze X auf 0
    }
    tcount = 0;                 // Zähler wieder auf 0 setzen
}

Das hat zwar wunderbar funktioniert, aber ich finde es sehr umständlich. Die Alternative ist das Toggeln des Ports über die Bitmanipulation ^. Der folgende Code ist doch deutlich übersichtlicher und die Variable x entfällt vollständig.

if ( tcount > 121 ) {           // 122*4,096ms Warten (499,712ms)
    PORTC ^= (1 << PC3);        // LED umschalten
    tcount = 0;                 // Zähler wieder auf 0 setzen
}

OK, das mag keine große Sache sein, aber ich finde es toll und bin sehr froh es herausgefunden zu haben 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.