Dieses Programm erzeugt eine hin-und rücklaufende Welle mit Interrupts in Atmel Studio. Der Hardwareaufbau entspricht dem Wellen-Programm der vorherigen Seite.

#include <avr/io.h>
#define F_CPU 16000000UL
#include <util/delay.h>
#include <avr/interrupt.h>

volatile
int welle_links = 0; //volatile, da die Variable im Interrupt verändert wird ISR(INT0_vect) { //Der Interrupt ändert nur die Variable und das Hauptprogramm reagiert darauf. welle_links ^= 1; // Der Wert der Variablen wird zwischen 0 und 1 getoggelt } int main(void) { DDRB |= 0b00111111; //Ausgänge setzen EICRA |= (1<<ISC01) | (1<<ISC00); //Interrupt konfigurieren ... EIMSK |= (1<<INT0); sei(); //... und aktivieren while (1) { // Endlosschleife if(welle_links) { //Ist die Variable 1, läuft die Welle immer von links nach rechts, ... for(int i = 5; i >= 0; i--) { DDRB |= (1 << i); _delay_ms(1000); DDRB &= ~(1 << i); } } else { // ...sonst immer von rechts nach links for(int i = 0; i <= 5; i++) { DDRB |= (1 << i); _delay_ms(1000); DDRB &= ~(1 << i); } }
    }
}
Zuletzt geändert: Montag, 28. Februar 2022, 12:45