Материал: Микропроцессорные устройства систем управления (2005)

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

m8: dcr С

; декрементироватъ количество оставшихся циклов

 

 

;

суммирования,

т9: jnZ

m4

 

; вернуться к т4, если цикл суммирования не последний,

mlO: jmp

ml2

; перейти к завершению по ml2 для последнего цикла

 

 

; суммирования,

ml I: movA,

В

; переслать в аккумулятор предыдущее значение

 

 

; суммы при переносе,

ml2: sta Л2

 

; сохранить в памяти сумму,

т!3:

. . . .

 

В примере 2 цикл может завершиться по тб при появлении переноса, и по ml2, если перенос при суммировании не формируется.

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

Корректное продолжение работы приостановленной программы требует восстановления данных в определенных регистрах микропроцессора. Этот набор данных, необходимых для работы программы, принято называть век­ тором состояния программы. В общем случае компонентами вектора со­ стояния являются:

•адрес очередной команды в программном счетчике;

•регистр флагов, так как флаги могут измениться при выполнении под­ программы;

•аккумулятор, его содержимое практически всегда изменяется при вы­ полнении подпрограммы;

•регистры блока РОН, содержимое регистров также может измениться при выполнении подпрограммы.

Следовательно, любые компоненты вектора состояния, изменяющиеся при выполнении подпрограммы, должны сохраняться в памяти и при заверше­ нии подпрограммы восстанавливаться в регистрах микропроцессора. Как правило, эти операции с вектором состояния производят с помощью стека, поэтому стековая адресация всегда поддерживается в микропроцессорных системах.

Очевидно, что вызываемая подпрограмма также требует формирования своего вектора состояния. Вектор состояния вызываемой подпрограммы принято называть вектором прерывания. Так как подпрограмма только на­ чинает работать с момента вызова, в векторе прерывания обычно указыва-

30

ют только начальный адрес вызываемой подпрограммы для программного счетчика.

Таким образом, процедура использования подпрограммы включает сле­ дующие операции: остановка выполнения и сохранение вектора состояния программы, загрузка вектора прерывания и выполнение подпрограммы по вектору прерывания, восстановление вектора состояния и продолжение ра­ боты программы. Выполнение всех этих операций поддерживается систе­ мой команд микропроцессора.

Команда вызова подпрограммы "call A16" производит автоматическое сохранение в стеке текущего адреса команды из программного счетчика микропроцессора и загрузку адреса А16 вектора прерывания в программ­ ный счетчик, а команда завершения прерывания "ret" - такое же автомати­ ческое восстановление адреса в программном счетчике из стека. Из-за та­ кого алгоритма вызова и завершения прерывания задача сохранения и вос­ становления остальных компонентов вектора состояния программы обычно решается в подпрограмме прерывания. Подпрограмма должна начинаться с сохранения в стеке содержимого тех регистров микропроцессора, которые будут использоваться при ее работе. А перед командой возврата из подпро­ граммы (ret) должно выполняться восстановление содержимого этих же ре­ гистров из стека. Коды подпрограммы могут храниться в любой области адресного пространства памяти микропроцессорной системы.

Работу с подпрограммой рассмотрим на следующем примере:

ml

т2: callAsbl ; вызов подпрограммы по адресу Asbl с

; сохранением в стеке адреса тЗ из программного счетчика,

тЗ

;текст подпрограммы с командами сохранения и восстановления

;вектора состояния,

Asbl: push PSW; сохранение в стеке аккумулятора и регистра флагов, Asb2: push ВС ; сохранение в стеке регистровой пары ВС,

Asb3: push HL ; сохранение в стеке регистровой пары HL,

. . . .; команды преобразования данных в подпрограмме,

Asb4:

pop HL ; восстановление из стека регистровой пары HL,

Asb5'

pop ВС ; восстановление из стека регистровой пары ВС,

Asb6'

pop PSW ; восстановление из стека аккумулятора

 

; и регистра флагов,

Asbl:

