Помогите пожалуйста найти ошибку в коде. Хочу разобраться с прерываниями на mega8. Написал два события от прерываний INT0 и INT1 (PD2 и PD3 ). Но при замыкании соответсвующих ножек с землёй происходит вызов подпрограммы для INT0 . Для INT1 подпрограмма INT1 не выполняется.
- Код: Выделить всё • Развернуть
- #include <mega8.h>
 #include <delay.h>
 
 // External Interrupt 0 service routine
 interrupt [EXT_INT0] void ext_int0_isr(void)
 {
 PORTC.3=1;
 delay_ms(1000);
 PORTC.3=0;
 
 SREG=1;
 }
 // External Interrupt 1 service routine
 interrupt [EXT_INT1] void ext_int1_isr(void)
 {
 PORTC.4=1;
 delay_ms(1500);
 PORTC.4=0;
 SREG=1;
 }
 // Declare your global variables here
 void main(void)
 {
 PORTC=0x00;
 DDRC=0xFF;
 // Port D initialization
 PORTD=0x00;
 DDRD=0xFF;
 TCCR0=0x00;
 TCNT0=0x00;
 TCCR1A=0x00;
 TCCR1B=0x00;
 TCNT1H=0x00;
 TCNT1L=0x00;
 ICR1H=0x00;
 ICR1L=0x00;
 OCR1AH=0x00;
 OCR1AL=0x00;
 OCR1BH=0x00;
 OCR1BL=0x00;
 ASSR=0x00;
 TCCR2=0x00;
 TCNT2=0x00;
 OCR2=0x00;
 GICR=0x40+0x80; // включаю прерывания 0 и 1
 MCUCR=0x02+0x12; // по спадающему фронту
 MCUCSR=0x00;
 GIFR=0xC0;
 TIMSK=0x00;
 ACSR=0x80;
 SFIOR=0x00;
 // Global enable interrupts
 #asm("sei")
 PORTC=0x0F ;
 PORTD.2=1; // вывожу высокий уровень на ножки порта, чтобы при замыкании с землёй фиксировался спадающий фронт
 PORTD.3=1;
 while (1)
 {
 // Place your code here
 if (PORTC==0x0F) {PORTC=0xF0; delay_ms(500); } else
 if (PORTC==0xF0) {PORTC=0x0F; delay_ms(500); }
 };
 }







 Прерывание 0 срабатывает само собой, причём выполняются два условия
 Прерывание 0 срабатывает само собой, причём выполняются два условия 

