Lirzman писал(а):ЗЫ Щас придет aesok и найдет кучу багов.(как обычно) 
  
Я пришол.  :zevok:
Ну баг ты нашол сам. Но Его исправление ты предложил неверное:
if(cur_servo==3) 
  {PORTB SET_B(2); 
  PORTB CLR_B(1); 
  TCNT1=gangle[2]+2;   cur_servo=4; 
  } 
Подумай из за чего поисходит эта ошибка. 
Наводки: 
Посмотри асемблерный код обработчика прерывания. В чем разница для разных серв? Чему равно значение счетчика таймера в тот момент когда ему присваеваеться новое значение, для разных серв? Что будет если компилятор сгенерирует более оптимальный (или менее оптимальный) код?
Что произойдет если контроллер, в тот момент когда происходит переполнение таймера '1' и должен начать выполняться обработчик прерываня таймера '1', контроллер находиться в обработчике другого прерываня? Как это  отразиться на серве?
Ваше предложение по универсальному решению проблеммы?
Анатолий.