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

Характеристика физического и электрического интерфейса. Изучение регистра данных, состояния и управления. Исследование программ для передачи строки данных на низком уровне. Анализ программируемого периферийного адаптера. Основные особенности микросхемы.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 18.09.2018
Размер файла 775,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Содержание

Введение

1. Коммуникационная часть

1.1 Параллельный интерфейс

1.2 Интерфейс Centronics

1.3 Стандартный параллельный порт ПК

1.4 Стандарт IEEE 1284 -1994

1.5 Физический и электрический интерфейс

1.6 Работа с SPP портом на низком уровне

1.7 Работа с SPP портом через INT 17h

1.8 Реализации двунаправленного обмена данными

1.9 Неисправности и тестирование параллельных портов

2. Аппаратная часть

2.1 Программируемый периферийный адаптер 8255A

2.2 Основные особенности микросхемы:

2.3 Микроконтроллер

3. Интерфейс управления

4. Охрана труда

4.1 Анализ опасных и вредных производственных факторов

4.2 Защитные меры

4.3 Производственное освещение

4.4 Электромагнитные излучения

4.5 Организация места работы оператора

4.6 Электробезопасность

4.7 Пожаровзрывозащита

5. Экономическая часть

5.1 Определение затрат на провидение НИР

Заключение

Список литературы

Аннотация

Приложение

Введение

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

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

Автоматизация, это очень удобный и эффективный процесс в разных отраслях деятельности человека. Данные разработки производятся давно, но каждый раз мы хотим добиться наилучшего результата. Моя разработка применима не только для снятий и обработки замеров но и так же можно ее применять для автоматизации практически любого производственного процесса. Так как устройство разработанное мною основывается на микроконтроллере широкого применения. Приведу несколько характеристик.1) возможность перепрограммирования. 2) работа с любыми видами портов для передачи данных. 3) выполнения задач от простого будильника до выполнения высоко технологичных процессов.

1. Коммуникационная часть

1.1 Параллельный интерфейс

Коммуникационные порты компьютеров (LPT) широко используются для управления различными периферийными устройствами, такими как принтеры, сканеры, плоттеры, а так же для связи с промышленными объектами в системах автоматизации управления. Через последовательный порт так же осуществляется связь с удаленными объектами через модем, включая и выход в глобальную сеть Internet. Исторически параллельный интерфейс был введен в персональный компьютер (ПК) для подключения принтера (отсюда и аббревиатура LPT - Line printer - построчный принтер). Однако впоследствии параллельный интерфейс стал использоваться для подключения других периферийных устройств - сканеров, дисководов типа Zip и ряда других устройств. Базовая разновидность порта позволяет передавать данные только в одном направлении (от ПК к ПУ), однако позднее был разработан ряд стандартов двунаправленной передачи данных.

Адаптер параллельного интерфейса представляет собой набор регистров, расположенных в адресном пространстве устройств ввода/вывода. Количество регистров зависит от типа порта, однако три из них стандартны и присутствуют всегда - регистр данных, регистр состояния и регистр управления. Адреса регистров отсчитываются от базового, стандартные значения которого 3BCh, 378h, 278h. Порт может использовать аппаратное прерывание (IRQ7 или IRQ9). Многие современные системы позволяют изменять режим работы порта, его адрес и IRQ из настроек BIOS Setup. Например, в AWARD BIOS имеется раздел Integrated Peripherals, позволяющий настраивать режим, адрес и IRQ порта. LPT порт имеет внешнюю 8-битную шину данных, 5-битную шину сигналов состояния и 4-х битную шину управляющих сигналов. Очевидно, что порт резко асимметричен - 12 линий работают на вывод и только 5 на ввод. При начальной загрузке BIOS пытается обнаружить параллельный порт, причем делает это примитивным и не всегда корректным образом - по возможным базовым адресам портов передается тестовый байт, состоящий из чередующегося набора нулей и единиц (55h или AAh), затем производится чтение по тому же адресу, и если прочитанный байт совпал с записанным, то считается, что по данному адресу найден LPT порт. Определить адрес порта LPT4 BIOS не может. Для работы с ПУ в BIOS предусмотрено прерывание INT 17h, предоставляющее возможность передавать данные (побайтно), инициализировать ПУ и получать информацию о его состоянии.

1.2 Интерфейс Centronics

Понятие Centronics относится к набору сигналов, протоколу обмена и разъему, устанавливаемому в принтерах. Большинство современных принтеров совместимы с интерфейсом Centronics. Назначение сигналов и контакты разъема ПУ, на который они выведены приведены в таблице 1.1

Таблица 1.1. - Сигналы интерфейса Centronics.

Сигнал

Т

Конт.

Напр.

Назначение

Strobe

0

1

i

Строб данных. Передается ЭВМ, данные фиксируются по низкому уровню сигнала.

D0 ... D7

1

2-9

i

Линии данных. D0 - младший бит.

Ack

0

10

o

Acknowledge - импульс подтверждения приема байта (запрос на прием следующего). Может использоваться для формирования прерывания.

Busy

1

11

o

Занят. Прием данных возможен только при низком уровне сигнала

PE

1

12

o

"1" сигнализирует о конце бумаги

Select

1

13

o

"1" сигнализирует о включении принтера (ГП - готовность приемника), обычно +5 В через резистор от источника питания ПУ)

Auto LF

0

