-
externer Interrupt
Hallo,
der Interrupt wird nicht ausgelöst, weil der Befehl sei(); das "I" Flag nicht setzt. In AVR Studio kann ich das verfolgen. Wenn ich aber
Code:
GICR |= (1<<INT0) | (1<<INT1);
deaktiviere, dann wird der Befehl sei(); ausgeführt. Ich muss doch sowohl die Bits INT0 und INT1 und das "I"-Flag setzen. Aber die stören sich gegenseitig. Warum?
Es wird der MEGA16 eingesetzt.
Code:
#include <avr/io.h>
#include <avr/interrupt.h>
#define F_CPU 7372800UL
#include <util/delay.h>
ISR(TIMER0_OVF_vect)
{
PORTA=0xdd;
}
ISR(TIMER1_OVF_vect)
{
PORTA=0xaa;
}
void init(void)
{
TCCR1B = _BV(CS11);
GICR |= (1<<INT0) | (1<<INT1); // Interrupt Enable
DDRD &= ~( ( 1 << PIND2 ) | ( 1<<PIND3) ); //INT0 und INT1 Eingang
PORTD=_BV(INT0) | _BV(INT1); //Pullups aktibieren
sei();
DDRA = 0xff;
}
int main(void)
{
uint8_t i = 0;
init();
for(;;)
{
for(i=0;i<255;i++)
{
PORTA = i;
_delay_ms(50);
}
for(i=255;i>0;i--)
{
PORTA = i;
_delay_ms(50);
}
}
return 0;
}
-
Hallo Leute,
Kommando zurück!
Habe beim Kopieren Codeschnipsel durcheinander geschmissen. Ich meinte
nicht den TIMER Interrupt in der ISR, sondern den externen Interrupt.
Also, ich checke noch mal durch.
Und hier:
PORTD=_BV(INT0) | _BV(INT1); //Pullups aktibier
Klar!!!! Anfängerkrimskrams. Learning by doing. Muss man (noch) mit
leben.
Danke zunächst.
Udo