У меня код чтения получается примерно такой:
Код:
	MOV AAA,Rbuf	; начало буфера
	MOV NNN,Rlen	; длина буфера
WAITZ:	BIT / BNE WAITZ	; вход должен находиться в пассивном состоянии
	JSR BUFRD	; вызываем функцию чтения


BUFRD:	MOV 1,Rdata	; регистр для накопления слова c флагом для 16 бит
	MOVB 4,Ridx	; регистр для накопления индекса с флагом для 6 бит
WAITH:	BIT / BEQ WAITH	; ждём первый бит
	BR LINEH	; переходим к измерению длительности
;дальнейший код нужен еще в одном экземпляре для другой полуволны
	BIT / BEQ SET1	; если переход сработает значит импульс короткий
LINEH:	BIT / BEQ SET1	; положение данной метки настраивается в записимости от скорости
	BIT / BEQ SET1
WAITL:	BIT / BNE WAITL	; переходы не сработали, значит импульс длинный, ждем окончание
;длинный импульс
SET0:	ASLB Ridx
	BCS SET2	; add NOPS флаг индекса вылез, значит получено 6 бит
	CMPB 64,Ridx 
	BEQ SET2	; флаг не вылез, но это нуль из 4х бит
	ASL Rdata	; сдвигаем данные по каждому длинному импульсу
	BCS SAVE1	; флаг вылез значит это последняя тетрада слова
	BR LINEL	; add NOPS
;короткий импульс
SET1:	ASLB Ridx
	BCC INC1	; флаг индекса не вылез, значит нужно только добавить 1 и читать следующую полуволну
	INC Ridx	 	; флаг индекса вылез, длинных испульсов было только 2
	ASL Rdata	; значит нужно сдвинуть данные еще 2 раза
SET2:	ASL Rdata
	BCC SUM1	; флаг еще не вылез, значит это не последняя тетрада
SAVE1:	ADD (Table+Ridx),Rdata ; конвертируем индекс по таблице, нуль имеет индекс 64
	MOV Rdata,(Rbuf)++ ; сохраняем данные
	MOVB 4,Ridx	; ставим флаг индекса
	MOV 1,Rdata	; ставим флаг данных
	SUB 1,Rlen	; уменьшаем длину
	BNE LINEL	; читаем другую полуволну
	RTS
INC1:	INC Ridx
	BR LINEL	; add NOPS
SUM1:	ADD (TableOdd+Ridx),Rdata
	MOVB 4,Ridx
	BR LINEL 	; add NOPS
В теории, после настройки он может ловить импульсы минимальной длительностью от SET1 до RTS плюс время нескольких пар BIT/BEQ чтобы можно было различать длинные и короткие импульсы. Правда нужно выравнивать длины веток переходы на которые помечены как add NOPS. Настройка заключается в установке LINEH/LINEL на последнюю пару BIT/BEQ(BNE), и попытке приёма одного слова. Затем передвигаем их назад, пока мы не определим весь диапазон устойчивого приёма слов настроечного сигнала, после чего метки нужно поставить посередине. По сравнению с кодированием скважностью, когда 1 бит кодируется двумя полуволнами, здесь для кодирования 4х бит требуется 6 полуволн(и 4 для кодирования комбинации 0000), то есть для скорости 10 кбод, частота будет чуть менее 7500 Гц.