14

i

Автоматический перевод строки. Если "0", то ПУ при получении символа CR (перевод каретки) выполняет функцию LF - перевод строки

Error

0

32

o

Ошибка ПУ (off-line, нет бумаги, нет тонера, внутренняя ошибка)

Init

0

31

i

Инициализация (переход к началу строки, сброс всех параметров на значения по умолчанию)

Slct In

0

36

i

Выбор принтера. При "1" принтер не воспринимает остальные сигналы интерфейса

GND

19-30,

33

-

Общий провод

Примечание: столбец "T" - активный уровень сигнала: "1" - высокий активный уровень, "0" - низкий активный уровень. Столбец "Напр." - направление передачи по отношению к принтеру: I - вход, 0 - выход.

Сигнал Auto LF практически не применяется, но его неправильное значение приводит к тому, что принтер либо делает пропуски строк, либо печатает строки поверх друг друга, либо дублирует строки при печати в два прохода.

Контроль и модификация сигналов интерфейса Centronics может производиться при помощи программы LPT-MON, описанной ниже.

Рисунок 1.1- Протокол обмена по интерфейсу Centronics

Передача начинается с проверки источником сигнала "Error". Если он установлен, то обмен не производится. Затем проверяется состояние сигнала "Busy". Если он равен "0", то источник приступает к передаче байта данных. Для передачи байта источник выставляет на линии D0-D7 байт данных и выдает сигнал Strobe. Приемник по сигналу Strobe# (здесь и далее по тексту значок "#" после названия сигнала является признаком того, что сигнал имеет низкий активный уровень) читает данные с шины данных и выставляет сигнал Busy на время его обработки. По окончании обработки приемник выдает сигнал ACK# и снимает сигнал Busy. Если в течение длительного времени (6 - 12 сек) источник не получает ACK#, то он принимает решение о ошибке "тайм-аут" (time-out) устройства. Если после приема байта приемник по какой - либо причине не готов принимать данные, то он не снимает сигнал Busy. При программной реализации обмена по указанному протоколу желательно ограничить время ожидания снятия Busy (обычно 30 - 45 сек), иначе возможно зависание программы.

1.3 Стандартный параллельный порт ПК

Стандартный параллельный порт называется SPP (Standard Parallel Port - Стандартный Параллельный Порт). SPP порт является однонаправленным, на его базе программно реализуется протокол обмена Centronics. Порт обеспечивает возможность генерации IRQ по импульсу ACK# на входе. Сигналы порта выводятся на стандартный разъем DB-25S (розетка), который размещен непосредственно на плате адаптера или соединяется с ним плоским шлейфом (в случае, если адаптер интегрирован с материнской платой). Названия сигналов соответствуют названиям сигналов интерфейса Centronics (таблица 1.2).

В таблице 1.2 I/O - направление передачи: I - вход; O - выход; O(I) - выход, состояние которого может быть считано при определенных условиях, O/I - выходные линии, состояние которых читается при чтении из соответствующих регистров порта.

Таблица 1.2. - Разъем и шлейф стандартного LPT порта

Контакт

DB-25S

Провод

шлейфа

I/O

Сигнал

Контакт

DB-25S

Провод

шлейфа

I/O

Сигнал

1

1

O/I

Strobe#

10

19

I*

ACK#

2

3

O(I)

D0

11

21

I

Busy

3

5

O(I)

D1

12

23

I

PE

4

7

O(I)

D2

13

25

I

Select

5

9

O(I)

D3

14

2

O/I

Auto LF#

6

11

O(I)

D4

15

4

I

Error#

7

13

O(I)

D5

16

6

O/I

Init#

8

15

O(I)

D6

17

8

O/I

Select In#

9

17

O(I)

D7

18 - 25

10,22,14,

16,18,20,22,24,26

-

GND

* - Вход ACK# соединен с питанием +5 В через резистор 10 кОм. Это сделано для исключения ложных прерываний, т.к. прерывание генерируется по отрицательному перепаду сигнала на входе ACK#.

В качестве недостатков стандартного LPT порта (SPP) следует отметить невысокую скорость передачи данных (100 - 150 КБ/сек), загрузку процессора при передаче данных, невозможность двунаправленного побайтного обмена. Существует "радиолюбительская" методика двунаправленного обмена, которая состоит в том, что для ввода данных на линии D0-D7 выставляют "1", а в качестве передатчика используют микросхемы с открытым коллектором, которые при открытом транзисторе могут "подсаживать" напряжение логической единицы до уровня порядка 1.5 - 1.7 В. Ток ограничен на уровне 30 мА. Как очевидно из уровней сигналов, они не соответствуют уровням ТТЛ, поэтому многие порты не работают в таком режиме или работают нестабильно. Кроме того, такой способ может быть опасен для адаптера порта, который будет работать с предельными для него токами.

1.4 Стандарт IEEE 1284 -1994

Стандарт на параллельный интерфейс IEEE 1284, принятый в 1994 году, определяет термины SPP, ЕРР и ЕСР. Стандарт определяет 5 режимов обмена данными, метод согласования режима, физический и электрический интерфейсы. Согласно IEEE 1284, возможны следующие режимы обмена данными через параллельный порт:

Compatibility Mode - однонаправленный (вывод) по протоколу Centronics. Этот режим соответствует стандартному (традиционному) порту SPP

