Главная страница
Навигация по странице:

  • Кафедра ИУ-1 «Системы автоматического управления» ОТЧЕТ по лабораторной работе № 7 «

  • Выполнил: Курганов В.В. Группа: ПС2-51

  • Пример 1. Разработка и оформление подпрограммы временной задержки.

  • Пример 2. Использование подпрограммы в микропроцессорной системе мониторинга состояния оборудования

  • Задачи для самоподготовки

  • PUSH и POP Назначением команды LXI SP в табл. 1 является (установка или тестирование) указателя стека. Установка

  • LXI H Команда вызова CALL в табл. 1 осуществляет помещение в стек содержимого (регистра А или счетчика команд) Счётчика команд

  • Аккумулятора 8. Знак принятия решения заменяется обычно командой (сравнить или JUMP)Сравнить

  • Микропроцессоры лаба. Отчет по лабораторной работе 7 Подключение внешних устройств. Ввод вывод, маскирование данных, и организация условных переходов


    Скачать 0.88 Mb.
    НазваниеОтчет по лабораторной работе 7 Подключение внешних устройств. Ввод вывод, маскирование данных, и организация условных переходов
    АнкорМикропроцессоры лаба
    Дата09.12.2022
    Размер0.88 Mb.
    Формат файлаdocx
    Имя файлаOmtLab7KurganovVVPS2-51 (1).docx
    ТипОтчет
    #836552



    Московский государственный технический университет

    Факультет ИУ «Информатика и системы управления»

    Кафедра ИУ-1 «Системы автоматического управления»


    ОТЧЕТ

    по лабораторной работе № 7

    «Подключение внешних устройств. Ввод — вывод, маскирование данных, и организация условных переходов»

    по дисциплине

    «Основы микропроцессорной техники»

    Выполнил:

    Курганов В.В.

    Группа:

    ПС2-51


    Проверил: Суятинов С.В.

    Москва 2021

    Цель работы: исследование особенностей записи и обращения к подпрограммам.
    Краткие сведения из теории
    Существуют подпрограммы, очень часто используемые одной и той же основной программой или одним и тем же программистом в различных программах. Бывает, что одна подпрограмма так часто используется, что она помещается в ПЗУ постоянно. Передача управления программой в подпрограмму выполняется одной командой вызова. Возврат или восстановление управления основной программой осуществляется командой возврата. Кроме того, команды помещения в стек, извлечения из стека и загрузки указателя стека используются также как текущие вместе с подпрограммой.

    Для вызова подпрограммы и возврата из них используются команды CALL2>1> и RET.

    Команда CALL2> <А1> загружает в программный счетчик МП БИС содержимое байтов <А2><А1>, записанных в последующих двух адресах памяти после адреса, где записан код команды CALL (CD). Содержимое байта <А2> записывается в младший байт PCL программного счетчика, а третий байт 1> команды — в старшин байт РСН программного счетчика, при этом МП БИС автоматически сохраняет в стеке адрес основной программы, к которому она будет обращаться после выполнения подпрограммы.

    Стек - специально организованная область ОЗУ, используемая микро-ЭВМ для временного сохранения данных или адресов. Число, записанное в стек последним, извлекается из него первым.

    Команда RET (С9) помещает в программный счетчик последнее число, записанное на данный момент в стеке. После этого выполнение программы будет осуществляться с этого адреса. Любая подпрограмма должна кончаться командой RET.

    Автоматическое сохранение н восстановление адреса основной программы при выполнении подпрограмм позволяет сделать подпрограммы вложенными, т. е. осуществить вызов одной подпрограммы из другой. Уровень вложенности для данной микро-ЭВМ определяется лишь размером стека.

    Существуют также команды условного вызова подпрограммы и возврата из них. Они позволяют вызвать подпрограмму и возвратиться из нее по определенному состоянию заданных разрядов регистра признаков (индикаторов) (аналогично командам условных переходов) без использования дополнительных команд. Все команды условного вызова подпрограммы трехбайтные, во втором и третьем байтах сообщается начальный адрес подпрограммы. Команды вызова подпрограмм и возврата из них используют стек и внутренний регистр МП SP (STACK POINTER) для адресации к стеку.

    Помимо команд вызова подпрограмм и возврата из них, со стеком можно обмениваться информацией с помощью команд PUSH (записать в стек coдержимое обозначенного регистра R микропроцессора) и POP (записать данные из стека в обозначенный регистр R микропроцессора).

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

    При записи в стек содержимого пары регистров или программного счетчика по адресу SP—1 записывается содержимое старшего регистра из указанной пары или старший байт РСН программного счетчика, а по адресу SP—2 в стек записывается содержимое младшего регистра из указанной пары младшего байта PCL програм­много счетчика.

    При записи из стека данных в пару регистров или программный счетчик в младший регистр пары или PCL записывается число из адреса, указанного в указателе стека SP, а в старший регистр пары или РСН — число, записанное по адресу SP+1. В результате выполнения команды содержимое указателя стека SP увеличивается на 2. Данные в памяти не изменяются, а лишь происходит их чтение и увеличение содержимого SP.

    Таким образом, при записи данных адреса стека растут от больших к меньшим, а указатель стека SP всегда содержит последний адрес стека, в котором записано число.

    При разработке программ необходимо первоначально назначать область стека, записывая в SP адрес с помощью команды LXT SP2>1> или команды SPHL.

    Все операции со стеком должны быть сбалансированы, т. е. каждая подпрограмма должна содержать равное количество команд PUSH и POP и оканчиваться командой RET. В противном случае выполнение команды RET в конце подпрограммы приведет к записи в программный счетчик случайного числа из стека. Адрес возврата в основную программу будет потерян, что приведет к нарушению последовательности ее выполнения.

    В начале каждой программы в стеке сохраняют содержимое всех задействованных при ее выполнении регистров с помощью команд PUSH. В конце подпрограммы восстановление содержимого регистров осуществляется с помощью команд POP. Восстановление содержимого должно осуществляться в обратной последовательности по отношению к их записи в стек.

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

    Пример 1.

    Разработка и оформление подпрограммы временной задержки.

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

    Схема алгоритма такой программы показана на рис. 7.4. Программа имеет символическое имя TIME и в случае вызова ее основной управляющей программой по команде CALL TIME должна завершаться командой возврата RET.


    Текст подпрограммы, реализующей алгоритм, показанный на рис. 7.4, приводится ниже.


    Метка

    Мнемокод

    КОП

    Пояснения

    TIME:

    MVI В, X

    06Н

    загрузка в регистр В числа X

    COUNT: ; уменьшить на 1 содержимое В

    DCR В

    05Н

    Уменьшить на 1 содержимое В




    JNZ COUNT

    С2

    цикл, если В 0




    RET

    С9

    Возврат в основную программу, если В=0

    Обращение к подпрограмме временной задержки осуществляется по команде CALL TIME.

    Загрузите программу в симулятор, приведите экранную форму, подобную той, которая приведена на рис.1.


    Рис.1. Экранная форма

    Пример 2.

    Использование подпрограммы в микропроцессорной системе мониторинга состояния оборудования

    На рис. 2а, приведена структурная схема алгоритма мониторинга. В задачу МП входит ввести два отобранных числа, образовать их сумму и сохранить ее.

    Этой процедуре соответствуют три кадра в начале схемы. Затем сумма должна быть умножена на масштабный коэффициент. Результат масштабирования размещается в памяти. Это связано с тем, что сумма (в третьем кадре) должна быть восстановлена в аккумуляторе. Затем, значение суммы сравнивается с заданным значением, равным 10Н. Результат сравнения определяет значение индикатора в регистре признаков и служит знаком принятия решения. В том случае, если сумма равна или больше10Н, программа выводится на сигнализацию тревоги, если меньше10Н, циклится и снова вводит выборку чисел.

    Такой тип программ мог бы быть использован в промышленных устройствах, когда сумма двух входов должна постоянно контролироваться; быть подвержена мас­штабированию, а затем размещена в памяти; контролироваться по крайней мере один раз в секунду для определения, не приняла ли она опасного значения, и если да, то программа должна выдать аварийный сигнал АС.

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

    Каждый кадр схемы эквивалентен одной операции МП. Выделенная рамкой ячейка, представляет собой группу команд, называемую подпрограммой «умножить».

    В табл. 1 представлена программа на ассемблере, структура которой показана на рис. 2б. Используются только команды, которые составляют часть состава команд типового МП (список, относящийся к подпрограммам умножения, на рисунке не приведен).

    Три первые команды (табл.1) заносят в указатель стека, в регистры HL и аккумулятор А соответственно 20С0Н, 2040Н и 00Н.

    Таблица 1. Программа контроля оборудования

    КОП

    Метка

    Мнемоника

    Операнды

    Комментарий

    31




    LXI P

    P, 20C0H

    Поместить 20C0H в указатель стека




    START

    LXI H

    H, 2040H

    Поместить 2040Н в пару HL (указатель адреса основной программы)

    AF




    ХRА

    A

    Сброс аккумулятора в 00Н

    86




    ADD

    M

    Сложить (А) с содержимым ячейки памяти 2040Н (сложить первое слагаемое с содержимым ячейки памяти 2040Н)

    23




    INX H

    H

    Инкрементировать пару HL до 2041Н

    86




    ADD

    M

    Сложить А с содержимым ячейки памяти 2041Н (сложить второе число с содержимым ячейки памяти 2041Н)

    F5




    PUSH PSW

    PSW

    Поместить в стек (А) и индикаторы

    CD




    CALL

    MULTIPLY

    Вызов подпрограммы MULTIPLY в ячейку памяти 2050Н

    23




    INX H

    H

    Инкрементировать пару HL до 2042Н

    77




    MOV M,A

    M, A

    Поместить произведение в ячейку памяти (HL)= 2042Н

    F1




    POP

    PSW

    Извлечь из стека и восстановить А и индикаторы

    FC




    CPI

    10H

    Сравнить (А) и 10Н. Если (А) <10Н то CY= 1; иначе CY = 0

    JC




    JC

    START

    Перейти к START (ячейка памяти 2003Н), если CY =1; если нет, продолжать последовательно

    76




    HLT




    Остановить МП



    Рис. 2. Структурная схема программы контроля оборудования (а) и ее развитие (б)
    Четвертая складывает содержимое (А) (т. е. 00Н) с содержимым ячейки памяти, на которую указывает пара HL (адрес 2040Н). Обратимся к рис. 3, который представляет собой основную программу, данные, подпрограмму и память стека, использованные в этом примере.

    Заметим, что содержимым памяти по адресу 2040Н, сложенным с (А) является 05Н. После выполнения четвертой команды содержимым (А) является 05Н (00Н+ 05Н=05Н).

    Пятая команда основной программы инкрементирует пару HL.

    Шестая складывает содержимое памяти по адресу 2041Н с (А), где находится число 5. Эта ячейка памяти 2041Н содержит 09Н (см. рис. 3). Регистр А содержит 05Н, а сумма после второго сложения ADD М (здесь М= HL=2041Н ) равна 0ЕН =1410 в регистре А является суммой двух выбранных чисел.

    Следующей командой основной программы является PUSH PSW, которая сохраняет содержимое аккумулятора и индикатора. Эта команда необходима, потому что следующая команда вызова CALL MULTIPLY разрушит содержимое этих регистров, выполняя подпрограмму умножения.

    Операция вызова CALL MULTIPLY помещает адрес команды в последовательности основной программы (в нашем примере 200ЕН) в стек, затем переходит к адресу первой команды подпрограммы (адрес 2050Н). Этот вызов показан на рис. 3.

    Команду вызова подпрограммы CALL MULTIPLY можно рассматривать как команду, которая просто умножения содержимого А на число.

    Подпрограмма в нашем примере осуществляет умножение 0ЕН на два, т.е. 0ЕНх210=1СН(2810) Таким образом, полученное произведение, помещенное в аккумулятор к моменту возврата, будет равно 1СН.



    Рис. 3 Содержимое памяти рассматриваемой программы

    После возврата в основную программу, адресом следующей последовательной команды становится 200ЕН.

    Команда INX H инкрементирует пару HL. Далее произведение, выполненное подпрограммой, помещается в память по адресу 2042Н командой MOV М, А.

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

    Две следующие команды основной программы предназначены для тестирования суммы в аккумуляторе. Команда сравнить CPI непосредственно выполняет операцию вычитания 0ЕН - 10H = FEH с использованием дополнительного кода числа — 210. Содержимое А меньше чем 10Н. Поэтому индикатор переноса СY установлен в 1. Команда JC (ПЕРЕЙТИ) проверяет индикатор. Если индикатор переноса установлен в 1, то МП переходит к символическому адресу START, который является не чем иным, как началом цикла команды LXI Н (адресация 2003Н, см. рис. 3).

    Практическая часть

    1. Разместить программу Табл1 в памяти симулятора, и протестировать ее доступные части. Представить экранные формы.




    1. Сформулировать свою упрощенную задачу диагностики оборудования и составить программу обработки данных. Подпрограмму умножения на 2 реализовать как сложение числа с самим собой.


    Проверка правильности числа: если число верно, программа завершится, иначе будет работать, пока не будет введено правильное число.




    1. Предложить варианты проверки правильности работы программы



    Задачи для самоподготовки

    1. Изучите, используя симулятор варианты выполнения команд CALL <А1, RET, RST1 и HLT. Рассмотрите два варианта завершения программы, используя RST1, RST0 и HLT. Обратите внимание, что после команды останова HLT, процессор запускается только по сигналу Restart.

    2. Ознакомьтесь с командами вызова и возврата из подпрограммы по условию для МП.

    3. Какие типы команд используются обычно памятью, называемой стеком?

    PUSH и POP

    1. Назначением команды LXI SP в табл. 1 является (установка или тестирование?) указателя стека.

    Установка

    1. Если индикатор переноса в табл. 1 установлен в 1, то по команде JC МП перейдет к выполнению команды (HLT или LXI H)?

    LXI H

    1. Команда вызова CALL в табл. 1 осуществляет помещение в стек содержимого (регистра А или счетчика команд)?

    Счётчика команд

    7 . Команда POP PSW извлекает из стека содержимое (аккумулятора или счетчика команд) и индикаторов и передает их в МП.

    Аккумулятора

    8. Знак принятия решения заменяется обычно командой (сравнить или JUMP)?

    Сравнить

    9. Регистры H и L (См. табл. 1) используются как регистры данных или указатели адреса в основной программе и как указатели адреса или регистры данных в подпрограмме

    Выводы

    В данной лабораторной работе мы изучили принцип работы подпрограмм, а также сами составили и исследовали свои программы.


    написать администратору сайта