Mastar,
1. я очень советую поставить Avr Studio. В ней определить частоту таймера - раз плюнуть. Ставишь брейк-поинт на попадание в прерывание и смотришь время между первым и вторым попаданием. Хочешь - в тактах, хочешь - в абсолютном времени. Для модификации этого проекта под avr studio надо будет добавить вначале пару include (дома посмотрю и напишу каких именно)

И дописать
void main(void)
{
setup();
for (;
Loop();
}

Как установить avr studio - смотри статью на easyelectronics.ru.

по второму вопросу:
Я рекомендую сделать именно
pwm_time++;
if(pwm_time < 49) D13_High; else D13_LOW;
if(pwm_time > 99) pwm_time = 0 ;

Это связано с тем, что тебе надо будет в одном таймере обсчитывать сразу несколько цилиндров. И проще для каждого попадания в таймер сделать полный набор проверок и при необходимости изменить состояние ног

//(очень упрощенный пример)
if(pwm_time < 49) D13_High; else D13_LOW; // первый цилиндр
if(pwm_time < 35) D12_High; else D12_LOW;// второй цилиндр
if(pwm_time < 79) D11_High; else D11_LOW; // третий цилиндр
if(pwm_time < 21) D10_High; else D10_LOW; // четвертый цилиндр
pwm_time++;
if(pwm_time > 99) pwm_time = 0 ;

Это сильно проще, чем вычислять время, через которое надо будет изменить состояние какой-либо ноги (особенно если заранее неизвестно в каком порядке меняется состояние ног).