Nibble Mode - ввод байта в два цикла (по 4 бита), используя для ввода линии состояния. Этот режим обмена может использоваться на любых адаптерах.

Byte Mode - ввод байта целиком, используя для приема линии данных. Этот режим работает только на портах, допускающих чтение выходных данных (Bi -Directional или PS/2 Type 1).

ЕРР- (Enhanced Parallel Port) Mode - двунаправленный обмен данными, при котором управляющие сигналы интерфейса генерируются аппаратно во время цикла обращения к порту (чтения или записи в порт). Эффективен при работе с устройствами внешней памяти, адаптерами локальных сетей.

ЕСР - (Extended Capability Port) Mode - двунаправленный обмен с возможностью аппаратного сжатия данных по методу RLE (Run Length Encoding), использования FIFO-буферов и DMA. Управляющие сигналы интерфейса генерируются аппаратно. Эффективен для принтеров и сканеров.

В современных АТ - машинах с LPT-портом на системной плате режим порта - SPP, ЕРР, ЕСР или их комбинация задается в BIOS Setup. Режим Compatibility Mode полностью соответствует SPP и часто установлен по умолчанию. Все остальные режимы расширяют функциональные возможности интерфейса и повышают его производительность..

1.5 Физический и электрический интерфейс

Стандарт IEEE 1284 определяет физические характеристики приемников и передатчиков сигналов. IEEE 1284 предусматривает два уровня интерфейсной совместимости: первый уровень - для устройств, не требующих высоких скоростей обмена, но использующих возможность смены направления передачи данных; уровень два - устройства, работающие в расширенных режимах, с высокими скоростями и длинными кабелями.

Требования к передатчикам приведены в таблице 1.3, для приемников - в таблице 1.4.

Таблица 1.3. - Требования стандарта IEEE 1284 к передатчикам

Требование

Значение

Диапазон уровней сигналов без нагрузки

-0.5...+5.5 В

Уровень "1" при токе нагрузки 14 мА, не менее

+2.4 В

Уровень "0" при токе нагрузки 14 мА, не более

+0.4 В

Выходной импеданс, измеренный на разъеме

50+ 5 Ом

Скорость нарастания/спада импульса (должен находиться в указанных пределах)

0.05 ... 0.4

В/нс

Таблица 1.4 - Требования стандарта IEEE 1284 к приемникам

Требование

Значение

Допустимые пиковые значения сигналов, выдерживаемые без разрушения и ошибок в работе, В

-2.0 ... +7.0

Порог срабатывания "1", не выше, В

2.0

Порог срабатывания "0", не ниже, В

0.8

Гистерезис приемника (триггер Шмитта) (пределы), В

0.2 - 1.2

Входной ток (втекающий и вытекающий), не более, мкА

20

Входная емкость, не более, пФ

50

Примечание: Входные линии соединяются с шиной питания резистором 1.2 кОм.

Стандарт IEEE 1284 определяет три типа используемых разъемов: А (DB-25), B (Centronics-36), C (новый малогабаритный 36-контактный разъем).

Интерфейсные кабели могут иметь от 18 до 25 проводников (в зависимости от числа проводников GND). Не предъявляется жестких требований к экранировке и прочим параметрам, однако, такие кабели могут работать только на низких скоростях при длине не более 2 метров. Стандарт IEEE 1284 для кабелей:

Все сигнальные проводники должны быть перевиты с отдельными обратными (общими) проводами.

Каждая пара должна иметь импеданс 62+ 6 Ом в диапазоне частот 4-16 МГц.

Уровень перекрестных помех не должен превышать 10%

Кабель должен иметь экран, покрывающий не менее 85 процентов внешней поверхности. На концах кабеля экран должен быть окольцован и соединен с контактом разъема.

Кабели, удовлетворяющие этим требованиям, маркируются как "IEEE Std 1284 - 1994 Compliant". Они могут иметь длину до 10 метров.

1.6 Работа с SPP портом на низком уровне

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

Контроллер порта расположен в адресном пространстве устройств ввода-вывода и обращение к нему производится посредством команд IN и OUT ассемблера. Информацию о портах LPT1 - LPT3 можно получить, прочитав переменные BIOS, приведенные в табл. 1.5.

Таблица 1.5. - Переменные BIOS для LPT портов

Имя порта

Адрес в BIOS

Тип переменной

Описание

LPT1

0040:0008h

Word

Базовый адрес порта LPT1. Если переменная равна 0, то порт LPT1 не найден

0040:0078h

Byte

Константа, задающая тайм-аут

LPT2

0040:000Ah

Word

Базовый адрес порта LPT2. Если переменная равна 0, то порт LPT2 не найден

0040:0079h

Byte

Константа, задающая тайм-аут

LPT3

0040:000Ch

Word

Базовый адрес порта LPT3. Если переменная равна 0, то порт LPT3 не найден

0040:007Ah

Byte

Константа, задающая тайм-аут

LPT4

0040:000Eh

Word

Базовый адрес порта LPT4. Если переменная равна 0, то порт LPT4 не найден

0040:007Bh

Byte

Константа, задающая тайм-аут

Примечание: BIOS ищет порты по адресам 3BCh, 378h, 278h. Порт LPT4 BIOS найти не может.

Пример определения базового адреса (TASM):

push dx

mov ax, 40h

mov es, ax ; в es - сегмент = 0040h

