Witam szanownych użytkowników, Programuję mikrokontroler ATmega32, mam problem z przerwaniem INT2, które po starcie urządzenia się odpala mimo, że nie puszczam sygnału wyzwalającego przerwanie. Ponieważ projekt jest za duży, żeby zamieścić go w całości zamieszczam tylko najważniejsze fragmenty, a dodatkowo dodam plik .ZIP ze spakowanym projektem, który można odpalić w AVR Studio. INT_EXT_INIT: push ACC sbi DDRD, 2 ; noga INT0 jako wyjście sbi PORTD, 2 ; noga PD2 w stanie wysokim sbi DDRD, 3 ; noga INT1 jako wyjście sbi PORTD, 3 ; noga PD3 w stanie wysokim sbi DDRB, 2 ; noga INT2 jako wyjście sbi PORTB, 2 ; noga PB2 w stanie wysokim in ACC, MCUCR sbr ACC, (1<<ISC11) ; INT1 na opadające zbocze sbr ACC, (1<<ISC01) ; INT0 na opadające zbocze out MCUCR, ACC in ACC, MCUCSR cbr ACC, (1<<ISC2) ; INT2 na opadające zbocze out MCUCSR, ACC in ACC, GICR sbr ACC, (1<<INT2) ; aktywacja przerwania INT2 sbr ACC, (1<<INT1) ; aktywacja przerwania INT1 sbr ACC, (1<<INT0) ; aktywacja przerwania INT0 out GICR, ACC pop ACC ret INT0_EXT: push ACC in ACC, SREG push ACC sbi PORTB, 0 pop ACC out SREG, ACC pop ACC reti INT1_EXT: push ACC in ACC, SREG push ACC sbi PORTB, 1 pop ACC out SREG, ACC pop ACC reti INT2_EXT: push ACC in ACC, SREG push ACC sbi PORTA, 6 pop ACC out SREG, ACC pop ACC reti OPIS PROBLEMU: Program startuje inicjalizuje różne moduły (USART, PWM, PORTY) - wszystko działa doskonale i było testowane. Program sam w sobie pracuje w pustej pętli, z której tylko wyskakuje do obsługi przerwań. Kiedy dodałem obsługę przerwań INT0,1,2 nadal wszystkie moduły działają doskonale, przerwania reagują w czasie pracy właściwie, jednak zaraz po wystartowaniu mikrokontrolera odpala mi się przerwanie INT2 - nie rozumiem dla czego. Jak widać w obsługach przerwań zewnętrznych zrobiłem ustawienie stanu wysokiego na pewnych pinach do których mam podłączone diody. Przerwanie INT0 i INT1 działają zgodnie z moim zamiarem, a przerwanie INT2 - prawie. Kiedy już mikrokontroler pracuje po starcie, mogę to przerwanie wywoływać tak jak zamierzałem. Chciałbym pozbyć się tego efektu, że przerwanie jest odpalane zaraz po starcie. Dodam jeszcze moje spostrzeżenie. W dokumentacji mikrokontrolera ATmega32 było, że należy ustawić piny INT0, INT1, INT2 jako wyjścia. Kiedy zakomentowałem te linie kodu: sbi DDRD, 2 ; noga INT0 jako wyjście sbi PORTD, 2 ; noga PD2 w stanie wysokim sbi DDRD, 3 ; noga INT1 jako wyjście sbi PORTD, 3 ; noga PD3 w stanie wysokim sbi DDRB, 2 ; noga INT2 jako wyjście sbi PORTB, 2 ; noga PB2 w stanie wysokim problem nadal występował, jednak samoczynne wyzwolenie przerwania INT2 po resecie odbywa się nieco później. Najbardziej mnie denerwuje, że INT0 i INT1 działają dobrze tylko INT2 nawala, bo skoro umiałem skonfigurować INT0 i INT1 dlaczego z INT2 się nie udało? Proszę o rady.