Для начала несколько маленьких замечаний.
1) по команде DDRB &= 0; вы указываете компилятору, что
а) надо взять значение из DDRB
б) сделать AND с 0
в) положить результат в порт DDRB.
Учитывая, что любое значение AND с 0 даст 0, то вы делаете обнуление DDRB тремя командами ассемблера (как минимум). В то же время результат будет тот же, что и после операции DDRB=0; Что эквивалентно одной операции асма.
2) Вы я вижу пользуетесь IARом. Попробуйте почитать на него документацию, а не рваться тупо в бой. Для разрешения прерывания есть функция __enable_interrupt(); Там есть и ряд других, которые вам обязательно понадобятся. Почитайте.
Теперь по существу вопроса.
В первом и последующих операциях у вас написан полный бред. Так при задании таймеру 1
Цитата
TCCR1B = (1 << WGM12) | (1 << CS12) | (1 << CS11) | (1 << CS10); //тактирование по нарастающему фронту импульсов
Ни о каком "тактировании по нарастающему фронту" речи не идёт. Вы запускаете таймер в режиме CTC по OCR1A. Это значит, что ваш таймер будет тактироваться, согласно заданию, частотой с пина T1 по переднему фронту, досчитывать до значения занесённого в OCR1A и сбрасываться в 0. При этом OC1A вы не задали (по умолчанию 0). Я так не пробовал и не могу сказать что будет. Скорее всего он будет считать до переполнения то есть 65536 импульсов. При этом вы в OC1B заносите 0 и разрешаете по нему прерывание. Прерывание у вас будет вызываться либо каждый импульс либо (что скорее всего) через теже 65536 импульсов. То есть в момент когда TCNT будет равно OC1B.
Совершенно очевидно, что вы просто не понимаете что пишете. Обычно так инициализируют если период задают в OC1A, а OC1B отмеряют часть этого периода.
Судя по тому, что вы написали, если я правильно понял, то вы хотите посчитать число импульсов за интервал.
Для этого в таймер 1 надо просто занести (1 << CS12) | (1 << CS11) | (1 << CS10). Пусть просто считает импульсы. Если за отмерянный интервал гарантированно не придёт более 65536 импульсов. (Если может придти, то надо инициализировать прерывание от этого таймера по переполнению TOV и в прерывании тупо считать число переполнений).
Таймер же 0 надо инициализировать в режиме CTC(для задания нужного интервала) и разрешить прерывание от OC1A. В этом прерывании прочитать TCNT1 (число посчитанных импульсов таймером 1) ну и если надо, то ваши переполнения.