Пример 18. Передать управление по метке LAB, если переключатель банка регистров (бит PSW.4) установлен:
JBSE1: M0V A, PSW ; ПЕРЕДАЧА PSW В АККУМУЛЯТОР
JB4 LAB ; ПЕРЕХОД, ЕСЛИ А.4=1
Пример 19. Передать управление по метке LABEL, если счетчик событий достиг состояния 64:
TESTC: MOV A, T ; ПЕРЕСЫЛКА С0ДЕРЖИМ0Г0 СЧЕТЧИКА В АККУМУЛЯТОР
JB6 LABEL ; ПЕРЕХОД ПО МЕТКЕ, ЕСЛИ А.6=1
Пример 20. Осуществить переход из нулевого банка памяти программ к программе с именем ROUT, расположенной в первом банке памяти программ:
SEL МВ1 ; УСТАНОВКА ФЛАГА MB = 1
JMP ROUT ; ПЕРЕХОД К ПРОГРАММЕ ROUT
Пример 21. Множественное ветвление программы. Допустим, что результатом работы некоторой программы является число X (в пределах от 0 до 15). Необходимо организовать передать управления 16 различным программам с именами ROUT0 — R15 в зависимости от вычисленного значения X:
ORG 100H ; ЗАДАНИЕ НАЧАЛЬНОГО АДРЕСА ПРОГРАММЫ
ANL A, #0FH; СБРОС СТАРШЕЙ ТЕТРАДЫ А ВО ИЗБЕЖАНИЕ ОШИБКИ ПЕРЕХОДА
JMPP @A ; ОБРАЩЕНИЕ К ТАБЛИЦЕ ВЕКТОРОВ ПЕРЕХОДОВ
; ТАБЛИЦА BEKТОP0B ПЕРЕХОДОВ
DВ R0UT0 ; НАЧАЛЬНЫЙ АДРЕС ПРОГРАММЫ R0UT0
DВ ROUT1 ; НАЧАЛЬНЫЙ АДРЕС ПРОГРАММЫ R0UT1
DВ R0UT2 ; НАЧАЛЬНЫЙ АДРЕС ПРОГРАММЫ R0UT2
DВ R0UT3 ; НАЧАЛЬНЫЙ АДРЕС ПРОГРАММЫ R0UT3
DВ ROUT4 ; НАЧАЛЬНЫЙ АДРЕС ПРОГРАММЫ R0UT4
DВ R0UT5 ; НАЧАЛЬНЫЙ АДРЕС ПРОГРАММЫ R0UT5
DВ R0UT6 ; НАЧАЛЬНЫЙ АДРЕС ПРОГРАММЫ R0UT6
DВ ROUT7 ; НАЧАЛЬНЫЙ АДРЕС ПРОГРАММЫ R0UT7
DВ R0UT8 ; НАЧАЛЬНЫЙ АДРЕС ПРОГРАММЫ R0UT8
DВ R0UT9 ; НАЧАЛЬНЫЙ АДРЕС ПРОГРАММЫ R0UT9
DВ ROUTA ; НАЧАЛЬНЫЙ АДРЕС ПРОГРАММЫ R0UTA
DВ R0UTB ; НАЧАЛЬНЫЙ АДРЕС ПРОГРАММЫ R0UTB
DВ R0UTC ; НАЧАЛЬНЫЙ АДРЕС ПРОГРАММЫ R0UTC
DВ ROUTD ; НАЧАЛЬНЫЙ АДРЕС ПРОГРАММЫ R0UTD
DВ R0UTE ; НАЧАЛЬНЫЙ АДРЕС ПРОГРАММЫ R0UTE
DВ R0UTF ; НАЧАЛЬНЫЙ АДРЕС ПРОГРАММЫ R0UTF
Заметим, что команда JMPP, таблица векторов и программы ROUT0 – ROUTF должны находиться на одной странице памяти программ. (Следует отметить, что в эмуляторе команда JMPP @A не функционирует предсказуемым образом.)
Пример 22. Организовать ожидание появления нулевого уровня на входе Т0:
WAIT: JT0 WAIT ; ПЕРЕХ0Д НА WAIT, ЕСЛИ НА ВХОДЕ Т0 ЕДИНИЦА
Пример 23. Организовать ожидание появления единичного уровня на входе INT в предположении, что внешние прерывания запрещены:
WAIT: JNI WAIT ; ПЕРЕХОД НА WAIT, ЕСЛИ НА ВХОДЕ INT НУЛЬ
Пример 24. Передать управление одной из восьми программ ROUT0 – ROUT7 при появлении нулевого уровня на соответствующем входе порта 1. Наивысшим приоритетом обладает вход Р1.0:
ORL P1, #FFH; НАСТРОЙКА ПОРТА P1 НА ВВОД
LOOP: IN A, P1 ; ВВОД ДАННЫХ ИЗ ПОРТА P1
CPL A ; ИНВЕРСИЯ АККУМУЛЯТОРА
JZ LOOP ; ОЖИДАНИЕ ПОЯВЛЕНИЯ ПЕРВОГО НУЛЯ
JB0 ROUT0 ; ПЕРЕХОД К ROUT0, ЕСЛИ Р1.0 = 0
JB1 ROUT1 ; ПЕРЕХОД К ROUT0, ЕСЛИ Р1.1 = 0
JB2 ROUT2 ; ПЕРЕХОД К ROUT0, ЕСЛИ Р1.2 = 0
JB3 ROUT3 ; ПЕРЕХОД К ROUT0, ЕСЛИ Р1.3 = 0
JB4 ROUT4 ; ПЕРЕХОД К ROUT0, ЕСЛИ Р1.4 = 0
JB5 ROUT5 ; ПЕРЕХОД К ROUT0, ЕСЛИ Р1.5 = 0
JB6 ROUT6 ; ПЕРЕХОД К ROUT0, ЕСЛИ Р1.6 = 0
JB7 ROUT7 ; ПЕРЕХОД К ROUT0, ЕСЛИ Р1.7 = 0
Ветвление осуществляется группой из восьми команд JBb. Приоритеты входов порта Р1 определяются очередностью проверки.
Пример 25. При поступлении на вход Т0 последовательности из восьми нулевых импульсов установить выход Р2.7:
MOV R7, #08H; 3АГРУЗКА В R7 ЧИСЛА ИМПУЛЬСОВ
ONE: JT0 ONE ; 0ЖИДАНИЕ СИГНАЛА 0 НА ВХОДЕ Т0
ZERO: JT0 SKIP ; 0ЖИДАНИЕ СИГНАЛА 1 НА ВХОДЕ Т0
JMP ZERO
SKIP: DJNZ R7, ONE; ПОВТОРЯТЬ, ПОКА НЕ ПОСТУПИТ ВОСЬМОЙ ИМПУЛЬС
ORL P2, #80H; УСТАНОВКА ЕДИНИЦЫ НА ВЫХОДЕ 7 ПОРТА 2
Длительность нуля и единицы на входе устройства должна быть не менее четырех машинных циклов, т.е. 10 мкс.
Пример 26. Дождаться поступления на вход Т1 100 импульсов и перейти по метке PULSE:
MOV A, #156; ПОМЕСТИТЬ В A ЧИСЛО (256 – 100)
MOV T, A ; ПРЕДУСТАНОВКА СЧЕТЧИКА
STRT CNT ; 3АПУСК СЧЕТЧИКА
WAIT: JTF PULSE ; ПЕРЕХОД, ЕСЛИ ПР0ШЛ0 100 ИМПУЛЬСОВ
JMP WAIT
PULSE: NOP
Пример 27. Запретить прерывания от таймера, но разрешить прерывание после восьми сигналов переполнения таймера. При переходе к процедуре обработки прерывания остановить таймер. Сигналы переполнения подсчитывать в регистре R5:
START: DIS TCNTI ; ЗАПРЕТ ПРЕРЫВАНИЙ ОТ ТАЙМЕРА
CLR A ; СБР0С АККУМУЛЯТОРА
MOV T, A ; СБРОС ТАЙМЕРА
MOV R5, A ; СБР0С РЕГИСТРА R5
STRT T ; ЗАПУСК ТАЙМЕРА
Ml: JTF CNT ; ЕСЛИ TF=1, ТО ПЕРЕХОД К COUNT И СБРОС TF
JMP Ml ; ЦИКЛ
CNT: INC R5 ; ИНКРЕМЕНТ РЕГИСТРА R5
MOV A, R5 ; ПЕРЕСЫЛКА С0ДЕРЖИМОГО R5 В АККУМУЛЯТОР
JB3 INT ; ПЕРЕХОД К ПОДПРОГРАММЕ 0БСЛУЖИВАНИЯ ПРЕРЫВАНИЯ INT,
; ЕСЛИ БИТ А.З РАВЕН 1
JMP Ml ; ПЕРЕХОД, ЕСЛИ БИТ А.З НЕ РАВЕН 1
…
INT: STOP TCNT ; OCТAHOВ ТАЙМЕРА
JMP 07H ; ПЕРЕХОД К ЯЧЕЙКЕ 7 (ВЕКТОР ПРЕРЫВАНИЯ 07 СЧЕТЧИКА СОБЫТИЙ)