ret ; возврат из подпрограммы с восстановлением

 

; из стека адреса тЗ; в программном счетчике

31

Выполнение команды т2 приостанавливает дальнейшую работу програм­ мы, при изменении содержимого программного счетчика начинает рабо­ тать подпрограмма с команды AsbL Завершение подпрограммы командой ret восстанавливает адрес команды тЗ в программном счетчике и обеспе­ чивает продолэюение работы основной программы. В приведенном примере предполагается использование в подпрограмме текста программы из пре­ дыдущего примера, которая в процессе работы изменяет данные в акку­ муляторе, регистре флагов и регистровых парах ВС, HL.

Процедура прерывания с вызовом подпрограммы также имеет большое значение в операциях ввода-вывода данных и организации взаимодействия с периферийными устройствами. Для реализации прерываний по запросам периферийных устройств предусмотрены специальные сигналы ШУ мик­ ропроцессорной системы. Подробнее эти вопросы рассмотрены в следую­ щем разделе.

1.5. Алгоритмы ввода-вывода данных

Важным элементом организации эффективной работы микропроцессор­ ной системы являются процедуры ввода-вывода данных. Выполнение алго­ ритмов преобразования невозможно без ввода исходных данных через входные интерфейсы и бессмысленно без выдачи полученных результатов через выходные интерфейсы. Различные устройства, с разными свойства­ ми, самостоятельной организацией и собственными внутренним алгорит­ мами работы могут быть элементами интерфейсов ввода-вывода (рис. 1).

В отличие от памяти микропроцессорной системы, предназначенной только для обеспечения доступа к требуемым данным, интерфейсные сред­ ства должны, с одной стороны, работать по сигналам управления микро­ процессора, и, с другой стороны, учитывать особенности работы внешних (периферийных) устройств. Поэтому для ввода-вывода данных от перифе­ рийных устройств требуются специальные процедуры, обеспечивающие согласование внутренних и внешних алгоритмов работы. Процедуры вводавывода в микропроцессорной системе можно свести к трем типам: про­ граммный ввод-вывод, ввод-вывод по прерываниям, ввод-вывод в режиме прямого доступа к памяти (режим DMA). Эти процедуры выполняются с помощью специальных средств и специальных сигналов ШУ микропроцес­ сорной системы.

Первая особенность этих процедур - устройства ввода-вывода образуют самостоятельное адресное пространство с собственными сигналами управ­ ления, независимыми адресами и командами микропроцессора для доступа к данным. В рассматриваемой микропроцессорной системе (рис. 2) адреса­ ция производится только младшим байтом ША, по ШУ предусмотрена пе­ редача независимых от управления доступом к памяти сигналов ввода и вывода данных. Однобайтовый адрес (А8) и сигналы управления вводом32

выводом передаются микропроцессором при выполнении команд следую­ щего формата: "in А8" - ввода байта данных из устройства с адресом А8 в микропроцессор, "out A8" - вывод байта данных из микропроцессора в устройство с адресом А8.

Без применения дополнительных средств этими командами можно реа­ лизовать только программный ввод-вывод данных. Основная рабочая про­ грамма должна предусматривать периодическое выполнение команд вводавывода данных для всех используемых периферийных устройств. Период обмена данными должен соответствовать максимально возможной скоро­ сти работы периферийных устройств. При несвоевременном обмене дан­ ными работа этих устройств может нарушаться с недопустимой потерей данных и некорректным выполнением требуемых функций.

Однако скорость работы периферийных устройств не всегда однозначно известна и зачастую изменяется в довольно широких пределах. Если уст­ ройство не готово к обмену данными, возможно формирование специаль­ ного сигнала ШУ, который переведет микропроцессор в состояние ожида­ ния. Такой способ согласования весьма неэффективен, так как период ожи­ дания может привести к недопустимо большой задержке выполнения дру­ гих требуемых функций. Возможен и другой вариант организации взаимо­ действия: перед обменом данными микропроцессор предварительно вы­ полняет программный контроль готовности, при готовности производит программный обмен данными, а при отсутствии готовности переходит к выполнению других функций программы с повторением контроля готовно­ сти устройства через определенный интервал времени. В любом из этих ва­ риантов взаимодействия процедуры программного ввода-вывода заметно увеличивают объем функций рабочей программы микропроцессора, замед­ ляют выполнение требуемых функций, не всегда обеспечивают своевре­ менный обмен данными с периферийными устройствами и, следовательно, могут отрицательно повлиять на эффективность работы микропроцессор­ ной системы.

