Разделы
Публикации
Популярные
Новые
Главная » Сопряжение цифровых, аналоговых сигналов

1 ... 10 11 12 13 14 15 16 ... 59

74LS174, занося в них 12 младших разрядов с линий данных D. Запись в регистр производится по импульсу ВЫВОД при условии дешифрации адреса устройства. После того как координата Y будет занесена в регистр, с помощью двух одновибраторов вырабатывается деблокирующий импульс длительностью 5 мкс, который обеспечивает усиление яркости выбранной точки экрана (все видеоустройства имеют для этой цели вход Z). Для того чтобы воспроизвести на экране кривую или набор символов, нужно лишь многократно выводить на шину последовательные координаты XY. Это должно происходить настолько быстро, чтобы глаз не замечал мерцания. Мини-ЭВМ обладают достаточным быстродействием для того, чтобы многократно вывести на дисплей несколько тысяч пар координат XY без какого-либо заметного мерцания. Даже этот простой интерфейс существенно увеличивает возможности малых ЭВМ.

На рисунке показано, как можно сократить число элементов интерфейса, применяя в адресной схеме стробируемый дешифратор. Фокус состоит в том, что старшие входные разряды используются в качестве сигналов отпирания дешифратора (7442), который не имеет специальных отпирающих входов. В данном случае удобнее использовать дешифраторы типа 74138 (сдвоенный 3-8), и 74139 (сдвоенный 2-4), которые имеют один или несколько таких входов.

Программирование дисплея. Программа 10.2, предназначенная для управления рассмотренной интерфейсной схемой, построена, что называется, в лоб ,

; подпрограмма управления графическим дисплеем

INIT: LDA XPOINT

STA X

LDA YPOINT STA У

LDA NPOINT STA N LDA @X OUT U2 LDA @Y OUT 113 ISZ X ISZ Y DSZ N

установка указателя X в начальное состояние установка указателя Y в начальное состояние

LOOP:

; установка счетчика в начальное состояние ; получигь значение X ; вывести X ; получить значение Y ; вывести У

; приращение указателя X, переходов нет

; приращение указателя Y, переходов нет

; уменьшение на 1 содержимого счетчика. Получен нуль?

JMP LOOP ; нет, вывод следующей точки

JMP INIT ; да, переход к началу программы

XPOINT: (адрес первого значения X)

YPOINT: (адрес первого значения Y)

NPOINT: (количество выводимых точек)

X: 0 ; здесь хранится указатель X

Y: 0 ; здесь хранится указатель Y

N: 0 S здесь хранится значение счетчика

Программа 10.2



Адреса первых значений координат X и Y, а также количество воспроизводимых на экране точек должны быть доступны этой программе. Она, вероятно, будет оформлена в виде подпрограммы, у которой эти параметры служат текущими аргументами. Программа заносит начальные значения в ячейки X, Y и N, а затем входит в цикл, передавая последовательные пары значений X, Y в устройства с адресами 112 и 113. Координаты X и Y каждый раз увеличиваются, а содержимое счетчика уменьшается на 1 и проверяется на нуль. Нуль Б счетчике означает, что на дисплей была выведена последняя пара. После этого восстанавливаются исходные значения координат, и процесс начинается снова.

Отметим два важных момента: после первоначального запуска программа постоянно выводит на экран массив XY. В реальных условиях она обычно производит проверку состояния клавиатуры или ключей машины для того, чтобы определить момент, когда оператор решил закончить работу с дисплеем. Вместе с тем цикл работы дисплея может также быть завершен цо прерыванию, которое будет рассмотрено ниже. При использовании такого регенеративного дисплея обычно не остается времени для того, чтобы одновременно с выводом информации на экран производить большое количество вычислений. Более совершенным устройством является дисплей с регенерацией от собственной памяти, который часть нагрузки машины берет на себя. Тем не менее для многих задач пригоден и простой регенеративный дисплей. Машины, которые рассматриваются в данной книге, используют именно такие дисплеи.

10.07. Передача данных под управлением 11рограт<ы:ввод

Также просто реализуется программа передачи и в другом направлении. Как и в рассмотренном случае, интерфейсный блок постоянно проверяет состояние линий АДР и после обнаружения своего адреса по импульсу ВВОД подает слово на линии ДАННЫХ Пример такой организации показан на рис. 10.3. Представленная на нем интерфейсная схема позволяет ЭВМ считывать 6-разрядное слово, хранящееся в D-регистре типа 74LS174. Поскольку внешнему устройству доступны его тактовый и информационный входы, регистр может использоваться для хранения различных видов информации (выход цифрового прибора, аналого-цифрового преобразователя и т. п.). Адрес устройства (213) дешифруется в данной схеме при помснци вентиля И-НЕ на 8 входов, который по импульсу ВВОД открывает инвертирующую буферную схему с тремя состояниями 74366. Во многих мини-ЭВМ используются шинные формирователи с открытым коллектором с нагрузочными резисторами на линиях шины. В этом случае в качестве формирователей можно применять вентили И-НЕ, имеющие повьппенную нагрузочную способность, как показано на рис. 10.3. По этой причине в большинстве мини-ЭВМ линии данных работают в отрицательной логике. На невозбужденных линиях с помощью нагрузочных резисторов



