делаю прогу под (tiny2313) в winavr
для контроля зависания компа - комп переодически шлет импульс и если очередной не пришол вовремя то контроллер делает сброс
для наколенной проверки вешаю на ногу диод и на другую кнопку - диод мигает а тыкание кнопки частое должно прерывать мигание диода пока щелкается кнопка - но получается лишь продлить период мигания диода
Код
int c=0;
ISR(INT0_vect){c=1;} // прерывание от кнопки
ISR(TIMER1_OVF_vect)
{TCNT1=65500;if (c==1){c=0;} else {PORTB^=1<<3;}} // прерывание по таймеру - лампа гаснет или загорается
int main(void)
{
TIMSK=0x80; // Timer 1 Overflow Interrupt: On
TCNT1=65500; // значение счетного регистра - чтоб до переполнения было около 1 сек.
DDRB|=_BV(3);// Вывод порта настраеваем как выход (диод)
PORTD&=~_BV(PD2);// вешаем 0 на вход кнопки
GIMSK=0b01000000; //разрешаем прерывание int0 - кнопка
MCUCR=0x03; // int by rising front - для кнопки
sei(); // общее разрешение прерывания (sreg 0100000....)
while (1);
}
т.е. прерывание по кнопке срабатывает лишь 1 раз сколько бы не нажимать - после очередной сработки по таймеру опять только раз - а надо чтоб постоянно - в чем причина не пойму