1.sbrs FLG,INT_OK ;пока "ИНТ"не пришел, нифига не делаем,просто зацикливаемся
2.rjmp "1"
3.rcall obrabotka_vhodnogo_znachenija ; из этого места вызываем подпрограмму обработки входа
4.cbr FLG,1<<INT_OK ;данные уже обработаны,поэтому скинем флаг
5.CNT++ ;очередное число принято,поэтому увеличим счетчик
6.CNT==5? ;приняли все 5 чисел?
7.brcc "1" ;пока не примем все 5чисел прыгаем в "1"
8.CNT=0
9.sbrs FLG,OVF_OK ;пока переполнения не произошло, просто зацикливаемся
10.rjmp "9"
11.rcall vivod_dannih_v_okruzhayshey_sredy ;здесь вызываем подпрограмму вывода данных
12.cbr FLG,1<<OVF_OK ;очередное число миру уже показали,поэтому сбросим флаг
13.CNT++
14.CNT==5?
15.brcc "9"
16.CNT=0
rjmp MAIN
;------------------
obrabotka_vhodnogo_znachenija:
;здесь как-то обрабатываем входное значение(читаем состояние порта и например прячем в ОЗУ)
ret
;--------------
vivod_dannih_v_okruzhayshey_sredy
;здесь каким-то образом выводим данные в окружающую среду
ret
;--------Обработчики Прерываний---------
INT:
sbr FLG,1<<INT_OK ;обработчик нифига не делает,кроме как сообщает о себе
reti
;------------
OVF:
sbr FLG,1<<OVF_OK ;обработчик нифига не делает,кроме как сообщает о себе
reti
;-------------------------------------------------
Вышеописанное безобразие сканирует порт по внешнему прерыванию,и заодно подсчитывает сколько
этих прерываний пришло.По окончании приема полного пакета(5 чисел),начинаем выводить данные
последовательно во внешний мир с частотой переполнения таймера. Работает как эхо,т.е.ввели пакет 1 раз,получили ответ 1 раз. Все конечно весьма условно...
В первый раз меня ударило током - и я подумал что ни черта не соображаю в электричестве. Во второй раз был аккуратнее и меня не ударило - теперь я возомнил из себя крутого микроэлектронщика.