mov dx, es:[08] ; dx = базовый адрес порта LPT1

mov lpt1_adr, dx ; запомнили адрес порта LPT1 в переменной lpt1_adr

pop dx

Переменная lpt1_adr имеет тип word и должна быть определена в сегменте данных.

Стандартный порт имеет три 8-битных регистра, расположенных по соседним адресам, начиная с базового (Base) адреса - табл. 1.6.

Таблица 1.6. - Регистры стандартного LPT порта

Адрес

Название

W-R

Base+0

Data Register - регистр данных (DR)

W/R

Base+1

Status register - регистр состояния (SR)

R

Base+2

Control Register - регистр управления (CR)

W/R

Регистр данных

Записанные в этот регистр данные выводятся на выходные линии интерфейса D0-D7. Результат чтения этого регистра зависит от схемотехники адаптера и соответствуют либо записанным ранее данным, либо сигналам на линиях D0-D7, что не всегда одно и тоже (на этом принципе и базируется "радиолюбительский" метод двунаправленного обмена, основанный на "подсаживании уровней "1" на выходе порта до уровня "0"). При стандартном включении справедлив первый вариант - читаемые данные равны ранее записанным.

Регистр состояния

Представляет собой 5-ти битный порт ввода, на который заведены сигналы от внешнего устройства. Допускает только чтение. Назначение битов регистра состояния приведены в таблице 1.7.

Таблица 1.7. - Биты регистра состояния

Бит

Вес

Название

Назначение

7

128

BUSY

Инверсное отображение состояния линии Busy (11). При низком уровне на линии 11 (Busy) - бит равен "1" - ПУ готово к приему очередного байта

6

64

ACK

Отображение состояния линии ACK# (10).

"0"-подтверждение приема, "1"-обычное состояние

5

32

PE

Отображение состояния линии Paper End (12).

"0" - норма, "1" - в ПУ нет бумаги

4

16

SLCT OUT

Отображение состояния линии Select (13).

"0" - ПУ не выбрано, "1" - ПУ выбрано

3

8

Error инв.

Отображение состояния линии Error (15).

"0" - ошибка ПУ, "1" - обычное состояние

2

4

PIRQ

Флаг прерывания по ACK# (только PS/2). Обнуляется, если ACK# вызвал аппаратное прерывание. "1" - после сброса или после чтения регистра состояния

1-0

4-1

--

Не используются (резерв)

Регистр управления

Регистр управления представляет собой 4-х битный порт вывода, допускающий чтение и запись. Биты 0,1,3 инвертируются, т.е. "1" в данных битах регистра управления соответствует "0" на соответствующих линиях порта. Назначение бит регистра управления приведены в таблице 1.8. Бит 5 используется только портами PS/2.

Таблица 1.8. - Биты регистра управления

Бит

Вес

Название

Назначение

7

128

-

Резерв

6

64

-

Резерв

5

32

Direction

Бит управления направлением порта PS/2.

"1" - режим ввода, "0" - режим вывода

4

16

AckIntEn

Бит управления генерацией прерывания по ACK#

"1" - разрешить прерывание по спаду ACK# (10)

3

8

SLCT IN

Управление линией SLCT IN# (17).

"1" - работа принтера разрешена.

2

4

INIT

Управление линией INIT# (16).

"1" - обычное состояние, "0" - аппаратный сброс ПУ

1

2

Auto LF

Управление линией Auto LF# (14).

"1" - включить режим "Auto LF", "0" - обычное сост.

0

1

Strobe

Управление линией Strobe# (1).

"1" - стробирование данных, "0" - обычное сост.

Пример программы для передачи строки данных на низком уровне.

Пример разработан на TASM.

DATA Segment byte public 'DATA' ; Описываем сегмент

; данных

String DB 'Test printer !!!',0Dh, 0Ah,0 ; выводимая строка

Lpt1_adr DW 0 ; Переменная для хранения базового адреса LPT1

DATA ENDS ; конец сегмента данных

; Сегмент кода - в нем расположим саму программу

CODE Segment byte public 'CODE'

ASSUME CS:CODE,DS:DATA,ES:DATA

START: ; Начало программы

mov ax, data ; установим ds на сегмент данных

mov ds, ax

push dx

mov ax, 40h

mov es, ax ; в es - сегмент = 0040h

mov dx, es:[08] ; dx = базовый адрес порта lpt1

mov lpt1_adr, dx ; запомнили адрес порта lpt1 в переменной lpt1_adr

pop dx

LOOP1: ; цикл печати строки

mov ah, ds:[bx] ; прочитали очередной символ строки

cmp ah, 0h ; это конец строки ?

je exit ; да, выход

call out_byte ; нет, печатаем его

inc bx ; на следующий символ

jmp loop1 ; повторяем, пока не достигли конца строки

EXIT: ; завершение программы

mov ax,4C00h ; завершить с кодом возврата 0

int 21h

;**** процедуры и функции программы ****

OUT_BYTE: ; процедура вывода символа из ah на принтер с ожиданием

push dx

LOOP2:

mov dx, lpt1_adr

inc dx ; адрес регистра состояния (lpt1_adr+1)

in al, dx ; Читаем регистр состояния

test al, 80h ; Проверим сигнал BUSY (<1> - принтер готов)

jz loop2 ; если нет, то повторим опрос

dec dx ; адрес регистра данных (lpt1_adr)

mov al, ah ; Загрузка передаваемого байта в AL

out dx, al ; Запись байта в регистр данных

inc dx

inc dx ; адрес регистра управления (lpt1_adr+2)

in al, dx ; Читаем регистр управления

; Формируем строб

and al, 11111110b ; Бит 0 (Strobe):=0

out dx, al ; Запись в регистр управления

or al, 00000001b ; Бит 0 (Strobe):=1

out dx, al ; Запись в регистр управления

and al, 11111110b ; Бит 0 (Strobe):=0

out dx, al ; Запись в регистр управления

pop dx

ret ; выход в основную программу

code ends

end start

Коротко о работе программы. В начале программы описан сегмент данных, содержащий выводимую ASCIIZ строку (строку, завершающуюся нулем) и переменную типа Lpt1_adr типа Word для хранения базового адреса порта Lpt1.

В начале программы она определяет базовый адрес Lpt1 и сохраняет его в переменной Lpt1_adr. Затем идет цикл побайтного вывода строки, критерий завершения - текущий символ равен 0. Вывод символа производится процедурой OUT_BYTE (передаваемый символ должен находиться в AL на момент вызова процедуры).

При запуске OUT_BYTE читает регистр состояния порта и проверяет 7-й бит (BYSY). Если он равен 0 (принтер занят), то повторяем опрос регистра состояния до достижения готовности принтера (цикл LOOP2). Затем в регистр данных записывается код передаваемого символа, после чего формируется импульс Strobe.

Данный пример несколько некорректен - цикл ожидания готовности принтера может продолжаться бесконечно, если по какой либо причине он держит на линии сигнал BUSY. Для устранения повисания в цикле LOOP2 необходимо сделать привязку к таймеру для проверки времени ожидания и, в случае ожидания более чем 15 - 20 сек, выдать сообщение о том, что принтер не готов к работе. Кроме того, после определения базового адреса необходимо проверить, не равен ли он 0 (признак отсутствия LPT порта).

1.7 Работа с SPP портом через INT 17h

Как очевидно из рассмотренного в п.п. 1.5.4 примера работы с портом на низком уровне, написание программы сложно и невозможно перехватить вывод информации в порт. Это означает, что невозможно разработать программу - драйвер для перекодировки символов, передаваемых в порт или для реализации нестандартного протокола обмена. Качественно иной подход - использование программного прерывания BIOS INT 17h. Параметры вызова функций INT 17h приведены в таблице 1.9.

Таблица 1.9. - Функции INT 17h

Функция

Регистры при вызове

Регистры при возврате

Вывод символа по протоколу Centronics

ah = 00h

al = выводимый символ

dx = номер принтера (0 - 3)

AH - слово состояния

Инициализация принтера

ah = 01h

dx = номер принтера (0 - 3)

AH - слово состояния

Принтер - получить состояние

ah = 01h

dx = номер принтера (0 - 3)

AH - слово состояния

Слово состояния принтера: слово состояния принтера содержит биты 1..7 регистра состояния указанного порта (см. п.п. 1.5.2), а бит 0 является флагом тайм-аута. Если он установлен, то ПУ не снимает сигнал BUSY в течении времени, заданного в соответствующей переменной BIOS.

Пример программы для передачи строки через INT 17h

В качестве примера рассмотрим ту же программу, что и в примере по прямой работе с LPT портом.

; Описываем сегмент данных, в котором расположим все данные программы

DATA Segment byte public 'DATA'

String DB 'Тест принтера !!!',0 ; выводимая строка

Error DB 'Ошибка: принтер не готов !!!!$' ; сообщение об

; ошибке

DATA ENDS ; конец сегмента данных

; Сегмент кода - в нем расположим саму программу

CODE Segment byte public 'CODE'

; Зададим соответствие регистров для использования по умолчанию

ASSUME CS:CODE, DS:DATA, ES:DATA

START: ; Начало программы

mov ax, data ; установим ds на сегмент данных

mov ds, ax

mov dx, 0 ; принтер на lpt1

mov ah, 2 ; функция int 17 "получить состояние принтера"

int 17h ; проверим состояние принтера

test ah,80h ; принтер готов ?

jz err_exit ; если нет, то выход с сообщением о ошибке

mov bx, offset string ; смещение на выводимую строку

LOOP1: ; Цикл печати строки

mov al, ds:[bx] ; прочитали очередной символ строки

cmp al, 0h ; это конец строки ??

je exit ; да, выходим

call out_byte ; нет, печатаем его

inc bx ; на следующий символ

jmp loop1 ; повторим

ERR_EXIT: ; Выход по ошибке

mov dx, offset error ; вывод строки на экран

mov ah, 9

int 21h

mov ax, 4c00h ; завершить с кодом возврата 1

int 21h

EXIT: ; Нормальное завершение

mov al, 0ah ; дадим перевод каретки

call out_byte

mov ax,4c00h ; завершить с кодом возврата 0

int 21h

; **** Процедуры и функции программы ****

OUT_Byte: ; Процедура вывода символа из AL на принтер с

; ожиданием

push ax ; процедура должна быть рентабельна

push dx

LOOP2:

mov dx, 0

mov ah, 2

int 17h ; проверим состояние принтера

test ah,80h ; готов ?

jz loop2 ; если нет, то повторим опрос

mov ah, 0

int 17h ; выводим символ

pop dx

pop ax

ret ; выход в основную программу

CODE ENDS ; Завершение кодового сегмента

END START ; Конец программы

1.8 Реализации двунаправленного обмена данными

Проблема двунаправленного обмена возникла при появлении устройств типа накопителя ZIP, которые удобно подключать к LPT порту. Существует несколько стандартных решений, одобренных IEEE 1284. Рассмотрим два наиболее простых. В описании двунаправленного обмена применяются следующие термины:

Хост (Host) - ПК с LPT портом

Прямой канал (передача в прямом направлении) - канал (передача) от хоста к ПУ; обратный канал - канал ввода данных в Хост от ПУ

1.2 Полубайтный обмен - Nibble Mode.

Режим полубайтного обмена (Nibble Mode) наиболее универсален и может использоваться на любом стандартном (SPP) порту. SPP порт имеет 5 линий ввода, используемых для ввода сигналов состояния ПУ. Их можно использовать для ввода данных за два прима по 4 бита (Nibble - полубайт). Назначение и название сигналов, используемых в Nibble Mode приведены в таблице 1.10

Таблица 1.10. - Сигналы, используемые при вводе в Nibble Mode

Конт.

Сигнал

SPP

Сигнал

NM

I/O

Назначение

14

Auto Feed#

HostBusy

O

Сигнал квитирования.

"0" - готовность к приему тетрады

"1"-подтверждение приема тетрады

17

SLCT IN#

-

O

"1" - признак обмена по IEEE 1284

"0" - обмен по SPP

10

ACK#

PtrClk

I

"0" - действительность тетрады

"1" - ответ на HostBusy

11

BUSY

-

I

Прием битов 3, 7

12

PE

-

I

Прием битов 2, 6

13

SELECT

-

I

Прием битов 1, 5

15

ERROR#

-

I

Прием битов 0, 4

Прием в режиме Nibble Mode производится следующим образом: ПК сигнализирует о готовности к приему низким уровнем HostBusy. ПУ в ответ выставляет на линии младшую тетраду данных и сигнализирует о ее действительности низким уровнем PtrClk. ПК в ответ устанавливает высокий уровень HostBusy, сигнализируя о занятости приемом и обработкой. ПУ отвечает на это высоким уровнем PtrClk. Затем все перечисленные действия повторяются для старшей тетрады данных. Nibble Mode универсален и гарантированно работает на любом порте любого типа (SPP, EPP, ECP), поэтому применяется в устройствах типа накопителя ZIP как режим по умолчанию. Однако, прием данных в Nibble Mode сильно загружает процессор, максимальная скорость обмена, как правило, не превышает 50 - 60 кбайт/с. Обмен с ПУ получается aсимметричным - скорость приема будет в два раза меньше скорости передачи.

Режим EPP.

Протокол EPP (улучшенный параллельный порт) был разработан задолго до принятия IEEE 1284 и предназначен для повышения производительности обмена данными по параллельному порту.

Протокол EPP обеспечивает 4 типа циклов обмена:

a) Цикл записи данных

