Иллюстрированный самоучитель по Assembler

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

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

in AL,21h; Чтение регистра маски
or AL,1; Установка 1 в бите 0
out 21h,AL; Запись нового значения маски

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

in AL,21h; Чтение регистра маски
and AL, 0FEh; Установка 0 в бите 0
out 21h,AL; Запись нового значения маски

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

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

Приведем полный текст программы, которая читает содержимое ячейки с номером 0Dh. В ней хранится состояние батареи, питающей КМОП-микросхему. Если бит 7 этой ячейки установлен, батарея исправна; если этот бит сброшен, напряжение батареи упало ниже допустимого предела, и ее надо менять.

Пример 3.10. Чтение ячейки КМОП-микросхемы.

code segment
assume cs:code
main proc
mov AL,ODh; Будем читать ячейку 0Dh
out 70h,AL; Задание номера ячейки
in AL,71h; чтение из ячейки
test AL,80h; Проверка бита 7
jnz ok; Бит 7 = 1, перейти на OK
mov AH,02h; Бит 7=0, питания нет
mov DL,'-'; Выведем в знак этого
int 21h; Символ минус
jmp exit; Переход на завершение
ok: mov АН,02h; Батарея в порядке,
mov DL,'+'; выведем в знак этого
int 21h; символ плюс
;Завершим программу
exit: mov AX,4COOh
int 21h
main endp
code ends
end main

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

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

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

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.