- Код: Выделить всё • Развернуть
#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)//Зацикливаем
{
}
}
Идея такая: При старте все выходы молчат. При нажатии кнопки сигнал переключается между первым или вторым выходом. Стартую эмулятор и вижу, что первый выход уже горит. Как будто уже была нажата кнопка... Не пойму почему срабатывает прерывание при старте и как этого избежать.