Цитата(Athlon128 @ May 11 2006, 16:30)

Задача - вызывать прерывание каждые 10мс (100Гц). ATmega8515, кварц 16 МГц, таймер1.
Нужно это для замера коротких промежутков времени (~30 сек.).
Код
TIMSK=0x40; // set OCIE1A
TCCR1B=0x0C; // cl/256 16000000/256=62500
// 62500/100=625
// опрос каждые 10ms
//OCR1AH=0x02; // прерывание как только досчитает до 625=271h
//OCR1AL=0x71; //
В результате прерывание возникает слишком часто. В чём моя ошибка?
Причем здесь регистры OCR1AH, код не совсем понятен? Прерывание разрешили правильно, только значение загружается в регистр TCNTx, при 16 мегах и 1/256 это значение равно 0хFD8F. Само прерывание вы хотите обрабатывать в обработчике прерываний?, только не забывайте в обработчике заново инициализировать таймер.
В общем вам нужно в каком то месте программы, в зависимости от задачи, загрузить значение в счетный регистр TCNTxx и разрешить прерывание. Каждый раз при переполнении регистра будет срабатывать прерывание, ну а дальше обрабатывайте его....
Я вообще один раз написал макрос/функцию и не парюсь с насторойками.
Такие простые глюки ловятся легко в Vmlab