Раздел: Документация
0 ... 20 21 22 23 24 25 26 ... 39 Адрес порта ОАОН Начало записи последовательности сигналов Адрес порта 0А1Н Загорается при ] воспроизведении I сигнала к\ +5В Последовательность! сигналов задается путем замыкания контактов шести переключателей Г>о-1=М- последовательность сигналов воспроизводится с помощью шести реле (контакты rl\...rls) конец записи последовательности сигналов «выключено-включено». начало воспроизведения последовательности сигналов «включено->выключено». Рис. 7.9. Схема подключения внешних устройств к портам ввода-вывода ключенных к выходам Dj...D6 порта вывода. Кроме того, к выходу D0 порта вывода подключен светодиод, который должен гореть во время воспроизведения записанной микрокомпьютером последовательности сигналов. Теперь, ознакомившись со схемой и четко представляя себе задание, можно перейти непосредственно к составлению программы. Всю процедуру можно разбить на две самостоятельные задачи: «запомнить последовательность подачи сигналов» и «воспроизвести записанную последовательность». Как и в предыдущем случае, начинать надо с составления программ для каждой из двух частей, чтобы потом объединить их в единую программу. Процедура записи в память последовательности подачи сигналов Как всегда при решении подобных задач, построим схему алгоритма процедуры «запомнить последовательность подачи сигналов» (Рис. 7.10). © Записываем в память содержимое порта ввода © НЕТ Последнее состояние на входе порта ввода заносится в память Рис. 7.10. Алгоритм процедуры «запомнить последовательность подачи сигналов» Первый блок изображенной на Рис. 7.10 схемы алгоритма точно такой же, как и в предыдущем примере. Это проверка состояния контактов выключателя SW0. Если контакты замкнуты, переходим ко второму блоку - загрузке в память содержимого порта ввода. Загрузка осуществляется следующим образом. Сначала с помощью команды ввода содержимое порта ввода считывается в регистр А, а затем посредством команды загрузки содержимое регистра А записывается по указанному адресу. На Рис. 7.11 показано, как определяется адрес ячейки памяти для записи очередного числа из регистра А. Память ЦПУ Регистр А I 03 \ Пара регистров HL 00 сгф 0800Н / 0801 / 0802 0803 Область ПЗУ 03 Область . ОЗУ Данные последовательно заносятся в память, начиная с адреса 0800Н LD HL,0800H- X Новые данные загружаем в регистр А LD (HL),A INC HL Загружаем код 0800Нвпару регистров H-L Пара регистров HL применяется в качестве указателя адреса для записи > Содержание регистра А заносим в память по адресу H-L Рис. 7.11. Порядок загрузки данных в память Для того чтобы организовать последовательную запись данных, поступающих из порта ввода, в ОЗУ ЦПУ необходимо занести адреса ячеек памяти, в которые будет производиться запись. Согласно описанию технических характеристик ЦПУ Z80, приведенному в начале этой главы, область оперативной памяти микрокомпьютера включает в себя ячейки с адресами от 0800Н до 0FFFH. В качестве указателя адресов, по которым будет производиться последовательная загрузка данных, используем сдвоенный регистр H-L. Указатель адреса работает следующим образом. Вначале в сдвоенный регистр H-L загружается число 0800Н. Это число и будет первым адресом области памяти, в которую загружаются данные. Затем после каждой очередной загрузки данных по адресу, указанному в паре регистров H-L, содержимое этой пары регистров увеличивается на 1 (команда «INC HL»). Таким образом, содержимое указателя (пары регистров H-L) будет всегда соответствовать адресу ячейки памяти, отведенной для загрузки очередной «порции» данных. Блок 3 схемы алгоритма программы (Рис. 7.10) проверяет, изменилось ли состояние контактов хотя бы одного из шести выключателей PS!...PS6. Для этого данные предыдущей операции считывания из порта ввода, предварительно записанные, например, в регистр В, сравниваются с текущим состоянием на его входах (оператор условного перехода). В блоке 4 проверяется состояние выключателя SW7 (сигнализатора окончания записи сигналов). Если этот выключатель находится в положении «выключено», то повторяются операции, представленные на схеме блоками 2 и 3. Блок 5 схемы обозначает запись в память результатов последнего считывания из порта ввода, когда контакты выключателя SW7 оказываются в замкнутом состоянии. Данные, считанные в этом цикле, используются в процедуре воспроизведения как информация о последнем сигнале. Если описанный выше алгоритм записать в мнемокодах, то получим программу, представленную на Рис. 7.12. Попробуйте самостоятельно разобраться в структуре программы. Чтобы облегчить себе эту задачу, ориентируйтесь по цифрам 1...5, которые соответствуют номерам блоков на схеме алгоритма, представленного на Рис. 7.10. Процедура воспроизведения последовательности сигналов Воспроизведение должно начаться после окончания процедуры записи команд по сигналу, поступившему с выключателя SW7, в момент размыкания его контактов. Данные, представляющие собой последовательность записанных команд, загружены в память начиная с адреса 0800Н. При воспроизведении они побайтно считываются и поочередно транслируются в порт вывода с определенным интервалом. [ Главная программа [ Подпрограмма ~)
Задание значений символических адресов Подготовка: установка областей стека и данных DCHNG: © © © Константа, задающая время задержки N LD DE, 2500Н CALL DELAY IN A, (PORT1) CP В JR Z, DCHNG RET it ® Подпрограмма, проверяющая содержимое порта ввода. Сравниваем содержание регистра В, в котором записано предыдущее состояние, с кодом на входах порта ввода. Константа времени задержки задана таким образом, чтобы продолжительность цикла проверки порта составляла 0.1 с DELAY: DEC DE LD A, D OR JR RET it NZ, DELAY Подпрограмма задержки та же, что и в предыдущем разделе. Используется пара регистров D-E Рис. 7.12. Программа процедуры «запомнить последовательность подачи сигналов» Схема алгоритма этой процедуры и соответствующая ей программа на ассемблере приведены на Рис. 7.13. Блок 1 периодически проверяет состояние контактов выключателя SW7 в ожидании момента, когда они перейдут из положения «замкнуто» в положение «разомкнуто». © © ф Загружаем в HL 0800Н Данные из памяти поочередно посылаются в порт ввода Ждем определенное время Последние~~ ЕТ данные9 SW7CHK: © REPEAT: DTOUT: © ©
Операция воспроизведения повторяется снача/ш Рис. 7.13. Алгоритм и программа процедуры воспроизведения Блок 2: в пару регистров H-L заносим первый адрес памяти (0800Н), начиная с которого были загружены данные в процессе записи последовательности сигналов из порта ввода. Блок 3: используя пару регистров H-L в качестве указателя, поочередно считываем данные из памяти и пересылаем их в порт вЫвода. 0 ... 20 21 22 23 24 25 26 ... 39
|