б) Цикл чтения данных

в) Цикл записи адреса

г) Цикл чтения адреса

Циклы чтения/записи адреса и данных отличаются протоколами (используют разные стробирующие сигналы). Внешние сигналы EPP порта формируются аппаратно в течении одного процессорного цикла ввода/вывода, что позволяет достичь скоростей 0.5 - 2 Мбайт/с . Назначение сигналов LPT порта в EPP режиме

Таблица 1.11. - Сигналы, используемые в режиме EPP

Конт.

Сигнал

SPP

Сигнал

EPP

I/O

Назначение

1

Strobe#

WRITE#

O

"0" - признак цикла записи,

"1" - признак цикла чтения

14

Auto Feed#

DATASTB#

O

Строб данных.

17

SLCT IN#

ADDRSTB#

O

Адреса данных.

16

INIT#

RESET#

O

Сброс ПУ (по "0")

10

ACK#

INTR#

I

Прерывание от ПУ

11

BUSY

WAIT#

I

Сигнал квитирования.

"0" - разрешает начало цикла

"1" - разрешает завершение цикла

12

PE

ACKDATAREQ

I

Используется по усмотрению разработчика

13

SELECT

XFLAG

I

---//---

15

ERROR#

DATAAVAIL#

I

---//---

По сравнению с SPP, EPP порт имеет расширенный набор регистров - табл. 1.12

