Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Финогенов-основы_языка_ассемблера.doc
Скачиваний:
46
Добавлен:
17.09.2019
Размер:
3.35 Mб
Скачать

3.6. Программирование аппаратных средств

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

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

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

Команды и алгоритмы 149

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

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

Как уже отмечалось в гл. 1, связь с аппаратными средствами самого компьютера, а также с подключаемыми к нему устройствами осуществ­ляется главным образом через адресное пространство ввода-вывода. Это значит, что за каждым устройством закрепляется один или, чаще, не­сколько портов, и программирование устройства осуществляется исклю­чительно с помощью команд in и ou.t (а также ins и outs, если программи-)уемое устройство может посылать данные потоком).

В простейшем случае программирование устройства сводится к вы-толнению единственной команды in в случае чтения из устройства, или out в случае записи в него. Рассмотрим, например, процедуры маскирова­ния и размаскирования аппаратных прерываний. В каждом из двух кон­троллеров прерываний, включаемых в состав компьютера, имеется ре­гистр маски (рис. 3.11). Значение 0 в бите маски разрешает прохождение сигнала прерывания, значение 1 запрещает. Пройдя через маску и через последующие узлы контроллера прерываний (не показанные на рис. 3.11), сигнал прерываний поступает на вход INT микропроцессора. Программи­рование регистров маски осуществляется через порт 21h для ведущего контроллера и Alh для ведомого.

Исходное значение маски устанавливается программами начальной загрузки компьютера в зависимости от конфигурации вычислительной системы. Типичным является значение A8h, показанное на рис. 3.11. При этом значении маски размаскированными оказываются системный тай­мер, клавиатура, мышь, подключенная к первому последовательному порту

150

Глава з

Ah

Таймер. IRQO

Клавиатура. IRQ1

Выход ведомого. IRQ2

Последовательный порт COM2. IRQ3

Последовательны и портСОХП, IRQ4

Параллельный порт LPT2, IRQ5

Гибкий диск, IRQ6

Паралелльный порт LPT1, IRQ7

На вход IN Т процессора

Маска ведущего контроллера

прерываний, порт 21h

Рис. 3.11. Регистр маски ведущего контроллера прерываний.

СОМ1, гибкий диск, а также выход от ведомого контроллера, подключа­емый ко входу IRQ2 ведущего. Замаскированы оба парачлельного порта (принтер, подключаемый к порту LPT1, обычно не использует прерыва­ний, а второй параллельный порт часто просто отсутствует) и второй последовательный порт, к которому ничего не подключено. Другими сло­вами, размаскировано все нужное, и замаскировано все ненужное.

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

in AL,21h ;Чтсние регистра маски

or AL,1 ;Установка I в битс О

out 21h,AL ;3апись нового значения маски

Восстановление исходного состояния вычислительной системы с разре­шенными прерываниями от таймера осуществляется следующим образом:-

in AL,21h . ;Чтснис регистра маски , =

and AL,OFEh ;Установка 0 в битс О

out 21h,AL ;3апись нового значения ;маски

Другим примером использования режима свободного доступа к уст­ройству яштлстся программирование энергонезависимой КМОП-микро-схемы, включающей в себя часы реального времени, о которых уже гово­рилось в разделе 5 этой главы, а также информацию о конфигурации ком­пьютера и в некоторых случаях пароль. Общий объем КМОП-памяти составляет 64 байт (от ООп до 3Fli); доступ к байтам КМОП-памяти осу­ществляется через порты 70h и 71h,

В КМОП-микросхеме реализован способ обращения к ее отдельным ячейкам, широко используемой в микропроцессорной технике. Если про-

манды и алгоритмы

151

траммировать КМОП-память прямым образом, для обращения к ее 64 ячейкам в адресном пространстве ввода-вывода пришлось бы выделить 64 адреса. Для сокращения числа используемых адресов в состав микросхемы введены два служебных регистра — адресный и данных. В адресный регистр (порт 70h) заносится номер той ячейки КМОП-памяти, к которой требу­ется обращение. После этого чтение регистра данных (порт 71h) позволя­ет прочитать содержимое выбранной ячейки, а запись в регистр данных выполняет передачу данного в эту ячейку. Приведем полный текст про­граммы, которая читает содержимое ячейки с номером ODh. В ней хранит­ся состояние батареи, питающей КМОП-микросхему. Если бит 7 этой ячейки установлен, батарея исправна; если этот бит сброшен, напряже­ние батареи упало ниже допустимого предела, .и ее надо менять.

ячейки КМОП-микросхемы cs:code

;Будем читать ячейку ODh ;3адание номера ячейки ;чтение из ячейки ; Проверка бита 7 ;Бит 7=1, перейти на ОК ;Бит 7 = 0, питания нет ;Выведем в знак этого ;Символ минус ;Переход на завершение ;Батарея в порядке, ;выведем в знак этого ;символ плюс

;Пример 3-10. Чтение code segment

assume main proc

mov AL,ODh

out 70h,AL

in AL,71h

test AL,80h

jnz ok

mov AH,02h

mov DL,'-'

int 21 h

jmp exit ok: mov AH,02h

mov DL,*+*

int 2 Hi ;3авершим программу exit: mov AX,4COOh

hit 21h main endp code ends

end main

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

В компьютерах используется разновидность параллельного интерфейса под названием Centronics, отличающаяся относительно высокой скоростью передачи данных (до 150 Кбайт/с) и простотой программирования. Правда, Centronics позволяет передавать данные только в одном направлении — из компьютера в устройство, однако эту проблему- можно частично решить, сети воспользоваться для приема данных линиями состояния интерфейса.

152