Помогите с внешними прерываниями PCINTx - Atmega88

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
lishni
Родился
Сообщения: 16
Зарегистрирован: Пт авг 26, 2011 10:42:29

Помогите с внешними прерываниями PCINTx - Atmega88

Сообщение lishni »

Доброго времени суток.

У меня 2 кнопки на PCINT12/13 и сигнал на PCINT20. Т.е кнопки в одном блоке сигнал в другом PCIE1 / PCIE2
после нажатия кнопки нужно "включить" прерывание от СИГНАЛА. Но не получается. Пишу в CVAVR симулирую в Proteus.

Перепробовал много вариаций регистров:

PCIFR=0x04; - тут флаги, т.е если прерывание сработало то 1 если нет то 0 (регистр нужен только для чтения?)
PCICR=0x04; - регистр вкл/выкл прерываний
PCMSK1=0x30; - регистр для 1 группы (8-14)
PCMSK2=0x10; - регистр для 2 группы (16-23)
(поправьте если не так понимаю назначение регистров)

но симуляция прекращается как только я пытаюсь что-то записать в регистр PCICR. Как я понимаю он то как раз и отвечает от какой группы будет прерывание (PCIE1 / PCIE2 / PCIE0).

P.S: и вообще симуляция падает если в регистр PCICR пытаться что-то записать второй раз.

Код: Выделить всё

main ()
{
//... Инициализация портов таймеров и прерываний в самом начале
PCICR=0x02;
PCMSK1=0x30;  //30
PCMSK2=0x10;   //10
PCIFR=0x02;
...
}


 // прерывание кнопок
interrupt [PC_INT1] void pin_change_isr1(void)
{
//...
PCICR=0x04;    // Не выполняет - вылетает
//...
}
Как включать и выключать прерывания для каждой из групп?
Реклама
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»