Таблица 1.12. - Регистры порта EPP

Имя регистра

Смещение

Режим

R/W

Описание

SPP Data Port

Base+0

SPP/EPP

W

Регистр данных SPP

SPP Status Port

Base+1

SPP/EPP

R

Регистр состояния SPP

SPP Control Port

Base+2

SPP/EPP

W

Регистр управления SPP

EPP Address Port

Base+3

EPP

R/W

Регистр адреса EPP

EPP Data Port

Base+4

EPP

R/W

Регистр данных EPP

?

Base+5 ..+7

EPP

?

Может использоваться в некоторых контроллерах для 16/32 битных операций ввода/вывода

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

Наличие сигнала WAIT# очень важно - при помощи этого сигнала периферийное устройство может подстраивать скорость обмена под свое быстродействие. Кроме того, протокол подстраивается под длину интерфейсного кабеля - вносимые за счет длины кабеля задержки просто приведут к удлинению циклов обмена. В данном сигнале наблюдается различие в стандартах EPP порта: EPP порт, удовлетворяющий IEEE 1284 поддерживает WAIT#, а некоторые старые разновидности портов - нет. Они меняют состояние стробирующих сигналов DATASTB# и ADDRSTB# независимо от WAIT#, как следствие периферийное устройство не может подстраивать скорость обмена. Такая спецификация называется EPP 1.7.

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

