LUZER для тебя, если ты просвещен в процессорах, и не только рассказываю...
В проге испольованиязуется два таймера:TMR0 - для формирования задержки УОЗ в зависимости от об/мин, TMR1 - для расчета об/мин;
прерывания:по переполнению TMR0 - для момента искрообразования, по входу INT - для отслеживания приходящих импульсов (GP2).
Програмно происходит все так:при включении питания по приходу импульса на порт GP2 задержка УОЗ максимальная (около 4,5мс). Импульсы приходят на пик каждые пол оборота. По приходу импульса на GP2(прерывание INT) считывается и обнуляется значение таймера TMR1. Разрешается прерывание от TMR0, таймеру TMR0 присваивается значение из таблицы, в зависимости из расчетов, считанных с таймера TMR1(значение таймера TMR1 переводится в об/мин за прошлые пол оборота), далее по переполнению таймера TMR0(т.е. прерывание от TMR0) на порт GP1 подается лог 1 (вот тут искра), делается задержка 500мкс и GP1=0, расчитывается об/мин от значения таймера TMR1 этого пол оборота, обращение к таблице задержкой для следующего обороты, ожидание следующего импульса и т.д.
Завтра нарисую маховик и все контрольные точки, будет понятнее.
Методику разрабатывал сам, т.к. ниодин форум не дал олгаритма даже приблизительно...