Там нужно измерить всего две константы для самой длинной ветки, а потом подогнать и для других:
В качестве порога потом использовать Rcode+Rnext/2. На всякий случай можно будет сделать такую же проверку и для другой полярности. Если Rcode или Rnext будут сильно расходиться, значит либо сильно смещён уровень и длительность полуволн неодинаковая, либо в сигнале есть какие-то выбросы. В теории сигнал должен будет приниматься если max(Rcode+, Rcode-) < Rcode+Rnext/2 < min(Rnext+, Rnext-). Вообще хорошо бы вывести в каждую строку экрана, что мы принимаем после того как дождёмся перепад заданной полярности. В идеале должны получиться вертикальные полосы с дрожанием +/-1 пиксель на границах. А особая подгонка дискретизации WAV не должна требоваться если она хотя бы 3-4 раза выше частоты сигнала.Код:MOV 0,Rcode MOV 0,Rnext WAIT0: BIT BNE WAIT0 ; ждём низкий уровень WAIT1: BIT / BEQ WAIT1 ; ждём его изменение на высокий ASL Rcnt ; тестируемый код MOV Tune,Rcnt ADC Rdata MOV Rdata,(Rbuf) MOV 1,Rdata DEC Rlen BNE WAIT2 WAIT2: INC Rcode ;считаем сколько длится высокий уровень за вычетом кода BIT BNE WAIT2 WAIT3: INC Rnext ;считаем сколько длится низкий уровень BIT BEQ WAIT3




Ответить с цитированием