Цитата(Xenom0rph @ Feb 4 2009, 14:35)

....
Проблемма следущая. Когда срабатывает прерывание, если col больше 50, он должен записать массив в eeprom, он его записывает, но ни с того не ссего дёргает сам ещё раз линию PINB.4, а так как col уже обнулился он выполняет UDR = 'N'; Если убрать функцию write(); то всё работает как надо. 3 день уже голову ломаю и не могу понять почему это происходит. Подскажите из за чего может возникать этот глюк!
Это не глюк - контроллер честно делает то, что Вы его поросили.
Варианты:
1) неоднократное прерывание по PINB.4 (дребезг)
2) прерывание по PINB.3 при ((~PINB.4) == 1) (не проще ли (PINB.4 == 0) ?)
Но лучше расскажите, зачем нужно писать в ЕЕПРОМ весь буфер именно в прерывании и завешивать контроллер на >550 мс?
Может гуманнее по отношению к контроллеру будет по прерыванию PINB.4 и условию взводить флажок необходимости записи, а саму запись выполнять вне прерывания, иногда (1-2-5 мс - у Вас в программе, наверное, есть какой-то системный тик?) проверяя завершение предыдущей записи, стартуя следующую, если есть что писать, и сбрасывая флажок, если весь буфер записан?