; Измеритель угла цели обзорной РЛС PELENG: .equ THRESH,-300 ; задание порога обнаружения с минусом CYCLE: lxi h,0 ; начало цикла накопления отсчетов shld LHALF ; обнуление суммы левой половины пачки shld RHALF ; обнуление суммы правой половины пачки mvi c,9 ; подготовка к сдвигу данных lxi h,SLWIN+8 ; в скользящем окне SHIFT: mov a,m ; начало цикла сдвига данных inx h mov m,a dcx h dcx h dcr c jnz SHIFT ; конец цикла сдвига данных inx h in 0 ; ввод очередного отсчета из порта 0 mov m,a ; запись отсчета на первую ячейку ; скользящего окна mvi c,5 M1: lda LHALF ; начало цикла суммирования отсчетов ; в левой половине окна add m sta LHALF lda LHALF+1 aci 0 sta LHALF+1 inx h dcr c jnz M1 mvi c,5 M2: lda RHALF ; начало цикла суммирования отсчетов ; в правой половине окна add m sta RHALF lda RHALF+1 aci 0 sta RHALF+1 inx h dcr c jnz M2 ; конец цикла суммирования отсчетов lhld LHALF ; запись суммы левой половины в HL xchg ; ее пересылка в DE lhld RHALF ; запись суммы правой половины в HL dad d ; суммир. левой и правой половин окна lxi b,THRESH dad b ; сравнение общей суммы с порогом обнаружения jm CYCLE ; возврат в начало главного цикла ; в случае непревышения порога lhld RHALF ; запись суммы правой половины в HL mov a,l sub e ; сравнение младших байт сумм mov a,h sbb d ; сравнение старших байт сумм jm CYCLE ; возврат к началу главного цикла ; если левая половина больше правой in 1 ; ввод текущего азимута из порта 1 out 2 ; вывод оценки азимута цели на порт 2 ret ; возврат в вызывающую программу nop SLWIN: .db 4,6,2,7,12,3,1,4,8,15 ; память для скользящего окна LHALF: .dw 0 ; память для суммы левой половины окна RHALF: .dw 0 ; память для суммы правой половины окна .end PELENG