Аппаратное обеспечение
персонального компьютера
© Александр Фролов, Григорий Фролов
Том 33, М.: Диалог-МИФИ, 1997, 304 стр.
7 Параллельный адаптер
Следующее очень распространенное периферийное устройстов, которое мы рассмотрим в нашей книге, это параллельный адаптер. Такой адаптер есть практически в любом компьютере и обычно применяется для подключения принтера. Только в некоторых моделях блокнотных компьютеров, где принтер подключается через асинхронный последовательный адаптер, отсутствует параллельный адаптер.
Базовая система ввода/вывода BIOS может работать с тремя параллельными адапетрами. В процессе тестирования и инициализации системы BIOS находит работоспособные адаптеры и записывает их базовые адреса в таблицу. Таблица базовых адресов располагается в области данных BIOS по адресу 0000:0408h и может содержать следующие значения:
· 378h – параллельный адаптер LPT1;
· 278h – параллельный адаптер LPT2;
· 3BCh – параллельный адаптер на плате адаптера монохромного дисплея (сейчас это уже редкость).
Параллельные адаптеры могут вырабатывать запросы на прерывание:
· LPT1 - IRQ7, INT 0Fh;
· LPT2 - IRQ5, INT 0Dh
Порты параллельного адаптера
Каждый параллельный адаптер обслуживается несколькими портами ввода/вывода.
Обычно программа редко работает с параллельным адапетром на уровне портов ввода/вывода, так как достаточно использовать предназначенные для этого функции BIOS или MS-DOS. Однако сведения о портах может пригодиться вам для разработки собственного драйвера принтера или программы, обслуживающей какое-либо устройство, подлкюченное к параллельному адапетру, например, аналого-цифрового преобразователь.
Порт 378h
Этот порт, доступный как для записи, так и для чтения, предназначен для вывода данных. Программа может прочитать байт, только что записанный в порт 378h.
Порт 37Ah
Порт обычно применяется для управления принтером, подключенным к параллельному адаптеру. Он доступен для чтения и записи. Ниже мы привели описание отдельных разрядов этого порта:
Поле |
Описание |
0 |
STROBE Cтроб данных, принимает значение 1 при выводе байта, подключен к 1 контакту разъема параллельного адаптера |
1 |
AUTO LineFeed Автоматический перевод строки после символа возврата каретки CR, контакт 14 |
2 |
INIT Сброс принтера, активный уровень - 0, контакт 16 |
3 |
SLCT IN Выбор принтера для работы, контакт 17 |
4 |
IRQ Enable Разрешение прерывания от принтера. Если прерывания от принтера разрешены, они вырабатываются когда сигнал готовности принтера ACK (контакт 10) принимает уровень логического 0 |
5-7 |
Равно 0 |
Порт 379h
Порт состояния принтера, доступен только для чтения:
Поле |
Описание |
0-2 |
Равно 0 |
3 |
ERROR Сигнал ошибки, активный уровень - 0, контакт 15 |
4 |
SLCT Принтер выбран, контакт 13 |
5 |
PE Конец бумаги, контакт 12 |
6 |
ACK Готовность принтера, активный уровень - 0, контакт 10 |
7 |
BUSY 0 - принтер занят, находится в состоянии offline или произошла ошибка, контакт 11 |
Разъем параллельного адаптера
Для тех, кто будет использовать параллельный адаптер для подключения аппаратуры, приведем таблицу назначения контактов разъемов этого адаптера , а также соответствующих контактов разъема принтера:
Контакт разъема адаптера |
Контакт разъема принтера |
Назначение |
Вход или выход |
1 |
1 |
STROBE Строб |
Выход, инверсия |
2 |
2 |
Данные, бит 0 |
Выход |
3 |
3 |
Данные, бит 1 |
Выход |
4 |
4 |
Данные, бит 2 |
Выход |
5 |
5 |
Данные, бит 3 |
Выход |
6 |
6 |
Данные, бит 4 |
Выход |
7 |
7 |
Данные, бит 5 |
Выход |
8 |
8 |
Данные, бит 6 |
Выход |
9 |
9 |
Данные, бит 7 |
Выход |
10 |
10 |
ACK Подтверждение |
Вход, инверсия |
11 |
11 |
BUSY Занятость |
Вход |
12 |
12 |
PE Конец бумаги |
Вход |
13 |
13 |
SLCT Выбор |
Вход |
14 |
14 |
Auto Line Feed Авт. перевод строки |
Выход, инверсия |
15 |
32 |
ERROR Ошибка |
Вход, инверсия |
16 |
31 |
INIT Сброс принтера |
Выход, инверсия |
17 |
36 |
SLCT IN Принтер выбран |
Выход, инверсия |
18-25 |
16,17, 19-30,33 |
Земля |
- |
Для сигналов, отмеченных в таблице словом "инверсия", используется уровень логического нуля в активном состоянии сигнала.
Используя параллельный адаптер для управления внешними устройствами, будьте осторожны и выполняйте все правила заземления устройств. Если ваш устройство не заземлено или заземлено неправильно, параллельный адаптер может выйти из строя (и когда-нибудь он обязательно сделает это).
Следует также учитывать, что нагрузка на выходную линию параллельного адаптера не должна превышать одного входа TTL (то есть к одному выходу адаптера вы можете подключить не более одного входа микросхемы серии 155).
Вывод байта на принтер через параллельный адаптер
Для того, чтобы вывести символ на принтер, программа вначале должна убедится, что уровень сигнала на линии BUSY (бит 7 порта 379h) равен 0, а уровень сигнала на линии ACK (бит 6 порта 379h) - единице. После этого следует установить код выходного символа на линиях DATA (порт 378h).
Затем не ранее, чем через 0,5 мкс линию STROBE (бит 0 порта 37Ah) необходимо перевести в состояние логического 0. При этом выходной символ запишется во внутренний буфер принтера. Уровень логического нуля необходимо удерживать в течение как минимум 0,5 мкс. Это время нужно для того, чтобы символ записался в буфер принтера. После истечения интервала времени линию STROBE нужно опять перевести в состояние логической единицы.
После того, как программа установит линию STROBE в состояние логического нуля, выходная линия принтера BUSY устаналвивается в единицу, сигнализируя о том, что принтер занять обработкой полученного символа и временно не может принимать другие символы.
Когда принтер полность обработает выведенный символ, линия ACK перейдет в состояние 0. Приблизительно через 5 мкс после этого линия BUSY также перейдет в состояние 0.
Еще через 5 мкс линия ACK примет состояние 1. Теперь принтер готов принят следующий байт данных.
|