Для записи данных в порт программа выполняет цикл записи (IO WR) в порт EPP Data. Адаптер при этом устанавливает Write в низкий уровень и помещает данные на линии порта. Затем адаптер при низком уровне Wait устанавливает строб данных и ждет подтверждения от ПУ (перевода Wait в высокий уровень). По приходу Wait, адаптер снимает строб данных - на этом внешний цикл обмена завершается. Затем завершается процессорный цикл ввода-вывода (снятие IO WR). Спустя некоторое время ПУ устанавливает низкий уровень Wait, указывая на возможность нового цикла обмена.

Рисунок - 1.3 временная диаграмма записи

Рисунок - 1.4 временная диаграмма процесса чтения

Временные диаграммы процесса чтения приведены на рис. 1.4 и отличаются типом процессорного цикла ввода-вывода и стробом.

Режим ECP.

ECP - Extended Parallel Port - параллельный порт с расширенными возможностями. Предложен фирмами Hewlett Packard и Microsoft для связи с периферией типа принтеров и сканеров. Обеспечивает высокопроизводительный двунаправленный обмен данными с возможностью применения RLE компрессии (RLE - Run-Length Encoding - методика сжатия длинных повторяющихся последовательностей байт). Допускает буферизацию FIFO для прямого и обратного канала, использование DMA и программного ввода-вывода.

Протокол ECP обеспечивает передачу в обоих направлениях по двум типам циклов: циклу записи и чтения данных; циклу записи и чтения команд. Командные циклы, в свою очередь, подразделяются на два типа: передачу канальных адресов и счетчика RCL (Run-Length Counter). Канальная адресация ECP применяется для адресации множества логических устройств, входящих в одно физическое. Например, комбинированное устройство типа принтер/факс/модем допускает одновременную печать и прием факса - драйвер при работе с ним адресуется к другому логическому каналу одного и того же порта.

ECP аппаратно генерирует внешние протокольные сигналы. Обмен по ECP можно условно разделить на два независимых процесса, связанных через FIFO буфер: обмен программы с буфером FIFO (программным обменом или через DMA) и ПУ с буфером FIFO (аппаратно через адаптер ECP). Сигналы порта в ECP режиме приведены в таблице 1.13.

Таблица 1.13. - Сигналы порта EPP

Конт.

Сигнал

SPP

Сигнал

ECP

I/O

Назначение

1

Strobe#

HostClk

O

Используется в паре с PeriphAck для передачи в прямом направлении.

14

Auto Feed#

HostAck

O

Индицирует тип команда/данные при передаче в прямом направлении. Используется в паре с PeriphClk для передачи в обратном направлении.

17

SLCT IN#

-

O

"1" - признак обмена по IEEE 1284

"0" - обмен по SPP

16

INIT#

Reverse Request #

O

"0" - передача в обратном направлении

"1" - передача в прямом направлении

10

ACK#

PeriphClk

I

Используется в паре с HostAck для передачи в обратном направлении.

11

BUSY

PeriphAck

I

Используется в паре HostClk с для передачи в обратном направлении. Индицирует тип команда/данные при передаче в обратном направлении.

12

PE

Ack Reverse #

I

Переводится в "0" в качестве подтверждения Reverse Request #

13

SELECT

X Flag

I

Флаг расширяемости

15

ERROR#

Periph Request #

I

Устанавливается ПУ в для указания на доступность обратного канала

2...9

Data[0:7]

Data[0:7]

I/O

Двунаправленный канал данных

Временные диаграммы рис. 1.5 показывают прямую передачу данных.

Для передачи байта данных ПК помещает данные на шину канала обмена, устанавливает HostAck в соответствии с типом передаваемого байта (данные или команда), затем устанавливает низкий уровень HostClk, указывая на действительность данных. ПУ отвечает установкой "1" на PeriphAck, ПК в ответ устанавливает высокий уровень HostClk.

Рисунок - 1.5 временная диаграмма прямых передач данных

Этот перепад может использоваться для фиксации байта в ПУ. После обработки принятого байта ПУ устанавливает низкий уровень PeriphAck, указывая на готовность к приему следующего байта. На рис. 1.5 показана передача данных и команды. Передача в обратном направлении аналогична, только дополнительно используется пара сигналов Ack Reverse # и Reverse Request # для смены направления обмена; изменяются сигналы квитирования (см. таблицу 1.13).

1.9 Неисправности и тестирование параллельных портов

Тестирование параллельных портов целесообразно начинать с проверки их наличия в системе. Список адресов установленных портов обычно появляется в таблице заставки, выводимой BIOS на экран перед загрузкой ОС. Кроме этой таблицы, список можно посмотреть и с помощью тестовых программ или прямо в BIOS DATA AREA с помощью любого отладчика.

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

Если физически установлен только один порт и его не обнаруживает BIOS, то либо он отключен при конфигурировании, либо вышел из строя скорее всего из-за нарушений правил подключения.

