Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛP3.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
230.4 Кб
Скачать

16

КОМИТЕТ РЫБНОГО ХОЗЯЙСТВА

ПРИ МИНИСТЕРСТВЕ СЕЛЬСКОГО ХОЗЯЙСТВА РОССИЙСКОЙ ФЕДЕРАЦИИ

МУРМАНСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Кафедра автоматики

и вычислительной техники

Организация ввода/вывода информации в МПС

через внешние устройства, организация разветвляющегося

вычислительного процесса и работа с подпрограммами

Методические указания

к выполнению лабораторной работы

Мурманск

1992

Организация ввода-вывода информации в МПС через внешние устройства. Организация разветвляющегося вычислительного процесса и работа с подпрограммами

Цель работы: исследование методов работы с устройствами ввода/вывода информации. Изучение методов обработки информации (маскирование данных и программный опрос) и организация разветвляющегося вычислительного процесса с помощью команд условных переходов в МПС.

Краткие сведения из теории.

Микропроцессорные системы обмениваются информацией с внешней средой (внешними устройствами ВУ) с помощью специальных команд. При выполнении команды IN N МПС считывает число из порта с адресом N и помещает его в аккумулятор А микропроцессора. При выполнении команды OUT N МПС передает предварительно записанное в аккумулятор А число в порт с адресом N. К отдельным разрядам регистров портов ввода/вывода подсоединяются или датчики, или исполнительные органы (лампы, реле, усилители и т.д.). Поскольку адрес N занимает один байт, то с помощью команд IM и OUT можно обращаться не более чем к 256 портам ввода и 256 портам вывода. Причем адреса ввода и вывода могут совпадать, поскольку порты ввода и вывода являются физически разными устройствами.

С помощью портов ввода/вывода МПС обменивается информацией с ВУ в параллельной форме, то есть за один такт осуществляется ввод/вывод одновременно восьми информационных разрядов. Для этих целей разработаны специализированные БИС, например КР580ВВ55, представляющее собой однокристальное программируемое устройство ввода/вывода параллельной информации.

Эта микросхема предназначена для сопряжения ВУ с системной шиной МПС на базе микропроцессора КР580ВМ80А. В ней находится четыре программно-доступных регистра. Один из них - регистр управляющего слова РУС, остальные образуют три независимых порта ввода/вывода А, В и С. БИС может работать в трех различных режимах. Настройка на соответствующий режим (инициализация) осуществляется записью управляющего слова УС в' РУС перед работой с портами.

Микросхема организована на основе внутренней двунаправленной 8-разрядной шины данных и включает еле дующие функциональные узлы (рис. I):

- буфер шины;

- схема управления чтением-записью;

- посты ввода/вывода А, В и С.

Буфер шины данных является трехстабильным, двунаправленным и предназначен для подключения внутренней шины данных к системной шине данных. Передача информации через буфер осуществляется по командам микропроцессора. Микропроцессор передает на БИС байты данных для внешнего устройства или управляющие слова для программирования БИС и принимает байты входных данных от внешних устройств, или слова состояния микросхемы.

Схема управления чтением/записью осуществляет управление всеми внутренними и внешними пересылками слов данных, управляющих слов и слов состояния.

Управление осуществляется под воздействием внешних сигналов, поступающих на выводы микросхемы:

- вход выборки микросхемы; сигнал низкого уровня на этом входе разрешает связь между микропроцессором КР580ВМ80А и БИС КР580 ВВ55. Обычно подключается к адресной шине через селектор адреса СА, вырабатывавший сигнал низкого уровня только при определенной адресной комбинации (комбинации сигналов на ША);

- вход сигнала чтения низкого уровня, разрешающего передачу данных или слова состояния на системную шину данных МПС;

- вход сигнала чтения низкого уровня, разрешающего прием данных или управляющего слова с системной шины данных МПС;

А0, A1 - входа сигналов выбора одного из портов ввода/вывода или регистра управляющего слова

00 – порт А

01 - порт В

01 - порт С

11 - регистр управляющего слова.

Обычно подключается к младшим разрядам адресной шины МПС; УСТ - вход сигнала сброса, обнуляемого все внутренние регистры;

Порты А, В и С переключаются при этом в режим ввода. Вид обмена информацией между системной ШД и портами ввода/вывода в зависимости от значений сигналов на входах ВМ, ЧТ, ЗП, АО и AI представлен в табл. I.

Таблица I

ВМ

ЧТ

ЗП

AI

A0

Направление обмена и вид информации

ШД

БИС

0

0

0

0

1

1

1

1

0

0

0

0

0

0

1

1

0

1

0

1

Запись данных в порт А

Запись данных в порт В

Запись данных в порт С

Запись УС и РИС

