Ich versuche zu lernen, wie man Interrupts für ein Projekt mit einem Attiny85 verwendet. Ich habe ein einfaches Programm aus dem geschrieben, was ich aus Tutorials gelernt habe. Wenn ich jedoch versuche, das Programm in Atmel Studio zu erstellen, erhalte ich diese Fehlermeldung:
"Fehler 2 statische Deklaration von '__vector_1' folgt nicht-statischer Deklaration"
Ich verstehe nicht, was das bedeutet oder wo mein Fehler lag. Ich habe überall nach Antworten gesucht, aber ich habe den Grund für den Fehler noch nicht gefunden. Hier ist mein Code:
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
int main (void)
{
DDRB = 0b11111011; // set all pins to be output except PB2 to prevent false signals
GIMSK |= (1<<INT0); //set PB2 to interrupt
sei();
MCUCR |=(1<<ISC00); //set to detect any change as interrupt
MCUCR &= ~(1<<ISC01);
ISR(INT0_vect)
{
// dot
PORTB = 0b00001000;
_delay_ms(500);
PORTB = 0b00000000;
_delay_ms(200);
// dot
PORTB = 0b00001000;
_delay_ms(500);
PORTB = 0b00000000;
_delay_ms(200);
// dot
PORTB = 0b00001000;
_delay_ms(500);
PORTB = 0b00000000;
_delay_ms(600);
// dash
PORTB = 0b00001000;
_delay_ms(1000);
PORTB = 0b00000000;
_delay_ms(500);
// dash
PORTB = 0b00001000;
_delay_ms(1000);
PORTB = 0b00000000;
_delay_ms(500);
// dash
PORTB = 0b00001000;
_delay_ms(1000);
PORTB = 0b00000000;
_delay_ms(600);
// dot
PORTB = 0b00001000;
_delay_ms(500);
PORTB = 0b00000000;
_delay_ms(200);
// dot
PORTB = 0b00001000;
_delay_ms(500);
PORTB = 0b00000000;
_delay_ms(200);
// dot
PORTB = 0b00001000;
_delay_ms(500);
PORTB = 0b00000000;
_delay_ms(2000);
}
while (1) {
}
}
Wenn jemand Hilfe leisten könnte, wäre es sehr zu schätzen.
Danke schön,
-David
Sie haben Ihren ISR innerhalb von geschrieben main()
. Tun Sie das nicht; Schließen Sie zuerst die vorherige Funktion.
void main(void)
{
...
}
ISR(...)
{
...
}