У меня есть рабочий вариант на Algorithm Builder-е. Я его переделал на С (IAR)  так сказать в демонстрационных целях. Так что пример чисто ознакомительный.
/********************************************************************************
* Старший бит счётчика InpulseCounter служит в качестве флага идет ли пачка или *
* нет. Пачка состоит из десяти импульсов. При каждом переполнении светодиод 	*
* переключается, следовательно счётчик должен досчитать до 10*2=20 плюс (точнее *
* OR) флаг пачки (старший бит):							*
*				 0x14 OR 0x80 = 0x94				*
* Время паузы между пачками равно:						*
*	1/(6000000/(0x7F*(0xFFFF-0xFFB8)))=					*
*	1/(6000000/((0x7F*0x47))=1/(6000000/9017)=1/665,4=0,0015=1.5 мс.	*
* В расчётах правда не уверен. Если надо проверяйте сами 

			*
********************************************************************************/
#define CPUFrequency=6000000;
unsigned char ImpulseCounter;
#pragma vector=Timer1OverflowInterruptVector
__interrupt void IRTimerInterrupt(void)
{
  ImpulseCounter++;
  if (ImpulseCounter>0x80) //Если старший бит установлен, то:
  {
    if (ImpulseCounter==0x94)	//если ImpulseCounter досчитал до 0х94-х
    {
      ImpulseCounter=0;		//то пачка закончилась. Обнуляем счётчик
      PORTD4=1;			//и гасим светодиод
    }
    else	
      PORTD^=0x10;		//если не закончилась, то переключаем светодиод
  }
  else				//если старший бит сброшен, то
    PORTD4=1;			//на всякий случай гасим светодиод
  TCNT1H=0xFF;
  TCNT1L=0xB8;			//Заводим таймер на 65464, чтобы
}				//частота переполнения была равна 36 кГц
Примерно так.