
- •Приемы программирования микропроцессора на языке ассемблер
- •Введение
- •1. Краткие сведения из теории
- •2. Программирование последовательных
- •2.1. Программирование участков алгоритма, не содержащих
- •2.2. Задание для самостоятельной работы
- •3.Программирование разветвлений
- •3.1. Краткие сведения из теории
- •3.2. Разветвляющиеся программы
- •3.3. Задание для самостоятельной работы
- •4. Программирование циклических вычислительных процессов
- •4.1. Программирование участков алгоритма, содержащих циклы
- •4.2. Задание для самостоятельной работы
- •5. Реализация заданных временных интервалов программным способом
- •5.1. Краткие сведения из теории
- •5.2. Программы временных задержек
- •5.3. Задания для самостоятельной работы
- •Рекомендуемая литература
- •Оглавление
5. Реализация заданных временных интервалов программным способом
5.1. Краткие сведения из теории
В том случае, если при работе МП необходимо неоднократное выполнение одного и того же набора команд, его оформляют в виде подпрограммы. Тогда для вызова подпрограммы используют команду CALL ADR, где ADR, - адрес первой команды подпрограммы.
Остановимся на принципе работы МП при работе с подпрограммами.
Пусть главная программа начинается с адреса 0800Н, а подпрограмма – с адреса ADR (в данном случае ADR – общее обозначение адреса ячейки памяти, в конкретном случае он имеет свое шестнадцатеричное представление). Главная программа имеет в своем составе необходимое количество команд вызова подпрограммы. Описанная программа представлена на рис. 5.1, где команды, не интересующие нас в данном случае, отмечены пунктиром.
Г |
Адрес |
Мнемоника |
|
Адрес |
Мнемоника |
Подпрограмма |
0800 |
|
|
ADR |
|
||
|
|
|
|
|
||
|
CALL ADR |
|
|
|
||
|
|
|
|
|
||
|
|
|
|
|
||
|
|
|
|
|
||
|
CALL ADR |
|
|
|
||
|
|
|
|
RET |
Рис. 5.1. Программа, имеющая в своем составе подпрограмму
После запуска МП с адреса 0800Н он через некоторое время дойдет до адреса с кодом команды CALL ADR. При выполнении команды CALL ADR МП загружает в стек адрес следующей команды (за CALL), а адрес ADR загружает в счетчик команд (РС), поэтому следующей выполняемой МП командой будет команда по адресу ADR (первая команда подпрограммы). Последней командой подпрограммы всегда должна быть команда RET, обеспечивающая возврат в главную программу. При ее выполнении в РС загружается адрес из стека (который был записан при выполнении команды CALL), поэтому следующей выполняемой командой будет команда, следующая за CALL. Осуществляемые переходы из главной программы в подпрограмму и обратно показаны на рисунке стрелками.
Следует отметить, что поскольку при выполнении команд CALL и RET МП использует стек, то в программе необходимо определить область стека, т.е. в указатель стека (SP) загрузить адрес вершины стека. Это обычно делают в самом начале главной программы, используя, например, команду LXI SP ADR. Здесь ADR – условное обозначение адреса вершины стека, который для УМК-80 можно назначить как 0BFFH (адрес последней ячейки памяти ОЗУ).