Й.Янсен Курс цифровой электроники. Том 4. Микрокомпьютеры (1987) (1092084), страница 27
Текст из файла (страница 27)
После передачи счетчик команд считывает из команды САЕ1 операнд, т. е. новый адрес, после чего и происходит требуемый переход. По команде КЕТУК)ь) сначала выбирается младший байт адреса возврата, а затем старший (рис. 3.28). Адресная информация пересылается прямо в счетчик команд. Особой командой перехода является РСН(., которая загружает в счетчик команд (РС) содержимое двойного регистра Н1. При этом содержимое регистра (. передается в младший байт счетчика команд, а содержимое регистра Н вЂ” в старший байт.
Этакомандаособенноудобнадля выполнения такого перехода, прн котором результат операции указывает, в какую подпрограмму или в какой цикл должен произойти данный переход. Адрес перехода при этом может быть подготовлен также и арифметическим способом и помещен в Н(., после чего команда РСН). осуществляет соответствующий переход. Рассмотренные команды перехода находят широкое применение в ряде основных процедур перехода и ветвления, структурные схемы которых приведены на рис. 3.29.
В схеме, представленной на рис. 3.29,а, происходит опрос результата предыдущей операции, в соответствии с которым о Команда СА1.ь заносит в стек адрес следующей команды — адрес возврата, а команда цЕТ11к1Ч извлекает этот адрес из стека и заносит его в счетчик команд. Поэтому при организации возврата с помощью обычной команды в стеке окажется не извлеченный из него адрес возврата, что приведет к нарушению предусмотренной программой работы стека.— Прим, ред. Глава 8 Рис.
3.29. Структуры с ветвлеыиями и иикламы. либо программа продолжается, либо производится ветвление. Практический пример: при чтении данных с кассетного магнитофона в общем случае выполняется одна проверка ошибок записи. Очевидно, что при этом требуется обеспечить сообщение об ошибке с указанием адреса. Обнаружение ошибки вызывает ветвление, которое позволяет сообщить о данной ошибке или решить, надо ли продолжать после этого выполнение первоначальной программы.
Здесь можно воспользоваться условной командой САЕЕ с КЕТ в качестве команды возврата. Структурная схема, показанная на рис. 3.29,б, иллюстрирует передачу управления. Программа может продолжаться по одной из двух возможных ветвей. Приведем практический пример. В случае поставки товаров во Францию в накладных требуется указывать франки, а при поставке в Англию — фунты стерлингов. В результате появляются два варианта расчета, т. е. две ветви программы, которые при дальнейшем выполнении программы снова объединятся в несколько измененном ви- Назар команд микроЭВМ 149 де, когда будет производиться печать величины денежной суммы.
В случае большого числа ветвей блок-схема выглядит так, как показано на рис. 3.29, в. На рис. 3.29,г показана структурнаясхематакназываемого цикла. Здесь на основе опроса происходит обратный переход. Примером подобного цикла является вычитание одного числа из другого до тех пор, пока результат вычитания не станет равным нулю или не произойдет изменение его знака.
Такая операция выполняется при делении одного числа на другое. Наконец, может понадобиться переход в определенную подпрограмму, как показано на рис. 3.29,д. При этом выполнение программы прерывается, так как необходимо сначала обработать в этой подпрограмме какие-либо переменные величины или промежуточные данные. Затем следует обратный переход и выполнение основной программы продолжается. Данная подпрограмма может быть частью другой подпрограммы, которая в свою очередь может являться подразделом основной программы.
Аналогично обстоит дело и с циклами. В подобной ситуации говорят о вложенных программах или подпрограммах. На рис. 3.30 приведен пример такой ситуации. В левой части рисунка показана основная программа, из которой необходимо осуществить переход для выполнения некоторого специального режима обработки данных. Программа совершает переход в подпрограмму, которая обращается к второй подпрограмме.
Во второй подпрограмме имеется внутренний цикл, например предназначенный для повторяющейся процедуры обработки данных (С)МР). В свою очередь вторая подпрограмма вызывает третью подпрограмму (ССА11). В последней подпрограмме выполнение программы может прерваться, если будут выполнены соответствующие условия (переход из СЗМР в КЕТ).
Следует отметить, что переход из СЗМР может произойти в предыдущую подпрограмму косвенным путем через КЕТ в конце третьей подпрограммы. Если допускается прямой переход во вторую подпрограмму, в результате нарушается правильная работа указателя стека. Мы еще вернемся к этой ситуации при разборе примеров других программ. Вторая подпрограмма находится внутри второго цикла с условным оператором СКЕТ. При ответе «истина» происходит возврат в основную программу, а при ответе «ложь» — переход во вторую подпрограмму.
В данном примере по команде )МР происходят как прямые, так и обратные переходы. При использовании команды САП осуществляется переход из одной части программы в подпрограмму, а затем возврат в основную программу. По этой причине команды СА1) часто называют командами перехода к подпрограммам. Набор команд микроЭВМ ЗЛ1.
Инициирование прерывания В предыдущих разделах отмечалось, что в ходе последова.тельного выполнения программы работа микроЭВМ может быть прервана с помощью внешних сигналов от периферийных схем и аппаратуры, которым требуется установить связь с МП. При этом происходит запрос на прерывание, который МП должен «услышать» после того, как будет закончена текущая команда. Этот режим осуществляется с помощью команды Е! (ЕпаЫе 1п1еггпр! — разрешение прерывания). МП можно сделать «глухим» относительно прерываний с помощью команды Р! (Р)заЫе 1п1еггпр! — запрещение прерывания).
МП должен быть невосприимчивым к запросам на прерывание, если прерывание является в данный момент нежелательным, например в ходе выполнения подпрограммы, при прерывании которой может быть потеряна важная информация. При инициировании прерывания дается запрос на прерывание (!г!ТЕ), который МП может в данный момент либо принять, либо проигнорировать. Если этот запрос принят, то МП сообщает об этом сигналом 1ХТА (!п1еггпр! АсйпоМебде— подтверждение прерывания), и одновременно на шину данных поступает информация о том, какое именно внешнее устройство выдало запрос на прерывание.
При этом, если по отдельным сигнальным линиям, связанным с различными внешними устройствами, которые могут вызывать прерывание, потребуется передать кодированное сообщение на шину данных, понадобится внешний шифратор, преобразующий соответствующий сигнал в двоичную форму (рис. 3.31). Сигнал 1ЫТА запускает шифратор, который формирует двоичный код, поступающий на шину данных. Для кодирования запроса на прерывание можно использовать, например, приоритетный шифратор типа 741.8148. Как только становится известно, от какого именно периферийного устройства поступил запрос на прерывание, МП совершает переход в определенный начальный адрес, по которому вызывается программа обслуживания данного устройства, В МП 8085А таким образом выполняется восемь различных запросов на прерывание.
Для этих запросов предназначены команды ЯЗТ, имеющие восьмеричную форму Зп7, где и — указатель адреса, который относится к определенному внешнему устройству. При появлении команды КЗТ содержимое счетчика команд пересылается в стек, после чего происходит переход по адресу, равному восьмикратной величине адреса периферийного устройства, выдавшего запрос на прерывание. Если код, посланный на шину данных, равен нулю, то переход происходит в нулевую ячейку ЗУ, что совпадаетсустанов- Глава 3 152 Рнс. 3.31. Выполвенне запроса на прерывание. кой в нуль, т. е. начальным адресом в начале выполнения программы.
При двоичном коде на шине данных, равном 1, происходит переход по адресу 8, при коде, равном 2, — по адресу 16 и т. д. Чаще всего сначала осуществляется переход в указанные ячейки ЗУ, а затем в определенную программу обслуживания (рис. 3.32). Кроме входа для сигнала прерывания 1ИТЕ, МП 8085А имеет ряд отдельных входов для запросов на прерывание. Если один из этих входов активизируется, то МП сразу хе определяет, какое именно внешнее устройство привело к гоявлению запроса на прерывание. Для этих входов на стр.
153 приведены параметры адресов рестарта, куда происходит переход программы после подтверждения запроса на прерывание. Входы запросов на прерывание могут маскироваться. В результате разрешение определенного запроса на прерывание происходит только тогда, когда соответствующий вход не маскируется и перед этим в 1Е-триггер поступает команда 1Е.
Набор команд микроЗВМ Стек стп с тчпк команд паем рестарта /5 М /5 /2 Л /О 0 д 7 5 5 4 2 2 / 0 О О 0 О О О О О О О ИИМО О О (а) ЮР -5Р после операции и (ер)-5Р до операции 1б) Команды Ндт нс. 3.32. Команды йБТп а — наглядное предстянлннне команд; б — команды яБТ. Установку триггеров в состояние маскирования прерывания осуществляет команда ЫМ (3е1 1п1еггпр1 Маак — установить маску прерывания) (рис. 3.33). ЫМ относится к однобайтовым Входные линии Восьмеричный Шестнадцатеричный адрес адрес ТйЛР 044е 24/е к575,5 054е 2'-ге к5Т6,5 064, 34/е КБТ7,5 074е 3Сы Глава 8 командам и пересылает содержимое аккумулятора в регистр управления прерыванием, который находится в МП. Управляющие данные необходимо описать в формате, показанном на рис.