Материал: Функциональная организация микро-ЭВМ К1816ВЕ48

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Команда JMPP осуществляет переход по адресу, содержащемуся в ячейке ПП, на которую указывает содержимое аккумулятора. Таким образом, аккумулятор содержит адрес адреса перехода. Ячейка с адресом перехода должна находиться на той же странице памяти программ, что и команда перехода JMPP. Команда косвенного перехода обеспечивает простой доступ к таблице, содержащей векторы переходов по программе в зависимости от содержимого аккумулятора, что позволяет легко реализовать механизм множественных ветвлений.

Для организации циклов используется команду DJNZ. Счетчик циклов организуется в одном из регистров текущего банка, для чего в этот регистр загружается число повторений цикла. При выполнении команды DJNZ производится декремент и последующая проверка на нуль содержимого регистра - счетчика циклов. Если его содержимое оказывается ненулевым, то происходит переход к началу цикла, иначе - выход из цикла. Структура программы при этом будет следующей:

MOV

Rn,

#N

;инициализация счетчика циклов

LOOP:

...

 

 

;тело цикла

...

 

 

 

 

...

 

 

 

 

CYCLE: DJNZ

Rn,

LOOP

;декремент Rn и переход,

если не нуль

Следует отметить, что команды от метки LOOP до метки CYСLE включительно должны находиться в пределах одной страницы памяти программ.

Для вызова подпрограмм используется команда CALL, позволяющая обратиться в любое место текущего банка памяти программ. При вызове подпрограммы в стеке сохраняется адрес возврата и часть ССП. Глубина вложений подпрограмм ограничена емкостью стека (16 байт) и не должна превышать восьми. Для возврата из подпрограммы необходимо выполнить команду RET, которая восстановит в счетчике команд адрес возврата. Команда RETR служит для выхода из подпрограммы обработки прерывания, так как кроме адреса возврата она восстанавливает PSW и разрешает прерывания от данного источника. При программировании прерываний МК необходимо внимательно отслеживать ситуацию вызова подпрограммы, находящейся в альтернативном (по отношению к текущему) банке ПП. В этом случае перед вызовом подпрограммы необходимо выбрать соответствующий банк памяти, а перед возвратом восстановить старое содержимое DBF.

Если в подпрограмме нет команды восстановления DBF, то возарат все же будет выполнен (т.к. в стеке сохранен полный действительный адрес возврата), однако первая же команда длинного перехода передаст управление в альтернативный банк ПП. Если к подпрограмме производятся обращения из разных банков памяти, то оказывается затруднительно восстановить значение DBF перед возвратом. В этом случае можно рекомендовать использовать команду восстановления DBF в основной программе вслед за командой вызова.

Команды ветвления обеспечивают переход от текущей команды к заданной точке программы при истинности условия (таблица 5), причем все команды условного перехода используют прямую короткую адресацию.

Из таблицы видно, что по командам условных переходов могут проверяться не только внутренние флаги, но и некоторые сигналы на внешних входах МК. Это позволяет эффективно выполнять ветвления в программе без использования процедуры предварительного ввода и последующего сравнения. Анализируемые признаки за исключением С и F0 не фиксируются в специальных триггерах флагов, а представляются мгновенными значениями сигналов в АЛУ или на соответствующих входах МК.

Если условие ветвления выполняется,то (PC[7..0]) =ad8,

иначе (PC) = (PC) +2

Мнемокод команды Машинный код команды Число циклов

Условие ветвления

JC

11110110

2

С==1 JNC

11100110

2

С== 0

JZ

11000110

2

(A) = 0 JNZ

10010110

2

(A) != 0 JF0

10110110

2

F0 == 1 JF1

01110110

2

F1 == 1 JT0 00110110 2

T0 == 1 JNT0 00100110 2

T0 == 0 JT1 01010110 2

T1 == 1 JNT1 01000110 2

T1 == 0 JTF 00010110 2

FT == 1 JNI 10000110

2

I == 0 JBi i=0..7 iii10010

2

A[i] == 1

Мнемо-код команды

 

 

Опе-ранд

 

 

 

Машин. код

 

 

 

команы

 

 

 

Действие

 

 

 

EN

 

 

 

I

 

 

 

00000101

 

 

 

Разрешение внешних прерываний

 

DIS

 

 

 

I

 

 

 

00010101

 

 

 

Запрещение внешних прерываний

 

EN

 

 

 

TCNTI

 

 

 

00100101

 

 

 

Разрешение

прерывания

по переполнению

таймера/счетчика

событий

 

 

 

DIS

 

 

 

TCNTI

 

 

 

00110101

 

 

 

Запрещение

прерываний

при переполнении

таймера/счетчика

событий

 

 

 

STRT

 

 

 

T

 

 

 

01010101

 

 

 

Запуск таймера

STRT

CNT 01000101

Запуск счетчика событий

STOP

TCNT 01100101

Остановка таймера/счетчика событий

ENTO

CLK 01110101

Разрешение вывода синхроимпульсов

SEL

MB0

11100101

Выбор нулевого банка (MB0) памяти программ. A[11] = 0, то есть

(DBF) = 0 SEL MB1 11110101

Выбор первого банка памяти (MB1) программ. A[11] = 1, то есть

(DBF) = 1 SEL

RB0

11000101 Выбор нулевого банка рабочих регистров резидентной памяти данных

SEL

RB1 11010101

Выбор первого банка рабочих регистров резидентной памяти данных, то есть PSW[4]=1

NOP

00000000

Нет операции

Использование команд управления режимом работы (таблица 6) было рассмотрено при описании соответствующих программно доступных компонентов, за исключением команды NOP. Пустая команда NOP используется для исключения из работы фрагмента программы без модификации других фрагментов ("забой" машинных команд пустой командой) и для формирования задержки времени перед выполнением действий с периферийными устройствами.

Признаки результата могут быть изменены специальными командами установки и сброса, которые представлены в таблице 7.

Мнемокод команды