У автора темы в коде явная ошибка:
DDRD = 0b00001101; (должно быть DDRD = 0b00000001;)
Это значит, что ноги запроса прерываний настроены не как ВХОДЫ а как ВЫХОДЫ на которых выставляется низкий логический уровень. Соответственно - при соединении этих ног микросхемы с + питания происходит короткое замыкание (теоретически даже микросхема может погореть, но я ни разу не наблюдал такого - всетаки какоето ограничение тока там происходит), напряжение на входной цепи все же превышает пороговое значение -> происходит срабатывание прерывания.
Правильная настройка PORTD с включенными резисторами подтяжки на входах запроса прерывания:
Код
DDRD = 0b00000001;
PORTD = 0b00001101;
Есть еще одна засада - нет никакой защиты от "дребезга" контактов кнопок, подключенных на входы запроса прерывания.. если одно прерывание отработат быстро четное число раз - то визуально это будет воспринято как отсутствие какого-либо эффекта.
Попробуйте изменить программу следующим образом:
Код
interrupt[3] void changeType()
{
PORTD.0=0;
}
interrupt[2] void changeSpeed()
{
PORTD.0=1;
}
P. S.
Цитата
Нет, конечно. Недостаточная скорость нарастания может помешать генерации прерывания по подъёму, а недостаточная скорость падения - прерыванию по спаду. А вот прерыванию по низкому уровню, кажется, ничто помешать не может.
Пины всех современных микроконтроллеров, если они сконфигурированны как вход работают с гистерезисом - т. е. фактически имеют на входе триггер Шмидта. Как бы плавно не спадало-наростало напряжение на входе - пин переключится при некотором пороговом напряжении (которое кстати, является функцией напряжения питания). Можно RC цепочку вешать с постоянной несколько секунд - интегратор - и все будет работать нормально.