БИС

ШД

0

0

0

1

0

0

0

Х

1

1

1

Х

0

0

1

Х

0

1

0

Х

Чтение порта А

Чтение порта В

Чтение порта С

Отключение

Сопряжение микросхемы (интерфейс) с системными шинами показано на рис. 2.

Рисунок 1. Структура БИС КР 580ВВ55 (К580ИК55).

Рисунок 2. Интерфейс БИС КР 580 ВВ 55 с системными шинами.

Схемы управления группами А и В предназначены для приема и хранения управляющего слова УС и задания режима работы портов ввода/вывода БИС.

Схема управления группой А задает режим работы порта А и старших разрядов порта С, схема управления группой В - режим работы - порта В и младших разрядов порта С. В состав узла управления входит регистр управляющего слова РУС, предназначенный для приема и хранения управляющего слова, поступающего через буфер шины данных и внутреннюю шину данных. Запись УС в РУС осуществляется при наличии логической I в разряде 7 управляющего слова.

Порты А, В и С предназначены для подключения внешних устройств ввода/вывода. Подключение осуществляется с помощью выводов каналов А (КА7... КАО), В (КБ7…КСО) и С (КС7...КСО).

Функциональное назначение каждого порта осуществляется программным способом.

Микросхема может быть настроена на работу в одном из трех режимов, которые условно обозначают 0, 1 и 2.

Порт А включает 8-разрядный входной регистр с выходными формирователями и 8-разрядный входной регистр с входными формирователями. Он может работать на ввод или вывод 8-разрядных слов во всех трех режимах.

Порт В состоит из 8-разрядного регистра ввода/вывода, входных и выходных формирователей и может использоваться на ввод или вывод 8-разрядных слов в двух режимах - 0 и 1.

Порт С состоит из двух 4-разрядных регистров (разряды 0...3 и 4...7 канала С). Каждому регистру соответствует своя группа входных и выходных формирователей, используемых для ввода/вывода 4-разрядных слов в режиме 0. При работе портов А и В в режиме 1 и 2 выводы порта С используются для приема и передачи управляющих сигналов обмена, а регистр порта С выполняет функции регистра состояния.

Формат управляющего слова УС, определяющего режим работы БИС КР580ВВ55, показан на рис. 3.

В данной лабораторной работе будет использоваться режим 0, т.е. простой ввод-вывод через порты А, В и С.

Режимы работы БИС можно устанавливать в любом месте выполнения программы.

Режимы работы каналов А и В могут устанавливаться автономно и независимо, а режим работы канала С зависит от режимов работы каналов А и В.

Для записи управляющего слова в РУС необходимо создать сигналы логического нуля на входах и с одновременной установкой на входах А0 и AI сигналов логической единицы (табл. 1). После этого необходимо поместить в аккумулятор А требуемое управляющее слов и вывести его командой вывода OUT N в порт с номером N. При выполнении команды OUT адрес поста N будет помещен на шину адреса. На шине адреса, устанавливается набор сигналов, соответствующих двоичному коду номера порта N. С шиной адреса соединен селектор адреса СА рис.2, выполненный на дешифраторе типа "1 из 8" рис. 4. Дешифратор "1 из 8" представляет собой логическую схему типа К555ВД7 с входами, присоединенными к ЦА так, как показано на рис. 4. Входы 1, 2 и 3 предназначены для создания логического условия выборки схемы, т.е. логическая операция "1 из 8" будет осуществляться тогда и только тогда, когда будет выполнено условие

Если это условие выполнено, то логический "0" появится на том единственном из восьми выходов, номер которого определяется двоичным кодом на остальных трёх входах А2, A3 и А4 схемы.

Например, на рис. 4 показано такое соединение входа БИС КР580ВВ55 с селектором адреса, которое обеспечивает появление логического нуля на входе ВМ при любом из четырёх адресных двоичных кодов.

D7

D6

D5

D4

D3

D2

D1

D0

"1"

03р канал С1

1-ввод, 0-вывод

канал В

1-ввод, 0-вывод

Режим работы

1-ввод, (03р КС)

0-вывод

47р канал С2

1-ввод, 0-вывод

канал А

1-ввод, 0-вывод

Режим работы 00-режим 0 (47р КС)

01-режим 1

1Х-режим 2

Рисунок 3. Формат управляющего слова УС, определяющего режим работы

БИС КР580 ВВ55.

Рисунок 4. Селектор адреса на основе дешифратора типа "1 из 8" (микросхема К555ИD7)

В-код

Н- код

А7

А6

А5

А4

А3

А2

А1

А0

1

0

0

1

0

0

0

0

90

1

0

0

1

0

0

0

1

91

1

0

0

1

0

0

