Привет от погромиста бывшего
То есть простенькая процедурка Delay(ms: integer); это уже непонятный алгоритм, так выходит?
Time:=0;
repeat // старт цикла подсчета времени между срабатыванием ДХ
Delay(1); // задержка 1 миллисекунда
Inc(Time); // увеличиваем значение таймера
until HallOut; // цикл переходит на свое начало до тех пор, пока не появится сигнал высокого уровня с ДХ
RPM:=ConvertTimeToRPM(Time); // процедурка конвертирования времени прохода 30-градусной прорези в обороты, чистая математика, без плавающей точки даже
SparkDelay:=GetDelayfromTable(RPM); //здесь берем значение задержки в миллисекундах из таблицы-графика УОЗ в зависимости от оборотов
repeat
until HallOut; //ждем, пока не появится сигнал высокого уровня с ДХ
Delay(SparkDelay); // ждем то время, которое взяли из таблицы УОЗ, которое нужно, чтобы мотор сделал полоборота минус опережение зажигания в градусах, это значение берется выше из таблицы процедуркой GetDelayFromTable
Ignite; //процедура без параметров, запускающая выходной каскад коммутатора
Вот это что, сложный алгоритм? Здесь есть ветвления, операторы условий case и if, неинициализированные переменные, какая-то двузначность кода? Здесь всего два цикла! Это что, известный только одному человеку алгоритм?
Да бляха, эту хрень тупо можно на обычном турбопаскале написать, который в 8-м классе в школе изучают!