Приведите фрагмент кода обработчика прерывания. Думаю там у вас ошибка в ветвлении. Для нормального ветвления по значению этого вектора нужно только один раз при входе в прерывание считывать TBIV, иначе каждое его чтение уменьшает
вложенность количество запросов прерываний.
Пример.
Код
#pragma vector=TIMERB1_VECTOR
#pragma type_attribute=__interrupt
void TimerB1_ISR(void)
{ unsigned int reg;
reg=TBIV;
switch(reg)
{ case 0x02:
// обработчик от TBCCR1
break;
case 0x0E:
//обработчик прерывания от переполнения
break;
default: //все остальные не используем
break;
}
}
Ну и не следует забывать, что у таймераB два вектора прерываний. Один для TBCCR0, и второй для всех остальных.