OUTL P1, a

RET

RET

CALL PPB

И т.д. продолжение программы.

CALL PPA

3) …

4) …

100) PPA: …

102) …

103) …

111) PPB: …

112) …

113) …

В этой программе можно выделить три области. Область, охватывающая команды с адресами 1…99 – это область основной программы. Область команд с адресами 100…110 – подпрограмма с условным именем PPA. Область команд с адресами 111…119 – подпрограмма с условным именем PPB. Размеры областей могут иметь различное значение. Область подпрограммы начинается с команды, отмеченной меткой – названием подпрограммы, в нашем случае – это команды 100 и 111. Каждая подпрграмма заканчивается специальной командой RET – возврат (выход) из подпрограммы. Как правило подпрограммы располагаются сразу за основной программой по порядку, одна за другой. Рассмотрим использование стека при выполнении команд вышеприведенной программы. Указатель стека SP = 0. Выполнение команды по адресу 2 (CALL PPA) происходит в нсколько этапов. В ячейки стека 08H и 09H заносится содержимое счетчика команд, увеличенное на 1, для нашего случая – это число 3, а также 4 разряда регистра PSW. Указатель стека увеличивается на 1, то есть принимает значение 1. Счетчик команд (СК) принимает значение адреса той команды, которая помечена названием PPA, то есть 100. Таким образом программа переходит на выполнение команды с адресом 100, то есть на выполнение подпрограммы PPA. При выполнении команды с адресом 101 (CALL PPB) в ячейки 0AH и 0BH заносится содержимое СК, увеличенное на 1, то есть 102 и 4 разряда регистра PSW. Указатель стека увеличивается на 1, то есть становится равным 2. Счетчик команд принимает значение адреса команды, помеченной названием PPB, то есть 111. Не выходя из подпрограммы PPA, программа вошла в подпрограмму PPB. Это и есть вложение одной подпрограммы в другую. На данный момент стек хранит и адрес возврата из подпрограммы PPA (3) и адрес возврата из подпрограммы PPB (102). Выполнение подпрограммы PPB заканчивается командой с адресом 119 (RET). По этой команде указатель стека уменьшается на 1, становится равным 1, поэтому именно из ячеек 0AH, 0BH, а ни из каких других в счетчик команд переписывается число там хранящееся, а именно 102. Это означает, что будет выполняться команда с адресом 102, то есть продолжится выполнение подпрограммы PPA. Последняя команда подпрограммы PPA имеет адрес 110 (RET). При выполнении этой команды указатель стека уменьшится на 1 и станет равным 0, поэтому именно из ячеек 08H, 09H в счетчик команд перепишется значение, равное 3. Это значит программа продолжит свое выполнение с адреса 3, то есть продолжится выполнение основной программы. Следует обратить внимание на то, что в правильно написанной программе число вхождений в подпрограмму должно быть равно числу выходов из подпрограммы так, чтобы указатель стека в конце программы был равен 0.

Б) Второй случай использования стека:

При прерываниях, аналогично команде CALL addr в стек заносится содержимое СК и 4…7 разрядов PSW. По команде RETR – возврат из подпрограммы обработки прерывания - данные СК восстанавливаются, а также восстанавливается содержимое 4…7 разрядов PSW.

В МК48 предусмотрена возможность расширения внутренней памяти данных за счет внешней, максимальный размер которой 256 байт путем подключения внешних микросхем ОЗУ(см. раздел “Работа с внешней памятью”).

7.4.5. Каналы ввода – вывода.

Каналы ввода/вывода служат для организации обмена информацией МК48 с внешними устройствами. Линии ввода/вывода организованы в три 8-ми-разрядных порта P0, P1, P2. Порты P1, P2 в режиме вывода фиксируют выводимые данные в триггерах - защелках. Каждая линия независима и имеет свой триггер - защелку. Эти данные сохраняют свое значение до следующей выдачи данных в порт.

В состояние ввода порты P1, P2 устанавливаются после сброса SR, а также, если на разряды порта выдана “логич.1”. После этого можно считывать содержимое выводов порта. Возможна смешанная настройка линий порта: одних на ввод, других на вывод.

Электрическая схема одной из линий порта P1, P2.

Внутренняя шина - двунаправленная. D – триггер - триггер-защелка. Состояние триггера-защелки определяет состояние выхода. Если Q=1, /Q=0 то транзистор VT2 закрыт, выход подпитан через резистор R и находится в состоянии ”1”.

Если Q=0, /Q=1, то транзистор VT2 открыт и на выходе устанавливается состояние ”0”.

Запись в триггер - защелку осуществляется через внутреннюю шину по внутреннему сигналу ”Запись”. Устройство B1 предназначено для реализации чтения состояния триггера – защелки, по внутреннему сигналу ”чтение защелки”. Устройство B2 предназначено для чтения состояния линии порта по внутреннему сигналу ”чтение порта”.

По схеме видно, что для того чтобы использовать вывод как вход нужно, чтобы транзистор VT2 был закрыт, иначе он шунтирует вывод на общий провод. Запись в триггер – защелку ”1” позволяет использовать вывод как вход.

Устройство И обеспечивает включение транзистора VT1 на короткое время» 0.4мкс при изменении содержимого защелки с ”0” на ”1” для формирования фронта нарастания сигнала на выводах порта. После выключения транзистора уровень ”1” поддерживается на выводе порта за счет резистора R1. Rоткр. тр-ра £ 5 кОм. R1 = 50кОм.

Рассмотрим работу схемы в режиме вывода в линию порта 0 или 1.

При выводе 1 уровень логической единицы помещается на внутреннюю шину, на линию “запись” выдается короткий положительный стробирующий импульс, который своим передним фронтом производит запись единицы в D – триггер. Выход Q триггера становится равным 1, выход /Q – 0. Сигнал с выхода Q разрешает прохождению импульса “запись” через логический элемент “И” на затвор полевого транзистора VT1, который открывается на время действия этого импульса. Сигнал 0 с выхода /Q, поступая на затвор полевого транзистора VT2, закрывает его. На линии порта устанавливается состояние логической единицы.

При выводе 0 транзистор VT1 не открывается, а открывается транзистор VT2, на линии порта устанавливается потенциал, близкий к нулевому.

При вводе информации из линии порта, состояние линии порта поступает на устройство В2 и по сигналу “чтение порта” поступает на внутреннюю шину и далее в аккумулятор МК48.

Перечислим команды, которые работают с портами P1, P2.


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



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