Тестирование портов с помощью диагностических программ позволяет проверить их выходные регистры, а при использовании специальных заглушек -- и входные линии. Поскольку количество выходных линий порта (12) и входных (5) различно, то полная проверка порта с помощью пассивной заглушки принципиально невозможна. Разные программы тестирования требуют применения специально на них ориентированных заглушек (рис. 1.6),

Рисунок - 1.6 схема заглушки для тестирования LPT-порта программой Checkit

Большинство неприятностей при работе с LPT-портами доставляют разъемы и кабели. Для проверки порта, кабеля и принтера можно воспользоваться специальными тестами из популярных диагностических программ (Checkit, PCCheck и т. п.), а можно вывести на принтер какой-либо символьный файл.

Если вывод файла с точки зрения DOS проходит (копирование файла на устройство с именем LPTn или PRN проходит быстро и успешно), а принтер (исправный) не напечатал ни одного символа -- скорее всего, это обрыв (неконтакт в разъеме) цепи STROBES.

Если принтер по своему индикатору находится в состоянии On Line, a появляется сообщение о его неготовности (Not Ready Error), то причину следует искать в линии Busy.

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

10 OPEN "bincod.chr" FOR OUTPUT AS #1

20 FORJ=2T015

30 FOR 1=0 ТО 15

40 PRINT#1, CHR$(16*J+I);

50 NEXT I 60 PRINT#1,

70 NEXTJ

80 CLOSE #1

90 END

Файл BINCOD.CHR, созданный данной программой, представляет собой таблицу всех печатных символов (управляющие коды пропущены), расположенных по 16 символов в строке. Если файл печатается с повтором некоторых символов или их групп, по периодичности повтора можно легко вычислить оборванный провод данных интерфейса. Этот же файл удобно использовать для проверки аппаратной руссификации принтера.

Если принтер, подключенный к порту, в стандартном режиме (SPP) печатает нормально, а при переходе на ЕСР начинаются сбои, следует проверить кабель -- соответствует ли он требованиям IEEE 1284. Кабели с неперевитыми проводами нормально работают на скоростях 50-100 Кбайт/с, но при скорости 1-2 Мбайт/с, обеспечиваемой ЕСР, они могут не работать, особенно при длине более 2 метров.

Если при установке драйвера РпР-принтера появилось сообщение о необходимости применения «двунаправленного кабеля», проверьте наличие связи контакта 17 разъема DB-25 с контактом 36 разъема Centronics.

Аппаратные прерывания от LPT-порта используются далеко не всегда. Неисправности, связанные с цепью прерывания от порта, проявляются не часто. Однако по-настоящему многозадачные ОС (например, сервер NetWare) стараются работать с портом именно по прерываниям. Тестировать линию прерывания можно, только подключив к порту периферийное устройство или специальную заглушку.

2. Аппаратная часть

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

Рисунок - 1.7 оснавная блок схема всего процесса работы устройства

2.1 Программируемый периферийный адаптер 8255A

Программируемый периферийный адаптер (ППА) i8255A представляет собой три канала ввода/вывода A, B и C по 8 бит каждый. Имеет три режима работы. В режиме 0 три упомянутых канала могут быть независимо друг от друга запрограммированы на ввод или вывод информации. Режим 1 позволяет передавать информацию по каналам A и B, используя отдельные биты канала C для управления обменом данными. В режиме 2 канал A приобретает свойство двунаправленной шины, управляемой опять же отдельными битами канала C. Кроме того, возможны установка и сброс отдельных битов канала C. Микросхема имеет варианты исполнения в корпусе DIP40 и PLCC44. 8255A - NMOS версия, 82c55A - CMOS. Выпускался фирмами Intel, Harris, Intersil.

2.2 Основные особенности микросхемы

3 канала ввода/вывода, 8 бит каждый;

3 режима работы (1 - статический ввод/вывод, 2 - тактируемый ввод/вывод, 3 - двунаправленный ввод/вывод);

раздельное программирование каждого канала на ввод или вывод.

Описание структуры и функционирование

Структурная схема программируемого периферийного адаптера представлена на рис. 1.7

Рисунок - 1.7структурная схема программируемого периферийного адаптера

ППА структурно разбит на две группы (A и B). Группа A включает в себя канал A и старшую тетраду канала C. Группа B состоит из канала B и младшей тетрады канала C. Доступ к каналам ввода/вывода и регистру управления осуществляется с помощью логики чтения-записи в соответствии с табл. 1.

Расположение выводов в корпусе DIP40:

1

-

PA3

PA4

-

40

2

-

PA2

PA5

-

39

3

-

РА3

PA6

-

38

4

-

PA0

PA7

-

37

5

-

RD

WR

-

36

6

-

CS

RES

-

35

7

-

GND

D0

-

34

8

-

A1

D1

-

33

9

-

A0

D2

-

32

10

-

PC7

D3

-

31

11

-

PC6

D4

-

30

12

-

PC5

D5

-

29

13

-

PC4

D6

-

28

14

-

PC0

D7

-

27

15

-

PC1

Vcc

-

26

16

-

PC2

PB7

-

25

17

-

PC3

PB6

-

24

18

-

PB0

PB5

-

23

19

-

PB1

PB4

-

22

20

-

PB2

PB3

-

21

Сигналы A0,A1,CS должны быть выставлены ранее или одновременно с передним фро...


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.