поддерживается ВЫСОКИЙ уровень, который воспринимается как нуль. Это удобно, когда задействованы не все линии данных (как в рассмотренных примерах, а также при использовании рассматриваемого ниже регистра состояний), поскольку в этом случае для задания

1шииа]

а

VCTP.213

7 LSI 7 [б-разрядный И-регистр) Л-6

Строб

6 йнсрормэционнУА разрядов


7)35

(2 корпуса)

Рис. 10.3. Порт для ввода данных.

нулей на незадействованных линиях не требуется устанавливать формирователи, В этой схеме, как и во всех интерфейсных схемах, которые будут рассматриваться в дальнейшем, мы постараемся не создавать путаницу в отношении линий шины и будем называть их в соответствии с их обозначениями.

10.08. Передача данных] под управлением npq граммы: регвстщ состояния

В последнем примере ЭВМ может считывать слово с интерфейса столько раз, сколько ей требуется. Это очень хорошо, однако здесь возникает вопрос: каким образом машина узнает о том, что имеются данные, предназначенные для чтения? В некоторых ситуациях может потребоваться, чтобы ЭВМ чнтала мФ9РМ9]ию с равными интервала-



МИ, которые определяются ее датчиком реального времени. В частности, по команде OUT машина может дать указание АЦП начать преобразование через заданный интервал и спустя несколько микросекунд считать результат по команде IN. Для систем регистрации данных этого часто вполне достаточно, но нередко бывает и так, что внешнее устройство само подготавливает сообщение, которое без ожидания должно быть передано в машину.

ВВОД (шина) БЫВ.УСТР. А -

7LS374

0 клавиатура, использующая ь1Ниь алфавит ASCII

> Q Й

74 LSI 25

r74LS74

