СПЕЦИАЛИЗИРОВАННАЯ МПС.
Рассмотрим специализированное микропроцессорное устройство. Пусть в таком устройстве имеется два порта – один порт ввода D2 и один порт вывода D4. К порту ввода D2 по линии, связанной с его младшим разрядом, подключена кнопка S1, а к порту вывода D4 по линиями, связанным с его двумя младшими разрядами, подключены два светодиода. Функциональная схема части этого устройства приведена на рис….
Дешифраторы D1 и D3 формируют сигналы ВМ1 и ВМ2, служащие для активизации соответствующих портов. При этом дешифраторы включены таким образом, что сигналы ВМ1 и ВМ2 появляются только тогда, когда на младших восьми разрядах шины адресов возникают коды 01 и 02 соответственно. В таком случае говорят, что порт D2 включен как устройство с номером 1, а порт D4 – с номером 2. Далее порт D2 будем называть портом 1, а порт D4 – портом 2.
Допустим, что от устройства требуется выполнение следующей задачи. В исходном состоянии, пока кнопка S1 не нажата, светодиод V1 должен светиться, а светодиод V2 нет. Если кратковременно нажать на кнопку, то светодиод V1 должен на 0,5 с погаснуть, а светодиод V2 загореться. После этого в течение 0,5 с устройство не должно реагировать на нажатие кнопки.
Рис………..Структура специализированной МПС.
Пользуясь описанием системы команд нетрудно понять, что привести устройство в начальное состояние можно с помощью последовательности команд: команды загрузки операнда в аккумулятор МVI А, 00000001 и команды вывода байта данных из аккумулятора в порт 2 – ОUТ 02. Затем следует команда опроса состояния кнопки S1 (т.е. значение младшего разряда порта 1). С помощью команды ввода IN 01 переписываем содержимое порта в аккумулятор и проверяем состояние его младшего бита А (0). Для этого воспользуемся командой логического умножения содержимого аккумулятора на непосредственный операнд (команда АNI 00000001), содержащий 1 только в младшем разряде. В результате выполнения этой команды в аккумулятор запишется код, семь старших разрядов которого будут равны 0. Значение нулевого разряда аккумулятора А (0) будет зависеть от значения младшего разряда кода, прочитанного из порта 1, т.е. от того, была ли нажата кнопка в момент действия команда IN 01.
Таблица ………….
Управляющая программа
Метка | Мнем. | Операнд | Комментарий |
Начало: | MVI | А,01Н | 00000001 > A |
OUT | 02Н | Зажечь V1, погасить V2 | |
Ввод: | IN | 01H | Ввод байта из порта 1 |
ANI | 01H | Маскирование неиспользуемых разрядов | |
JNZ | ВВОД | Повторить ввод, если кнопка не нажата | |
MVI | А02,Н | 00000010 > А | |
OUT | 02H | Зажечь V2, погасить V1 | |
LXI | В,КОНСТ1 | Задать величину задержки 0,5 с | |
CALL | ВРЕМЯ | Вызов подпрограммы задержки | |
JMP | НАЧАЛО | Возврат на «Начало:» | |
Подпрограмма задержки | |||
Время: | DCX | B | Уменьшить на 1 содержимое ВС |
MOV | A, B | Переслать в А содержимое В | |
ORA | C | В и С равны нулю? | |
JNZ | ВРЕМЯ | Если нет, то повторить цикл | |
RET | Возврат в основную программу | ||
КОНСТ1 | EQU | 52080D | Присвоение числовых значений Символическим операндам |
Команда логического умножения воздействует на все биты признаков регистра F. Нас в данном случае интересует состояние бита Z – признака нуля, который устанавливается в 1 при нулевом содержимом аккумулятора, что в данном случае соответствует нажатой кнопке. Таким образом, JNZ ВВОД будет передавать управление команде IN 01, помеченной меткой ВВОД, до тех пор, пока признак Z остается равным 0, нажатие на кнопку приведет к установке признака Z в 1 и выполнению последующих команд программы.
Рассмотрим, как работает подпрограмма ВРЕМЯ. По команде DСX В содержимое регистровой пары ВС микропроцессора уменьшается на 1, а затем в аккумулятор пересылается содержимое регистра В и производится операция логического сложения с содержимым регистра С этой регистровой пары. Если в регистровой паре ВС код еще не стал равным 0, то после выполнения этой команды в аккумуляторе окажется число, также отличное от 0 и выполнится команда условного перехода JNZ ВРЕМЯ к началу подпрограммы, все действия повторяются вновь. При этом программисты говорят, что в программе организован цикл. Выход из него возможен только тогда, когда в результате выполнения команды DСХ В в регистровой паре ВС окажутся все нули. Тогда работа подпрограммы закончится выполнением команды RET и произойдет возврат к выполнению основной программы. Любая подпрограмма всегда должна оканчиваться командой возврата из подпрограммы.
Временная задержка, обеспечиваемая подпрограммой ВРЕМЯ определяется, во-первых, временем, необходимым для однократного выполнения всех команд этой подпрограммы, и, во-вторых, содержимым регистровой пары ВС. Последнее и определяет количество программных циклов.
Выполнение любой команды микропроцессором занимает строго определенное время. Поэтому, зная длительность выполнения каждой команды, можно вычислить общее время однократного выполнения подпрограммы ВРЕМЯ