Gast
#724931
Hi, mein Programm resettet sich bei externem Interrupt (INT1, PD3, Pin 5). Ich habe mir den Code im Disassembler angeschaut, und die Interruptvektoren stehen falsch. Ich benutze AVRStudio 4.13 build 557 mit WinAVR 20070525. Quellcode: ISR(INT1_vect) { TCCR1B = 0; //stop counter } int main(void) { cli(); //erstmal interrupts aus OSCCAL = 0xAB; TCCR1A = 0; TCCR1B = 1; //no prescaler; 2=pre/8 TCNT1 counter-register MCUCR = (1<<ISC10); GICR = (1<<INT1); sei(); while(true) //endlosschleife über das if if( zaehler == 30 ) { ... } } Dis-ASM: +00000000: C012 RJMP PC+0x0013 Relative jump +00000001: C02C RJMP PC+0x002D Relative jump +00000002: C02C RJMP PC+0x002D Relative jump +00000003: C02A RJMP PC+0x002B Relative jump +00000004: C029 RJMP PC+0x002A Relative jump +00000005: C028 RJMP PC+0x0029 Relative jump ... +0000002E: CFD1 RJMP PC-0x002E Relative jump @0000002F: __vector_2 ... wenn ein Interrupt auftritt (ich also PIND Bit3 im Simulator anklicken) springt der Prozessor an Adresse 0x04 (TIMER2 OVF laut Datenblatt) ?!? Wenn ich den Interruptvektor auf TIMER2_OVF_vect ändere, läuft das Programm wie erwartet.