Gast
#100451
Halli hallo an Alle!
Habe mich heute mal an dem externen Interrupt INT0 versucht. Bin zwar
zu einem Ergebnis gekommen, aber so richtig verstanden habe ich das
noch nicht.
Verwende folgenden Code:
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#define F_CPU 3680000 /* 3,68Mhz */
/*
** module global variables (note: global variables are automatically
initialized to zero)
*/
static volatile uint8_t led; // use volatile when variable is
accessed from interrupts
/*
** functions
*/
SIGNAL(SIG_INTERRUPT0)
/* signal handler for external interrupt int0 */
{
led++;
PORTB = ~led;
}
int main(void)
{
DDRB = 0xff; // use all pins on PortB for output
PORTB = 0xff; // and turn off all LEDs
DDRD = 0x00; // use all pins on port D for input
PORTD = 0xff; // activate internal pull-up
outp((1<<INT0), GIMSK); // enable external int0
outp((1<<ISC01)|(0<<ISC00) , MCUCR); // falling egde: int0
sei(); // enable interrupts
for (;;) {} // loop forever
}
Ich habe einen ATmega16 und ein STK500. Der Interrupt wird leider nur
ausgelößt, wenn ich den Taster2 drücke. Wieso wird der Interrupt nicht
bei den anderen ausgelöst?
Habe das auch mal mit einem anderen Programm getestet. Da war Port B
der Eingang...und gar nichts passierte.
Wie verhält sich das mit den Eingangsports und den Interrupts? Muss man
denn noch speziell angeben, auf welchem Port/Pin der Interrupt zu
erwarten ist? Oder geht es nicht mit jedem Port?
Bin sehr dankbar für jeden guten Hinweis,
Ciao Thomas