Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ASSEMBLER / MK8051.doc
Скачиваний:
243
Добавлен:
16.04.2015
Размер:
1.8 Mб
Скачать

2.15. Подпрограммы

2.15.1. Подпрограмма(subroutine)–программа, являющаяся частью другой программы и удовлетворяющая требованиям, которые язык программирования предъявляет к структуре программы [ 3 ].

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

2.15.2. В системе команд МК семейства MCS-51 (см. табл. 2.4) для вызова подпрограмм есть специальные командыLCALL(вызов подпрограммы в пределах всего адресного пространства программной памяти) иACALL(вызов подпрограммы в пределах страницы размером 2К байт). По команде вызова подпрограммы процессором автоматически выполняются следующие операции:

  1. содержимое программного счетчика PCувеличивается на 3,

  2. инкрементируется содержимое регистра-указателя стека SP,

  3. младший байт программного счетчика загружается в стек,

  4. инкрементируется содержимое регистра-указателя стека,

  5. старший байт программного счетчика загружается в стек,

  6. в программный счетчик загружается 16-битный (LCALL) или 11-битный (ACALL) начальный адрес подпрограммы (адрес первой команды подпрограммы).

2.15.3. Подпрограмма должна заканчиваться командой RET(return), по которой из стека извлекается и загружается в программный счетчик адрес возврата в главную программу (сначала старший байт, а затем младший), в результате чего происходит переход к команде, следующей в главной программе за командой вызова подпрограммы.

2.15.4. Подпрограммы могут быть вложенными, т.е. одна подпрограмма может вызываться из другой. Количество вложенных подпрограмм ограничено только объемом памяти, отведенной под стек.

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

2.15.6. Для передачи аргументов из главной программы в подпрограмму и передачи результатов из подпрограммы в главную программу можно использовать:

  1. память данных,

  2. регистры общего назначения,

  3. флаги общего назначения,

  4. стек.

2.16. Система прерываний

2.16.1. Прерывание(interrupt)–это реакция вычислительной системы на внутреннее или внешнее событие, возникновение которого приводит к приостановке выполнения текущей программы и передаче управления подпрограмме обслуживания источника прерывания, по завершении которой осуществляется возврат к прерванной программе.

В общем случае прерывание может быть инициировано внешним по отношению к процессору устройством (внешнее прерывание –externalinterrupt) или какой-либо внутренней причиной, например, ошибкой в программе (внутреннее прерывание–internalinterrupt). Различают также аппаратные прерывания (hardwareinterrupt), вызванные физическими устройствами, и программные прерывания (softwareinterrupt), вызванные специальными машинными командами.

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

2.16.2. Система прерываний МК 80С51 обслуживает только аппаратные прерывания, которые могут быть инициированы внешними по отношению к микроконтроллеру устройствами (внешние прерывания) или встроенными периферийными устройствами (внутренние прерывания). Сигналы запросов внешних прерываний поступают на входы INT0’ иINT1’ микроконтроллера, запросы внутренних прерываний формируются таймером 0, таймером 1, приемником или передатчиком последовательного порта.

Аппаратная реализация рассмотренных выше функций системы прерываний в МК 80С51 осуществляется встроенным периферийным устройством, которое называется контроллером прерываний(IC interrupt controller).

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

Начальные участки подпрограмм обслуживания прерываний, называемые векторами прерываний, размещаются в специальной области программной памяти, начиная с адреса 0003Н. Под каждый вектор прерывания отводится 8 байт памяти. Адрес первого (младшего) байта, называемый адресом вектора прерывания, формируется контроллером прерываний при предоставлении обслуживании соответствующему устройству. Адреса векторов прерываний МК 80С51 приведены в табл. 2.12.

Таблица 2.12

Соседние файлы в папке ASSEMBLER