ВВОД(шина ВЫБЛСТР. В

Рис 10.4. Порт для ввода с клавиатуры.

Классическим примером является буквенно-цифровое устройство ввода от клавиатуры. Поскольку знаки при вводе не должны теряться, машина должна забирать каждый знак без длительной задержки. Еще серьезней дело обстоит с быстродействующими ЗУ, такими, как накопители на магнитных дисках и лентах, где данные должны передаваться без зздер ек со скоростью около 100 ООО байт в секунду. Для решения этой общей проблемы существуют три способа: использование регистров состояния, работа с прерыванием программы и прямой доступ к памяти. Начнем с первого, простейшего метода, который иллюстрирует приведенная на рис. 10.4 схема интерфейса клавиатуры.

В этом примере клавиатура, работающая в коде ASCII, вводит знаки в 8-разрядный регистр D-типа 74LS374, тактируя его импульсом СТРОБ, который возникает в момент нажатия клавиши. Регистр имеет выходы с тремя состояниями, что позволяет построить простую схему программного ввода данных. Когда на линиях АДР действует адрес данного интерфейсного блока, от схемы дешифрации (которая аналогична рассмотренной в предыдущих примерах) на вход ВЫБ.УСТР.В поступает ВЫСОКИЙ уровень.

Новым Б данном примере является триггер, который устанавливается Б 1 при нажатии клавиши и сбрасывается после того, как знак будет прочитан машиной, Это и есть одноразрядный регистр состояния,



единственный разряд которого имеет ВЫСОКИЙ уровень, если подготовлен новый знак, и НИЗКИЙ уровень в противном случае. ЭВМ может проверить состояние этого разряда, выполняя команду IN по другому адресу, который также приписан данному устройству. Этот адрес дешифрируется (с помощью вентилей, дешифраторов и т. п.) как адрес В, вырабатывая сигнал ВЫ Б. У СТР. В. Для передачи информации о состоянии здесь достаточно одного бита, поэтому на шину выводится лишь старший разряд. В данном случае для этого используется буферная схема с тремя состояниями. Линия, подходящая сбоку к символу буфера, представляет собой отпирающий вход: выход буфера 74LS125 отпирается, когда эта линия имеет НИЗКИЙ уровень, поэтому на входе схемы показан кружок инверсии.

Пример программы: терминал с клавиатурой. Теперь ЭВМ знает, как определить, что данные подготовлены. Каким образом это происходит, иллюстрирует программа 10.3.

Это стандартная подпрограмма, предназначенная для получения символов от клавиатуры, которая каждый введенный символ отсылает обратно на печатающее устройство. (Для клавиатуры код устройства - KBDCHR, а для печатающего устройства - OUTCHAR. Фактические числовые значения этих кодов определяются соответствующими операторами в начале программы и для простоты опущены.) После того как будет введена целиком вся строка, управление передается программе обработки строки, которая должна выполнять операции на основании того, что указано в строке. После того как эта программа будет готова для обработки следующей строки, она печатает звездочку. Программа организует цикл по флажку ввода (код устройства = KBDFLAG), проверяя знаковый разряд слова, считанного из регистра состояния; он будет отрицательным, когда установлен старший разряд (СЗР представляет собой знаковый бит в дополнительном коде), т. е. когда интерфейс подготовил новый символ. Затем программа считывает символ (триггер флажка при этом сбрасывается), заносит его последовательно в буфер строки, дает приращение указателю, выводит Зтот символ на печатающее устройство и проверяет, закончена ли строка по наличию символа возврата каретки. Если строка закончена, то управление передается программе обработки строки; если нет, то программа возвращается обратно и начинает очередной цикл с опроса флажка клавиатуры.

Для распечатки символа использовалась специальная подпрограмма, поскольку даже такая простая операция требует проверки флажка (код устройства = OUTFLAG, старший разряд установлен в 1 , пока печатающее устройство не кончит печатать). Возврат к главной программе осуществляется по косвенному переходу через ячейку ТУРЕ (напомним, что МС-16 использует адрес возврата в первую ячейку подпрограммы, а выполнение ее начинается со второй). На данном примере хорошо иллюстрируется неудобство однорегистровой машины: для того чтобы иметь возможность проверять состояние

5 ms.



Глот 10

IN IT J LDA BEGIN STA РОШ

LOOP: IN KBDFLAG JPL LOOP IN KBDCHAR STA ©POINT ISZ POINT JSH TYPE

SUB CR

JNZ LOOP LINE:

LDA STAR JSR TYPE JMP INIT

POINT: 0

CR: 15

STAR: 52

BEGIN: (начальный адрес

S программа управления клавиатурой-использует флажки

; получение начального адреса буфера символов ; инициализация указателя * новый символ готов? ; нет

J да, ввод символа ; запись символа в буфер строки % приращение указателя

S вывод последнего символа обратно на печатающее устройство ? последний символ-возврат каретки? ; если нет, получить следующий символ ; если да, произвести обработку строки

; операции по обработке строки

TYPE: й

CHECK:

STA TEMP

IN OUTFLAG

JMI CHECK LDA TEMP

OUT OUTCHAR JMP @TYPE

TEMP: в Программа 10.3

I отпечатать симюл завершения-звездочку

; получить следующую строку ; указатель символьного буфер

; код ASCII для возврата каретки ; код ASCII для * буфера строки)

; подпрограмма печати символа из АК ; сохранение значений АК ; адрес возврата

; сохраиенле символа для печати

; проверка занятости печатающего устройства

; есля занято, проверить снова

; если нет, получить символ для печати

; распечатать его

; возврат по адресу, находящемуся в первой

ячейке подпрограммы 1 временное хранение

печатающего устройства по команде ВВОД (IN), необходимо сохранить содержимое АК.

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



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

В некоторых машинах флажки применяются настолько широко, что для их передачи к шине интерфейса добавляется несколько линий. В качестве примера можно привести ЭВМ NOVA, которая использует линии ЗАНЯТО и ВЫПОЛНЕНО: интерфейс находится в состоянии ЗАНЯТО, если он производит какие-то действия, начатые ЭВМ, и переходит в состояние ВЫПОЛНЕНО после того, как они будут закончены. Когда интерфейс обнаруживает свой адрес, он в зависимости от своего состояния возбуждает соответствующие линии (ЗАНЯТО - ВЫПОЛНЕНО). Программа организуется таким образом, что проверка флажков ЗАНЯТО или ВЫПОЛНЕНО производится с помощью одной команды и по результатам этой проверки выполняется соответствующий условный переход.

10.09. Прерывания

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

Для того чтоЬы в МС-16 обеспечить возможность прерывания, к шине необходимо добавить по крайней мере одну общую линию ПРВ прерывание), на которую любое устройство, запрашивающее прерывание, будет подавать НИЗКИЙ уровень. По причине, которая вскоре будет понятна, здесь используются еще две линии ППР и ОПР (представление прерывания и шрос прерывания). Рассмотрим типичную схему организации прерывания (рис. 10.5).

Когда внешнее устройство вырабатывает запрос на прерывание, триггер готовности данных интерфейса устанавливается в 1 . Он может йибо сообщать ЦП о наличии новой информации, как в предыдущем йримере с клавиатурой, либо сигнализировать о завершении задания,



