Помогите пожалуйста найти ошибку в коде. Хочу разобраться с прерываниями на 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); }
};
}