alexf58 писал(а):
... хочу высказать некоторые соображения.
Использование магических временнЫх констатнт требует их подгонки под конкретное устройство и не особо надежно. Это проходит для RS232 когда передается всего 8 бит. Если же бит много, то надо синхронизироваться как можно чаще. Более корректная программа должна отлавливать переходы 0 в 1 и обратно и каждый раз начинать считать время от перехода.
Замечание верное по сути, но, только не к данной работе. Задача была понять протокол обмена программатора <> регулятора двигателя и его эмулировать "подручными" средствами.
В изученном протоколе нет синхронизации, поэтому пришлось исходить из минимальной длительности импульса. Для бОльшей надежности можно было-бы считывать три раза состояние порта за длительность импульса и применять мажоритарное определение ....однако, для 150 бит это слишком избыточно. Импульс "широкий" и просто ничего не успевает поплыть для однократного измерения в середине импульса.
Отлавливать переходы 1 в 0 ... в данном случае невозможно.
Последовательность , допустим, пяти единиц передается просто удержанием "1" в течение 5*tImp.
Как её получать? ведь за эти пять тактов нет ни одного перепада из 0 в 1 или наоборот.
Это в других протоколах так реализовано. Например RC-5 ИК пультов. Там действительно "1" передается перепадом 1>0, а "0" перепадом 0>1. Тут и надо применять прерывание по изменению состояния порта.