как В случае печатающего устройства или графопостроителя. Независимо от причины, вызвавшей прерывание, периферийное устройство подает на линию ПРВ НИЗКИЙ уровень, который сообщает ЦП о том, что требуется выполнить какую-то операцию. Если прерывания разрешены (нормальное состояние), ЦП аппаратным путем вызывает переход программы к специальной ячейке памяти. В некоторых машинах

ПР8 ОПР

Остановка

ГОТОБНССТИ-

интерфеиса

ППР (вЬ1Х)

Bbi6 vcTP А (iw в

(вентили]

ВВОД(шииа)-

СННКР ПРЕРЫВ.


коа данного устройства (СМ вис 10 9)

Рис. 10 5 Схема приоритетных прерываний.

этот переход является векторным: он указывает в программе ячейку памяти, адрес которой определяется тем, какое устройство вызвало прерывание, тогда как в простейших машинах переход всегда производится к фиксированной ячейке. Машина МС-16 является простой. Она осуществляет переход к ячейке 1, а текущее значение программного счетчика (т е. адрес следующей команды, которая должна была выполняться при нормальном ходе программы) кладет в ячейку О, что позволяет возобновить выполнение прерванной задачи, после того как прерывание будет обслужено. Для того чтобы программа обслуживания не могла быть прервана до окончания ее выполнения, прерывания от других внешних устройств запрещаются.

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



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

10.10. Организация передачи данных путем прерывания программы

Метод 1: программный опрос (поллинг). Поскольку несколько внешних устройств могут одновременно запрашивать прерывание, машина должна иметь возможность определять, каким именно устройствам каждое прерывание вызвана. Это может быть сделано двумя способами. Простейшим методом является поллинг, который представляет собой процесс поочередного опроса внешних устройств, позволяющий установить наличие запроса на прерывание. Это осуществляется с помощью простой проверки регистра состояния каждого устройства системы После того как будет обнаружено устройство, бит состояния которого указывает на необходимость выполнения каких-либо операций, производится переход к соответствующей Подпрограмме обслуживания, как показано на примере программы 10.4.

Программный опрос выполняется с помощью двух команд IN STATx и JMI DEVx. Эти команды проверяют состояние триггера готовности каждого устройства, которое передается интерфейсом в виде флажка по линии знакового (15-го) разряда данных (см. схему прерывания на рис. 10.5). Важно отметить, что в этом примере во время выполнения подпрограммы обслуживания все остальные прерывания запрещаются, так как, если во время работы этой подпрограммы произойдет новое прерывание, адрес возврата будет потерян. Для toro чтобы иметь возможность прерывания текущей подпрограммы обслуживания новым запросом без потери адреса возврата, последний можно занести в стек. Отметим также, что при прерывании необходимо запоминать состояние машины (регистры, разряд переноса), так как прерывание может произойти в любом месте текущей программы и содержание регистров при этом не должно быть потеряно

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



JMP INTS

5 Программа обработки прерываний-опрос внешних устройств

; значение счетчика команд в момент прерывания (0-фиктивная величина)

; переход к программе обслуживания npqjbiBaHHfl

; Другие частя этс^ преграммы

INTS: STA ACSAVE SHL

STA CASAVE IN STATa

JMI DEVa

IN STATb JMI DEVb

- запомнить содержимое АК

; запомнить состояние разряда переноса ; проверить регистр состояния устройства А

; если флажок установлен, перейти к программе обработки

; проверить регистр состояния устройства В

; если флажок установлен, перейти к программе обработки

IN STATx JMI DEVx JMP ERROR

JMP RET

; проверить регистр состояния последнего устройства

; если флажок установлен, перейти к ирограмме обработки

; не установлен! прерывание залрашивает неизвестное устройство f

; начало подпрограммы обслуживания устройства а

подготовить возврат к прерванной задаче

; начало подпрограммы обслуживания устройства b

ACSAVE: CASAVE;

JMP RET JMP RET

LDA CASAVE SHR

LDA ACSAVE IE

JMP @0 0

J подготовить возврат к прерванйой задаче

J начало подпрограммы обслуживания последнего устройства

; получить запомненное знаЧ(е1ше разряда переноса

] циклический сдвиг в позицию переноса ; восстановить прежнее содержимое АК ; снова разрешить прерывания

% возврат по счетчику команд, содержимое котси pcffo хранится в ячейке &

; ячейки для временного хранения (Конец программы обработки прерываний)

Программа 10.4



1 ... 10 11 12 13 14 15 16 ... 59
© 2004-2024 AVTK.RU. Поддержка сайта: +7 495 7950139 в тональном режиме 271761
Копирование материалов разрешено при условии активной ссылки.
Яндекс.Метрика