1

0

92

1

0

0

1

0

0

1

1

93

Отсюда видно, что БИС КР580ВМ55 будет "выбрана" при обращении к любому из четырех портов, находящихся внутри ее. Адресация к каждому из этих портов осуществляется с помощью двух младших разрядов А0 и A1. Таким образом, обращение к любому из четырех портов внутри БИС происходит в два этапа - сначала осуществляется выборка всей БИС с помощью разрядов А7  А2, потом, с помощью двух младших разрядов "уточняется" к какому именно порту внутри БИС происходит обращение. Неизменную часть двоичного кода с нулями в остальных младших разрядах называют базовым адресом. В данном случае базовый адрес - 90.

В качестве примера запрограммируем следующий режим работы БИС:

1) 0 - 3 разряды канала С - вывод;

2) канал В - вывод;

3) режим работы канала В и 0 - 3 разрядов канала С - режим 0;

4) 4 - 7 разряды канала С - ввод;

5) канал А - ввод;

6) режим работы канала А и 4 - 7 разрядов канала С - режим 0.

В соответствии с рис. 3 выбираем управляющее слово 98. Теперь инициализацию БИС осуществим выполнением двух команд

МVI А, 98 - загрузка УС в аккумулятор;

OUТ 83 - пересылка УС в РУС.

После выполнения этих команд БИС настроена на работу в режиме ввода, например, через старшую половину канала С и вывода через его младшую половину.

Селектор адреса и БИС располагаются на макетной панели М. В качестве внешних устройств используется набор из 8 переключателей, выполняющих функции дискретных (двоичных) датчиков и набор из 8 светодиодов, выполняющих функции сигнализаторов. Переключатели и светодиоды конструктивно оформлены в виде выносного пульта, соединяющегося с макетной панелью разъемом.

За один цикл через порт вводится одновременно 8 разрядов двоичной информации. Часто требуется контролировать изменение состояния только одного из восьми вводимых разрядов. Наступление изменения состояния этого разряда контролируют по результату какой-нибудь операции над введенным байтом. Для этого выбирается команда, изменяющая какие-либо разряды регистра признаков F п.3.1 /1/. При таком способе необходимо заботиться о том, чтобы побочная, не интересующая информация в других разрядах байта, не повлияла на установление выбранного признака в регистре F.

Для этого применяют прием маскирования побочных разрядов во вводимых данных с помощью команд логических операций.

Рассмотрим в качестве примера контроль появления единицы в шестом разряде (Д5) вводимых данных через порт с адресом 90. Фрагмент программы для случая маскирования с помощью команды логического умножения ANI будет иметь вид.

Программа I

Адрес

Машинный

код

Метка

Мнемокод

Комментарий

0800

3Е 98

MVI A, 98

Инициализация

0802

D3 83

OUT 83

БИС КР580ВВ55

0804

DB 80

LOOP

IN 80

Ввод через порт 80 (порт А) байта данных

0806

E6 20

ANI 20

Наложение маски для разряда Д5

0808

CA 0408

JZ LOOP

Передача управления на LOOP, если 0

080В

RST 7

Прерывание программы

В этой программе используется понятие метки, в частности, метка LOOP. Метка - это условное имя, содержащее не более шести символов и обязательно начинающееся с буквы. Буквы должны быть латинскими. Например: LOOP1, MET и т.д. Метка проставляется в поле метки команды. При автоматическом переводе (трансляции) каждой метке ставится в соответствие число, равное содержимому счетчика команд к моменту перевода в машинный код, отмеченный в поле меток команды. Далее, при любом упоминании этой метки в командах, вместо нее при трансляциях будет подставляться именно это число. Таким образом, метка - это удобный прием для написания программ с переходами. Здесь имеем случай программного опроса порта ввода. Если единица появляется в любом другом разряде, кроме Д5, например в пятом (Д4) (код 00010000), то результат поразрядного логического умножения этого кода на код маски 20 (00100000) будет 0 (00000000). Следовательно, после этой операции установится в 1 разряд Z в регистре F, и команда Jz LOOP передает управление на метку LООР, т.е. по адресу 0804 (в счетчик команд будет загружен адрес перехода 0804). Так будет продолжаться до тех пор, пока в разряде Д5 не появится 1. Тогда результат после команды ANI будет отличен от нуля, признак не установится, и команда Jz LOOP не будет выполнена (игнорируется), а будет выполнена команда, следующая за ней, т.е. RST 7.

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

Теперь рассмотрим случай вывода информации.

С операцией вывода информации мы уже сталкивались при рассмотрении инициализации БИС КР580ВВ55.

