Кстати, вы даете нам слишком мало информации. но я думаю, что могу ответить без них, но это заставляет отвечать долго. Давайте начнем с более простой проблемы: у вас есть такая ситуация, когда ваше действие должно выполняться меньше раз, чем выполняет наиболее частый isr. Например, вам нужно отправлять байт каждые 1 с, но ваш isr выполняется каждые 1 мс. Короче говоря, вам нужно отправлять байт каждые 1000 выполнений ISR, затем вы делаете счетчик в ISR, который увеличивает каждый ISR, а когда достигает 1000, вы отправляете байт и устанавливаете cnt равным 0.
ISR()
{
cnt++;
if(cnt >= 1000)
{
execute(Z);
cnt = 0;
}
}
Если у вас возникла проблема, isr медленнее, чем желаемое время выполнения ваших действий, тогда я за редизайн использования вами таймеров. Затем вы должны заставить этот ISR выполняться быстрее, а затем разделить время, подсчитав ожидаемый isr, как я описал выше. Это было упомянуто в комментариях.
Я предлагаю вам переосмыслить способ использования таймеров.