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; }







Zitieren

Lesezeichen