- Код: Выделить всё • Развернуть
- #include <avr/io.h>
 #include <avr/delay.h>
 #include <avr/signal.h>
 char pressed;
 SIGNAL (__vector_defoult)
 {
 //Заглушка
 }
 //Простой код. При нажатии кнопки переключаем сигнал между двумя выходами.
 //До нажатия кнопки все выходы должны молчать.
 //Но не молчат, т.к. почему-то срабатывет прерывание сразу при старте.
 SIGNAL (SIG_INTERRUPT0)
 {
 switch(pressed)
 {
 case 0:
 {
 PORTB = 0x01;
 break;
 };
 case 1:
 {
 PORTB = 0x02;
 break;
 };
 };
 pressed= 1-pressed;
 }
 int main(void)
 {
 pressed = 0;//Нажата ли кнопка
 DDRB = 0xFF;//Порт говорит на выход
 PORTB = 0x00;//Гасим все лапки
 GIMSK=0x40;//Разрешаем перерывание INT0 на проподание сигнала на входе INT0
 sei();
 while(1)//Зацикливаем
 {
 }
 }
Идея такая: При старте все выходы молчат. При нажатии кнопки сигнал переключается между первым или вторым выходом. Стартую эмулятор и вижу, что первый выход уже горит. Как будто уже была нажата кнопка... Не пойму почему срабатывает прерывание при старте и как этого избежать.

 
 



