Вимірювання тривалості імпульсу за допомогою tmr0 - форум мікро-чіп

Вимірювання тривалості імпульсу за допомогою TMR0

Господа, тиждень б'юся над кодом, виміряти не можу.
Контролер 16F648A 20МГц
Завдання виміряти тривалість імпульсу (між передніми фронтами) за допомогою TMR0. TMR0 інкримінується від внутрішнього генератора.
Використовую переривання INT по передньому фронту.
переддільник 1:16
Тривалість тестового імпульсу 400 мкс (тобто крок рахунку 3,2 мкс і за 400 мкс таймер повинен нарахувати 125 (7D)).
Задуманий алгоритм:
1. Отримуємо переривання від INT, переконуємося що від INT, Обнуляємо TMR0 і прапор переповнення TMR0, бітом змінної зазначає що переривання "перше", виходимо з переривання дозволяючи наступне, а TMR0 інкримінується до переривання від наступного позитивного фронту.

2. Отримує "друге" переривання від INT, переконуємося що від INT, записує значення TMR0 в масив, прибираємо позначку про "першому перериванні, виходимо не дозволяючи подальші переривання.

3. Виводимо значення TMR0 з елемента масиву на LCD

4. Обнуляємо таймер, Обнуляємо прапор переповнення таймера, дозволяємо переривання INT і переходимо до п1.

і так 8 разів поки елементи масиву не будуть заповнені значеннями TMR0.

Проблема в тому що отримані значення TMR0 вкрай сильно відрізняються між собою, при незмінній тривалості імпульсів.
Або TMR0 переповнюється в якийсь момент, хоча не повинен, або контролер "просчелківает" другий фронт і йде на переривання на 3-му, 4-му і. фронті, а таймер вважає.
Хоча так бути не повинно, переривання відпрацьовується за 24 мкс.

Шматок коду де ламається переривання:

сам обробник переривання:

Бітові операції в перериванні мені не подобаються, але я не знаю як ще ловити два йдуть підряд передніх фронту.

Підкажіть потиснув в чому проблема, операція на зразок проста.