Прерывание по таймеру пасет уровень на выходе приемника. Когда уровень изменился сравнивает длительность предыдущего состояния с пороговым значением (где то около 1.5 мс) и задвигает в переменную длиной 4 байта одну или две единицы если уровень был высокий. С нулем аналогично. Когда уровень перестал изменятся, по таймауту распознаем конец посылки. 4 байта ксорится в 2 чтобы быстрей сравнивать получилось.