Отказаться от программного контроля состояния периферийных уст­ ройств можно в тех случаях, когда эти устройства сами формируют и пере­ дают запросы на обработку данных в микропроцессор. В микропроцессор­ ной системе запросы от периферийных устройств называют прерываниями (interrupt), а процедуры с их использованием - вводом-выводом по преры­ ваниям. Такая процедура предполагает прием микропроцессором запроса прерывания, остановку выполнения текущих операций основной програм­ мы, вызов подпрограммы обслуживания прерывания с выполнением необ­ ходимых операций взаимодействия с устройством, отправившим запрос прерывания, и затем продолжение работы основной программы. Главное достоинство такой организации взаимодействия - отказ от постоянного программного контроля периферийных устройств в основной программе

33

микропроцессора; подпрограмма обработки прерывания вызывается для работы только тогда, когда возникает необходимость.

Для реализации процедуры прерывания в ШУ микропроцессорной сис­ темы предусмотрены специальные сигналы: запрос прерывания INT, по­ ступающий в микропроцессор от устройств ввода-вывода, подтверждение прерывания INTA, формируемый микропроцессором при переходе в режим обработки прерывания. В ряде случаев остановка рабочей программы для обслуживания прерываний недопустима, поэтому в системе команд микро­ процессора обычно содержатся команды запрета ("di") и разрешения ("ei") прерываний. Если командой "di" прерывания запрещены, поступающие за­ просы INT игнорируются и работа основной программы продолжается.

После команды разрешения прерываний "ei" в основной программе каж­ дый запрос INT будет обрабатываться микропроцессором. Завершив рабо­ чий цикл очередной команды, выполнявшейся в момент поступления за­ проса INT, микропроцессор приостанавливает дальнейшую работу основ­ ной программы, переходит в режим обработки прерывания и выдает в ШУ сигнал подтверждения INTA. Обработка прерывания производится по стандартной процедуре вызова подпрограммы, рассмотренной в предыду­ щем разделе.

Для обработки прерывания устройство ввода-вывода должны передать по ШД код команды "call А16", где А16 - начальный адрес подпрограммы обслуживания прерывания, и прекратить передачу запроса прерывания INT. Организация работы подпрограммы прерывания, выполняющей все необходимые операции взаимодействия с периферийным устройством, практически ничем не отличается от стандартной процедуры вызова под­ программы. Завершается работа подпрограммы прерывания стандартной командой возврата "ret", которая обеспечивает продолжение приостанов­ ленной работы основной программы. Следует помнить, что работа подпро­ граммы прерывания ничем не отличается от работы основной программы и поступлением нового запроса прерывания может быть приостановлена. Для управления процедурами вызова прерываний в этих подпрограммах также необходимо использовать команды управления "ei" и "di".

Организация обработки прерываний в микропроцессорной системе ос­ ложняется тем, что запросы прерываний могут поступать от нескольких разных периферийных устройств. Во-первых, каждое устройство требует вызова индивидуальной подпрограммы прерывания для облуживания за­ проса, во-вторых, запросы от разных устройств могут поступать одновре­ менно, и требуется арбитраж для определения очередности обслуживания. Эти функции обычно выполняют специальные устройства, называемые контроллерами прерываний [1].

Контроллер прерываний является стандартным периферийным устрой­ ством, обеспечивает прием запросов прерываний от нескольких других устройств, выполняет арбитраж поступивших запросов, формирование об-

34

Источник: https://studfile.net/preview/16521245/