95% времени основной цикл занимается тем, что ждет, пока таймер запишет в CalcedWaveLength что-либо ненулевое.
Таймер в CalcedWaveLength записывает посчитанную длительность импульса как только импульс закончится. При этом в качестве единицы измерения используются не микросекунды, а в вызовы таймера. Если на ноге существовала 1 в течении 4х вызовов таймера - в CalcedWaveLength попадет именно 4. И попадет она туда строго после того, как импульс закончится.
Этот веселый цикл for (;CalcedWaveLength==0со смайликом тупо стоит и ждет пока таймер не запишет CalcedWaveLength. Как только обнаружилось, что в переменной CalcedWaveLength не 0 (таймер записал значение), цикл ожидания завершается и идет программа дальше.
После получения CalcedWaveLength сохраняем ее значение, обнуляем (чтобы не пропустить следующую длительность импульса) и шлем в комп полученные данные.
В новом коде сразу идет анализ полученных данных исходя из известных длительностей.
Код:uint8_t cwl=CalcedWaveLength; CalcedWaveLength=0; if ((cwl>2)&&(cwl<5)) UART_SendByte('0'); else if ((cwl>=5)&& (cwl<8)) UART_SendByte('1'); else UART_SendByte('?');




со смайликом тупо стоит и ждет пока таймер не запишет CalcedWaveLength. Как только обнаружилось, что в переменной CalcedWaveLength не 0 (таймер записал значение), цикл ожидания завершается и идет программа дальше.
Ответить с цитированием
