mitre, фраза :
interrupt [PCINT2] void pin_change_isr2(void) {
...} - означает прерывание по изменению состояния на выводах 16-23 микроконтроллера.
EICRA = 0x00;
EIMSK = 0x00;
PCICR = 0x04;
PCMSK2 = 0x80;
PCIFR = 0x04; - это регистры для настройки того самого прерывания. В данном случае настроено на PCINT23 вывод (PD7).
В Atmega8 такое не предусмотрено, и соответственно там таких регистров и прерывания нет.
Можно переделать. Засунуть данное прерывание в основной цикл, ну или если есть возможность, то повесить его на INT0, или INT1 . Так же еще нужна схема и симуляция в Proteus.
Хотя легче купить 88.
Добавлено (21.05.2014, 10:59)
---------------------------------------------
Только что еще раз пересмотрел код. В основной цикл засунуть не получится. Только от внешнего прерывания INT0, или INT1. Контроллер нужно будить из режима power down. Судя по всему к выводам внешнего прерывания подключена клавиатура для ввода кода и т.д. Придется переворотить всю функцию KEYPAD. Клавиатуры стараются вешать на один порт по порядку. Нужно посмотреть схему целиком.Добавлено (27.05.2014, 18:02)
---------------------------------------------
mitre, посидел я с кодом, но так в Proteus сигнализация не заработала. Нужно проверить в железе. Если у вас есть еще желание и возможность собрать на макетной плате, то могу выложить переделанную схему и прошивку.