Организация программ

В различных случаях применения перед МП ставятся разные задачи. Например, вольтметр со встроенным МП должен измерить входное напряжение и послать данные на дисплей. Процессор должен перевести данные в вольты и автоматически поддерживать нуль шкалы. Измеритель может иметь клавиатуру /для ввода пользователем специальных запросов/. Для автоматической установки диапазона процессор может быть связан с аттенюатором. Каждая из задач, стоящих перед МП, является в основном независимой и может быть представлена относительно простой программой. Затем одна общая /основная/ программа может объединить все специализированные программы, не вдаваясь в подробности каждой задачи.

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

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

Программы, работающие на другие программы, называются подпрограммами. Подпрограммы могут иметь другие подпрограммы, работающие на них и т.д.

Пример. На рис.3, приведена простая программа, которая обеспечивает запись в ячейку памяти 8020 то нулей, то единиц. В этой программе используются подпрограммы. Одна подпрограмма используется для записи в ячейку памяти единиц, другая - для записи нулей.

Основная программа содержит только три команды: одну - для вы­зова подпрограммы "нули", другую -для вызова подпрограммы "единицы" и третью т для перехода к началу.

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

- Команда САLL заставляет МП перейти на подпрограмму. Метки "0" и "1" определяют подпрограммы и помещаются по реальному адресу, когда язык Ассемблер переводится в машинный код. Первые две команды каждой из подпрограмм уже

Рис.3. Пример использования подпрограммы

рассмотрены ранее. Последняя команда RЕТ /возврат/ определяет конец подпрограммы и возвращает МП к выполнению основной программы. В табл. 3 показана полная программа с машинными кодами. САLL состоит из кода операции С9, за которым следует адрес подпрограммы. Адрес подпрограммы хранится таким же образом, как и адрес перехода. Команда RЕТ состоит только из кода С9. Никакого адреса команда не содержит. Однако же МП "знает", куда возвращаться, когда он встречает команду возврата в конце подпрограммы. Когда выполняется команда САLL, адрес возврата, т.е. адрес команды, следующий после вызова подпрограммы, хранится в специальном месте памяти, которое

Таблица 3 Листинг программы записи в ячейку памяти нулей и единиц

Основная программа

Адрес Содержимое Метки Команды Комментарии
  СD Н САLL 0 Подпрограмма записи нулей
         
         
  СD   САLL 1 Подпрограмма записи единиц
  ОF      
         
  СЗ   JМР Н Повтор
         
         
Подпрограмма записи нулей в ячейку памяти 8020
  ЗЕ 0: MVI А, 00 Записать в А нул и
800А        
800B     STA 8020 Записать содержимое А в ячеку
800С        
800D        
800Е С9   RET Возврат в основную программу
Подпрограмма записи единиц в ячейку памяти 8020
800F 3E 1: МVI А, FF ЗаписатьВ А единицы
  FF      
      SТА 8020 Записать содержимое А в ячейку
         
         
  С9   RЕТ Возврат в основную программу

называется СТЕК. Когда в конце подпрограммы встречается команда RЕТ, МП получает из СТЕКА адрес возврата, программа возвращается к основной программе. Работа СТЕКА осуществляется почти полностью автоматически. Более подробно СТЕК будет описан в последующих разделах.

Проведем эксперимент по использованию программы,приведенной в табл.3.

. Введите данную программу в память "Микролаб"..

2. Поставьте тумблер режима в положение ШАГ.

3. Установите начальный адрес программы /8000/ и нажмите кнопку ПУСК. Выполняется первая команда программы /САLL О/, и происходит переход к подпрограмме /адрес 8009/.

4. Нажмите кнопку ПУСК. Выполняется следующая команда, которая является первой в подпрограмме. В аккумулятор заносятся нули.

5. Нажмите кнопку ПУСК. Содержимое аккумулятора заносится в ячейку памяти с адресом 8020. Проверьте содержимое этой ячейки. Там записаны нули.

6. Нажмите кнопку ВОЗВР. Выполнится команда RЕТ, и вы вернетесь в основную программу /адрес 8003/.

7. Нажмите кнопку ПУСК. Произойдет переход во вторую подпрограмму /адрес 800F/.

8. Нажмите два раза кнопку ПУСК. В аккумулятор запишутся единицы /FF/, и содержимое аккумулятора перепишется в ячейку памяти с адресом 8020.

9. Проверьте, имеется ли в ячейке '8020 ГГ.

10. Нажмите кнопку ВОЗВР. Выполнится команда возврата /RЕТ/, и произойдет переход к основной программе /адрес 8006/. По этому адресу будут записаны команды безусловного перехода к адресу 8000.

После этого программа начнет исполняться снова.

11. Нажмите несколько раз кнопку ПУСК, просмотрите программу еще раз.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: