Прошу помощи в решении проблемы. Имеется контроллер ATmega169pa-au. PORTE настроен на вход и подтянут резисторами внутри контроллера. На PE3 и PE6 подключена кнопка замыкающая на землю. PORTB настроен на выход и на PB6 повешен светодиод. Так же настроены прерывания по PCINT0..7.
Проблема вот в чем: на реальном устройстве не происходит отработка прерывания PCINT0 (кнопка повешена на PE3/PCINT3). При нажатии на кнопку, которая подвешена на PE6 светодиод включается.
Схема устройства упрощена (отсутствует LCD с обвязкой, кварц, ключи на транзисторах и т.д.), но суть проблемы передает.
Вот такой код залит в контроллер:
Код: Выделить всё
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
int main (void)
{
DDRE = 0x00; // Порт E на вход
PORTE = 0xff; // включаем поддтяжки на порте E
PCMSK0 = 0xff; //маска прерываний на порт E
EIMSK |= (1<<PCIE0); // включение прерываний PCINT7..0
sei();// Разрешаем прерывания глобально.
DDRB |= (1<<PB0) | (1<<PB6); // Порт B на выход
PORTB = 0x00;
while(1) {
if (!(PINE & (1<<PE6)))
PORTB |= (1<<PB6);
};
}
ISR(PCINT0_vect) {
PORTB ^= (1<<PB6);
}



