Ah, vielen Dank für eure Hilfe. Hab's gerad eben auch hinbekommen... nur eine Frage zu dem MCUCR hab ich noch: Warum überschreibt der Zweite das Erste? Laut Datenblatt sind ISC01 und ISC00 unabhängig voneinander - je nachdem, welche der insgesamt 4 Kombinationsmöglichkeiten ich wähle, habe ich die 4 Modi: (vorne: ISC01 / hinten: ISC00) "00 - Interrupt bei Low-Level auslösen" "01 - bei irgend einer Pegeländerung" "10 - bei fallender Flanke" "11 - bei steigender Flanke"
Ist dem nicht so? Wenn nein - wie kann ich dann die 4 verschiedenen Modi aussuchen?
Hier mal noch mein kompletter Code... hilft vielleicht mal irgend einem Anfänger weiter, der vor dem selben Rätsel wie ich steht:
Code:
#include <avr/delay.h>
#include <avr/interrupt.h>
//Variablen
uint8_t counter;
uint8_t i;
//Interruptroutine, die ausgelöst werden soll
ISR(INT0_vect)
{
for(i=0; i<2; i++)
{
PORTC |= (1<<0);
//wait 16*65536
counter = 0;
while(counter < 16)
{
counter++;
_delay_loop_2(65535);
}
PORTC &= ~(1<<0);
//wait 16*65536
counter = 0;
while(counter < 16)
{
counter++;
_delay_loop_2(65535);
}
}
}
int main(void)
{
/*###Initialisierungsphase###*/
//Pins bzw. Ports als Ein-/Ausgänge konfigurieren
DDRC |= 0x11; //10001000 -> PORTC.4 ist blinkende LED im Hauptprogramm, PORTC.0 ist Anzeige des Interrupts
DDRD |= 0x03; //00000011 -> PORTD.2 ist Interrupt0 (Der ausgelöst werden soll)
//Interrupts initialisieren
MCUCR &= ~(1<<ISC01); //stellen den Modus ein, wie der Interrupt auslöst - je nach Art des Sensorsignals muss ein anderer Modus gewählt werden
MCUCR |= (1<<ISC00); //00 bei Low-Level //01 bei Änderung des Pegels (egal, welche) //10 bei fallender Flanke (high zu low) //11 bei steigender Flanke (low zu high)
GICR |= (1<<INT0); //aktiviert den Interrupt an sich
sei(); //aktiviert das globale Interrupt Enable-Flag (I im SREG-Register)
while(1)
{
PORTC |= (1<<4);
//wait 16*65536
counter = 0;
while(counter < 16)
{
counter++;
_delay_loop_2(65535);
}
PORTC &= ~(1<<4);
//wait 16*65536
counter = 0;
while(counter < 16)
{
counter++;
_delay_loop_2(65535);
}
}
return 1;
}
Vielen Dank für eure Hilfe!! Schaut mal bitte noch wegen dem MCUCR-Register, das verwirrt mich noch. Ansonsten - alles gelernt, was auf dem Plan stand. Danke!!!
Grüßle
Corone
Lesezeichen