Цитата(Sergio66 @ Oct 19 2006, 18:22)

К сожалению, это уже пройденный этап. При такой частоте, даже, если выбросить из программы все прочее, в там и работа всех 3 таймеров и задействованные остальные прерывания, (работает основная программа) Если писать на С, то по подсчетам, такая ф-я займет более 60 % ресурса. А это слишком много. Программа реально не успевает. Я пропускаю 20 -40 % импульсов. Вот так.
Не в обиду.

Не надо грешить на зеркало,если рожа кривая.
На скорости 14 я отличаю импульсы 2мкс от 4мкс + 2 таймера +Usart с автоопределением частоты и управлением потоком + сама работа. На 16 тоже + 10 програмных фильтров (выделяю DTMF) и преобразую звук из одного стандарта в другой на лету.
В вашем случае:
1. Перепишите прерывание (о котором я писал) на ASM. Типа
push wpl
in wpl,pinx
....
2. Во всех остальных прерываниях поставьте первой командой
__enable_interrupt(); Если у Вас сохраняется в этих прерываниях слишком большой контекст, то тоже придётся переписать на ASM
Ну и третье, - а может есть другой подход чем следить за динамической индикацией. Один раз мне принесли прибор фирмы "Овен" СИ-8 (по моему). Задача та же. Вынести индикацию на несколько метров. Причём предлагали абсолютно аналогичное решение. А, в тоже время, сам прибор располагает интерфейсом rs485. Я к разработчикам письмо. Они мне доку плохинькую. Разбирался-разбирался - не получаю ответа. Ещё письмо с примером своей команды - они мне ответ с исправленным CRC. Оказ. не весь пакет считается. Подправил и всё гуд. Можно посмотреть не только текущую индикацию, а полное состояние.