Предположим, что к разрядам порта В (адрес 91), настроенного на вывод, через усилители присоединены светодиоды. Для того чтобы зажечь какой-либо светодиод, необходимо в соответствующий разряд порта В переслать 1, для того чтобы погасить - переслать 0. Таким образом, включение светодиода, например подключенного к разряду Д5, осуществляется группой команд

MOV А, 20

ОUТ 91,

а его гашение осуществляется группой команд

МОV А, 00

ОUТ 91.

Теперь рассмотрим программу, решающую более сложную задачу. Требуется управлять включением и выключением светодиода разряда Д5 порта В с помощью переключателя, присоединенного к разряду Д5 порта А. При этом управление требуется осуществлять только тогда, когда переключатель разряда Д5 порта А выключен.

Из постановки задачи следует, что необходима проверка логических условий. Перед разработкой программы составим блок-схему алгоритма задачи с ориентацией на конкретное устройство ввода/вывода, т.е. БИС КР580ВВ55.

Блок-схема алгоритма имеет вид

Инициализация КР580 ВВ 55

Вод из порта А

да

нет

Ввод из порта А

Ввод в порт В

Ей соответствует следующая программа

Программа 2

Адрес

Машинный код

Метка

Мнемокод

Комментарий

0800

3E 98

MVI A, 98

Инициализация БИС КР580ВВ55

0802

D3 83

OUT 83

0804

DB 80

LOOP

IN 80

Ввод из порта А

0806

E6 08

ANI 08

Наложение маски для Д3

0808

C2 0408

JNZ LOOP

Возврат, если включен

080В

DB 80

IN

Ввод из порта А

080D

E6 20

ANI

Наложение маски для Д5

080F

D3 81

OUT

Вывод индикации

0811

C3 0408

JMP LOOP

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

В языке ассемблера подпрограмма вызывается командой CALL с указанием имени подпрограммы, например: CALL UPRAVL - вызывается подпрограмма с именем UPRAVL. Здесь можно увидеть аналогию с техникой вызова и обращения к подпрограммам на языке Фортран. Точно так же исполнение команды CALL UPRAVL прерывает выполнение естественного порядка следования команд и передает управление подпрограмме с именем UPRAVL. В конце этой подпрограммы обязательно должна быть команда RET (аналогично оператору RETURN в языке Фортран), которая возвращает вычислительный процесс на команду, следующую за командой CALL. Эта связь программных единиц поясняется следующим рисунком.

В виде подпрограммы можно оформить практически любой участок программы. В качестве примера выделим в подпрограмму с именем VKL участок программы 2, а именно:

VKL: IN 80

ANI 20

OUT 81

RET

Назначение этой подпрограммы - ввод из порта А состояния переключателя Д5 и управление светодиодом Д5 порта В. Теперь программа 2 может быть написана следующим образом

START:

LOOP:

VKL:

LXI SP

MVI A

OUT 83

IN 80

ANI 08

LOOP

CALL VKL

JMP LOOP

IN 90

ANI 20

OUT 91

RET

Главная

(вызывающая)

программа

Подпрограмма

Здесь в начале программы появилась дополнительная команда LXI SP, 0900, определяющая "дно" стека (в данном случае 0900). Это необходимо, поскольку для работы команд CALL и RET необходима стековая память (см. табл. 5.1 /1/ и описание этих команд в /1/).

Главная (вызывающая) программа и подпрограмма являются независимыми программными единицами, поэтому они могут быть расположены произвольно по отношению друг к другу. Обычно все подпрограммы, как и область стека, располагают впереди главной программы. Результатом трансляции этой программы с адреса 0900 будет следующий листинг.

Программа 3

Адрес

Машинный код

Метка

Мнемокод

Комментарий

0900

DВ 90

VKL

IN, 80

Подпрограмма ввода состояния переключателя Д5 порта А

и управления светодиодом Д5 порта В

0902

E6 20

ANI 20

0904

D3 91

OUT 81

0906

09

RET

0907

31 0009

START

LXISP,0900

Главная подпрограмма

090A

3E 98

MVI, 98

Назначение «дна» области стека

090C

D3 93

OUT 83

Ввод состояния переключателя Д3 порта А

090E

DB 90

LOOP

IN 80

0910

E6 08

ANI 08

0912

C2 0E 09

JNZ LOOP

0915

CD 00 09

CALL VKL

Вызов подпрограммы

0918

C3 0E 09

JMP LOOP

При выполнении таких программ, первой исполняемой командой (точкой входа) должна быть, очевидно, первая команда главной программы. В программе 3 это команда LXI SP, 0900, расположенная в памяти с адреса 0907. Следовательно, при запуске этой программы с помощью мониторной функции СТ (п. 4.2.3 /1/) необходимо указать адрес начала программы (стартовый адрес), равный 0907.