termostat>>А как ты думаешь какое напряжение на ножке INT1 ? Ответ объясни.
=====
Radiotehnik> Там будет логический ноль, поскольку INT1 установлен, как вход с Z-состоянием. А раз так, то он всё равно что в воздухе висит. То есть вторым щупом тестера можно с тем же успехом тыкать в воздух.
Железно! Антена тоже в воздухе висит - а телевизор показывает?
Нуля то на INT1 и нет, ведь и ножка и любой проводник являются антенами!
Я ж после своего вопроса как вежливый чувак дал и ответ несколькими строками ниже. Читай не спеша и думай.
Radiotehnik> С резисторами поступил так: от + питания через кнопку к INT1 подключил R=5,1 КОм; от INT1 на землю подключил R=100КОм. Глюк пропал!
Radiotehnik> Всё стало работать нормально
Вот теперь появился ноль. Но не потому что Z-состояние
а потому что Z-состояние (т.е. ВысокоОмный вход) да потенциал "0" поданый через резистор 100 КОм.
Radiotehnik> немного изменил программу
void ext_int1_isr(void)
{ #asm("cli")
Вот это: #asm("cli") - автоматически делает сам AVR при обработке прерывания
а это: #asm("sei") - автоматически делает компилятор ставя инструкцию RETI последней в функции обработчике прерывания.
однако!!! если вы покидаете обработчик прерывания где то посредине то должны сами сделать #asm("sei") если вам еужно чтоб прерывания обрабатывались далее.
о Прерываниях в задаче 3 курса.
Radiotehnik>
PORTD INV_B(1);
delay_ms(5000);
Может тебе не использовать инвертирование битов, а писать конкретно:
Нужна "1" пишешь PORTD SET_B(1); Нужен "0" соответственно...
Так вроде проще.