У вас вопросы?
У нас ответы:) SamZan.net

Використання інтерфейсу Centronics для керування зовнішніми пристроями

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 29.12.2024

18

Реферат

Використання інтерфейсу Centronics для керування зовнішніми пристроями


1. Порядок обміну даними через порт принтера (інтерфейсу Centronics)

Для багатьох практичних задач потрібно зв’язати комп’ютер із зовнішніми пристроями. Без цього неможлива ні автоматизація фізичного експерименту, ні комп’ютерне управління технологічними процесами. Зовнішні пристрої можуть бути як стандартними (принтер), так і нестандартними (пристрої для наукових досліджень, крокові двигуни, роботи-маніпулятори). Основне призначення Centronics (аналог ИРПР-М) –це під’єднання до комп’ютера принтерів різних типів. Тому розміщення контактів роз’єму, призначення сигналів та програмні засоби орієнтовані на це застосування. В той же час через Centronics можна керувати й нестандартними зовнішніми пристроями. Перевагами Centronics є стандартність, простота та паралельність (рис.1) та низька ймовірність вивести комп’ютер з ладу (порівняно з ISA). Для зв’язку комп’ютера із зовнішніми пристроями служать порти. Одні порти служать для вводу даних в комп’ютер, а інші - для виводу. Дані в порт записуються і зчитуються по шині даних D0-D7 (8 біт), а для вибору конкретного порту використовується шина адреси A0-A15 (16 біт).

Кабель (25/DB-25S/ - 36)

Рис.1. Ввід-вивід даних через паралельний порт

Фактично паралельний порт складається з трьох 8-бітних портів/ регіcтрів:

) DRData Register, 8бітний регістр даних (вивід з комп.)

) SR - Status Register, 5-бітний регістр стану (ввід)

) CRControl Register , 4-бітний регістр контролю (вивід, але можливо ввід)

при цьому DR, CR служать для виводу даних з комп’ютера, а SR –для вводу (табл.1). Кожному біту (розряду) порту принтера фізично відповідає один контакт в роз’ємні. Використовується такі адреси портів принтера: LPT1 ($00378), LPT2 ($00278) і LPT3($003BC). Для більшості комп’ютерів адреси портів принтера (LPT1) в шістнадцятковій системі наступні: DR ($00378); SR ($00379), CR ($0037А), тобто адреса наступного регістра на 1 більша від попереднього, проте адреса першого порта може бути різною. Визначити адресув BIOS. Логічній одиниці на розряді паралельного порту відповідає напруга +5В, а логічному нулюВ. Проте, якщо розряд інверсний, то логічній одиниці відповідає 0 В, а логічному нулюВ. SR дозволяє зчитувати дані із зовнішніх пристроїв, наприклад цифрові сигнали з різноманітних датчиків. Для SR не використовуються всі розряди, тому розряди вхідних сигналів DI звичайно зчитуються по 4 біти зі зсувом вліво на 3 біти (табл.1). Відповідно після зчитування потрібно програмно зсунути розряди SR7-SR3 вправо на 3 біти (поділити на 8). (рис. DI4-0SR7-3D4-0)

Таблиця 1. Розряди паралельного порту (піни).

Позначення розрядів (для комп’ютера)

Позначення розрядів (для порту принтера)

Контакт роз’єму на комп’ютері 

Контакт роз’єму на принтері

Ввід (1) / вивід (0);

і–інверсія

Розряди вхідних сигналів

Port1

DR0

D0

DR1

D1

DR2

D2

DR3

D3

DR4

D4

DR5

D5

DR6

D6

DR7

D7

Port2

SR3

Error

15

DI0

SR4

Slct

13

DI1

SR5

Pe

12

DI2

SR6

Ask

10

DI3

SR7

Busy

11

/ і

DI4

Port3

CR0

Strobe

/ i

CR1

Auto fd

14

/ i

CR2

Init

16

CR3

Scltin

17

/ i

Земля

Gnd

Gnd

,17,19-30,33

Решту розрядівзаземлення.

Немає сигналів живленняяк перевага.

Непід’єднані контактивисокий рівень

Призначення розрядів порту принтера:

Регістр DR

D0-D7 : 8розрядна шина даних, служить для передачі даних з комп’ютера в принтер.

Регістр SR

Error : Помилка

SLCT : Сигнал готовності принтера

PE : Сигнал закінчення паперу

Ask : Підтвердження принтера про прийом даних

Busy : Сигнал зайнятості принтера

Регістр CR

Strobe : Сигнал стробування даних (дозвіл приймати дані, які вже встановлені на шині та виконувати певні дії; передача даних або підготовкастроб (команда на виконання) –пасивний стан)

Auto fd : Сигнал переходу на новий рядок

Init : Ініціалізація принтера (очищення його буфера)

SLCT In : Сигнал принтеру про початок передачі даних

Рис.5.1. Діаграма передачі даних

В порті принтера використовується ТТЛ-логіка (0В), довжина кабелю,8м.

2. Протоколи та типи паралельного порта

Типи паралельного порту

Тип паралельного порту

Режим вводу

Режим виводу 

Примітки

стандартний

півбайтовий

сумісний

ввідбіт, вивідбіт

Двонаправлений

байтовий

сумісний

ввід/вивід по 8 біт

Вдосконалений (ЕРРEnchanced PP)

ЕРР 

ЕРР 

ввід/вивід по 8 біт

Розширений (ЕСР)

ЕСР 

ЕСР

ввід/вивід по 8 біт , прямий доступ до пам’яті

Режими пар порту

Режим

Напрям

Швидкість, Кбайт/с

Півбайтовий (4біт)

ввід

байтовий

ввід

сумісний

вивід

ЕРР

ввід/вивід

-2000

ЕСР

ввід/вивід

-2000

Після 1993ЕРР/ЕСР

Двонаправлений порт 1 (Type1 parallel port), вперше використаний в комп’ютерах PS/2. Дозволяє передачу і прийом через регістр даних. Напрям передачі вказує спеціальний біт регістру управління CR5 (від 0) (=0вивід, 1 - ввід).

Порт з прямим доступом до пам’яті (Type 3 DMA parallel port), для PS/2 моделей 57, 90, 95.

Для введення даних звичайно використовується режим півбайтного обміну (4бітNible Mode) Паралельний порт розміщений на материнській платі або на платі розширення (мультикарті).

Протоколи

) Стандартний протокол LPT-порта (SPPStandard Parallel Port) –однонапрявлений порт, на базі якого програмно реалізується протокол обміну Centronics.

) протокол порта з розширеними можливотсями (ECPExtended Capability Port).

Протокол SPP / ECPв BIOS.

3. Фізичний і електричний інтерфейс

Фізичні характеристики передавачів і приймачів сигналів визначає стандарт ІЕЕЕ 1284 (1994 рік).

Вимоги до передавачів:

) рівні сигналів без навантаження повинні бути в межах від -0,5В до +5,5В.

) рівні сигналів при струмі навантаження 14 мА повинні бути не нижчі +2,4В для високого рівня (VOH, Volt Out H) і +0,4В для низького рівня (VOL).

3) вихідний опір 50 Ом (+/- 5).

) Швидкість наростання (спаду) імпульсу у межах 0,05,4 В/нс.

Вимоги до приймачів:

) допустимі пікові значення сигналу від -2,0 до 7 В.

) поріг спрацьовування 2,0 В для високого рівня (VIH) і 0,8 В для низького рівня (VIL).

) вхідний струм не більше 20 мА.

) вхідна ємність не більше 50 пФ.

Стандарт визначає три типи роз’ємів:

А - роз’єм в комп’ютері (DB-25) / ІЕЕЕ 1284-А 

В - на принтері (Centronics-36) / ІЕЕЕ 1284-В

С - малогабаритний роз’єм (36 контактів)/ ІЕЕЕ 1284-С

Вимоги до кабелів:

) кожна лінія повинна мати хвильовий опір (імпеданс) 62 Ом( +/- 6 Ом) у частотному діапазоні 4МГц.

2) рівень перехресних перешкод між парами провідників не більше 10%.

3) вита пара (для принтерів НР)

Якщо кабель фольгований і всі сигнальні лінії перевиті, то довжина до 10м (до 2 Мбайт/с).

Хосткомп’ютер, що володіє паралельним портом. 

Програмне управління портами принтера

Управління портами можливе мовою асемблера, але більш зручно використовувати асемблері вставки на мові високого рівня (Turbo Pascal 7.0). Асемблерний блок може розміщуватися як в тесті основної програми, так і в тексті процедури. Початок асемблерного блоку позначається службовим словом asm, кінець блоку позначається службовим словом end. У такому випадку в асемблерній вставці можна писати безпосереднього арифметичні і логічні команди, команди переходу і вводу-виводу. 

Простота програмуваннядоступ до кожного біта.

Розглянемо програму Port.pas, яка повинна записати в порт принтера 1 байт даних, а потім зчитати з порта принтера 1 байт. Процедура Write_Port1(Bout) виконує запис 1 байту в порт, процедура Read_Port2(Bin) зчитує 1 байт з порта.

PROGRAM Port;

USES Crt; CONST Port1=$00378; Port2=$00379; { Адреси портiв } VAR Bin,BOut:byte;

Procedure Write_Port1(BOut:byte);

Begin 

asm 

mov dx,port1 { Адреса порта } mov al,bOut 

out dx,al { вивід даних bOut в порт }

end;

End;

Procedure Read_Port2(var Bin:byte); Var b0:byte;

Begin 

asm 

mov dx,port2 in al,dx { зчитування даних з порта }

mov b0,al 

end; Bin:=b0;

End;

BEGIN 

ClrScr; writeln('Програма з асемблерними вставками для роботи з портами '); bOut:=$08;

Write_Port1(BOut); writeln(' В порт записано значення BOut = ',BOut);

Read_Port2(Bin); writeln(' З порта зчитано значення Bin = ',Bin); readln;

END. 

Для зчитування /запису даних через порти зручно написати спеціалізовані процедури, які будуть також проводити первинну обробку даних. Обробка бітів можна приводити в Асемблері, або ж перетворити байт b1 даних у масив бітів mb[7],.. mb[0] (у двійкове число, 7 - 0111) на мові високого рівня (Паскаль) і оперувати тільки елементами цього масиву (зменш. Швидкість). 

. Маскуваннявстановлення фільтру, тобто операції виконуються тільки з певними бітами. 

Asm

Mov al,ba

And al,0100 0000b

Mob b2,al

end

. Інверсія виконується на рівні асемблеру () або нарівні Паскалю. 

neg al

3. Зсув. В асемблері зсув , у Паскалі зсув на n бітів вправо означає ділення на 2n.

В Паскалі є також наступні команди роботи з портами: 

Adres:=$00378;

Port[Adres]:=255; // запис 1111 1111

B1:=port[Adres+1]; // зчитування

Стробування

Швидкість обміну через порт принтера залежить від швидкодії комп’ютера. Тому для зовнішніх пристроїв низької і середньої швидкодії потрібно забезпечувати затримку сигналів (наприклад стробу) на певні проміжки часу (затримка 1 мс: в Паскалі : Delay(1) , вDelphi : Sleep(1)). 

У процесі початкового тестування POST BIOS перевіряє наявність паралельних портів LPT1-LPT4 по адресах 3BCh, 378h, 278h і поміщає базові адреси виявлених портів в пам’ять за адресами: 0:0408h, 040Ah, 040Ch, 040Eh. Після виявлення порти ініціалізуютьсяна порт подається сигнал Init і в порт записуються нульові значення.

Програмне переривання BIOS int 17h забезпечує наступні функції підтримки LPT-порту:

00h - вивід символу з регістру AL, строб формується після готовності принтера

h - ініціалізація принтера

h - опитування стану принтера

При виклику INT 17h номер функції задається в регістрі AH, а номер портуу регістрі DX (0LPT1, 1LPT2..). Дані з порта повертаються у регістр AH. 

Використання переривань: LPT1IRQ7, LPT2IRQ5.

4. Проектування апаратури для спряження з Centronics

Для Centronics характерні такі особливості:

  1.  обмін даними є програмно-керованим (обробка переривань і прямий доступ до пам’яті неможливі).
  2.  Невисока швидкість обміну
  3.  Обмеження на довжину лінії зв’язку ()
  4.  Немає шини живлення.

Розглянемо підключення до комп’ютера найпростішого пристроюнабору світло діодів і кнопок.

Для керування використано сигнали Strobeстробування запису даних та Initочистка регістру. 

Після світло діода сигнал з напругою (0, +5В ) і струмом 10мА можна подати на підсилювач напруги та струму і далі на виконавчий пристрій. Для безпосереднього керування виконавчими пристроями використовують тиристори, оптопари, реле.

Рис.9.2. Під’єднання до комп’ютера зовнішнього пристрою через Centronics

Для збільшення розрядності вхідних даних використовують мультиплекс ори (вхідбіт, вихід –), а для збільшення розрядності вихідних данихдемультиплексори (вхідбіт, вихідбіт). Для побудови мультиплексорів використовують буфери з трьома станами (0В, 5В, відключено), наприклад К155ЛП8.

Для формування команд – дешифратори (напр.. К155ИД3 : на вхід біти D0-D3, на виході команди K0-K15).

Рис. 2. Разъем интерфейсного адаптера Cetronics DB-25S

5. Програмування паралельного порта під Windows NT/2000/XP

Windows працює з портами як з файлами і вимагає точного дотримання протоколу обміну даними. Наприклад при передачі навіть одного біту на паралельний порт система вимагає також відпрацювання сигналів Strobe і Ask (відповідьпідтвердження).

Спочатку порт потрібно відкрити як файл функцією CreateFile, що надається Win32 API i прототип якої:

HANDLE CreateFile(

LPCTSTR lpFileName,

 DWORD dwDesiredAccess,

 DWORD dwSharedMode,

 LPSECURITY_ATTRIBUTES lpSecurityAttributes,

 DWORD dwCreationDistribution,

DWORD dwFlagAndAttributes,

HANDLE  hTemplateFile  ); де:

lpFileName - назва порта: COM1, COM2, ..., LPT1, LPT2, ..

вказівник на рядок з нульовим символом у кінці (PCHAR) , яка визначає назву об’єкту, що створюється (файл, канал, почтовый слот, ресурс связи (в данном случае порты), дисковое устройство, приставка, или каталог)

dwDesiredAccess - тип доступу до файлу: GENETIC_READ - файл для зчитування, GENETIC_WRITE - файл для запису, GENETIC_READ | GENETIC_WRITE - файл для зчитування / запису.

dwSharedMode - параметр спільного доступу до файлу (=0монопольний режим)

lpSecurityAttributes - атрибут захисту файлу (=Null)

dwCreationDistribution 

Определяет поведение функции если объект уже существует и как он будет открыт в этом случае Принимает одно из следующих значений : 

CREATE_NEW 

Создает новый объект (файл) Выдает ошибку если указанный объект (файл) уже существует. 

CREATE_ALWAYS 

Создает новый объект (файл) Функция перезаписывает существующий объект (файл)

OPEN_EXISTING 

Открывает объект (файл) Выдает ошибку если указанный объект (файл) не существует.(Для более детального смотрите SDK)

OPEN_ALWAYS 

Открывает объект (файл), если он существует. Если объект (файл) не существует, функция создает его, как будто dwCreationDistribution были CREATE_NEW. 

TRUNCATE_EXISTING 

Открывает объект (файл). После этого объект (файл) будет усечен до нулевого размера.Выдает ошибку если указанный объект (файл) не существует

DwFlagsAndAttributes 

Атрибуты объекта (файла), атрибуты могут комбинироваться 

  •  FILE_ATTRIBUTE_ARCHIVE
  •  FILE_ATTRIBUTE_COMPRESSED
  •  FILE_ATTRIBUTE_HIDDEN
  •  FILE_ATTRIBUTE_NORMAL
  •  FILE_ATTRIBUTE_OFFLINE
  •  FILE_ATTRIBUTE_READONLY
  •  FILE_ATTRIBUTE_SYSTEM
  •  FILE_ATTRIBUTE_TEMPORARY

HTemplateFile

Определяет дескриптор с GENERIC_READ доступом к временному объекту(файлу). Временный объект(файл)поставляет атрибуты файла и расширенные атрибуты для создаваемого объекта (файла) ИСПОЛЬЗУЕТСЯ ТОЛЬКО В WINDOWS NT Windows 95: Это значение должно быть установлено в Nil. 

LPTPort := 'LPT1'; 

hCommFile := CreateFile(Pchar(LPTPort), 

GENERIC_WRITE, 0, nil, 

OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 

0);

6. Використання бібліотеки IO.DLL для доступу до портів у Windows 95/98/NT/2000/XP

При використанні DOS і Windows 95/98 доступ до портів вводу/виводу (I/O ports) комп’ютера був відносно простим. Проте у Windows NT/2000/XP (захищена операційна система) доступ до портів вв/вив значно ускладнився за рахунок віртуалізації апаратного забезпечення (virtualize hardware). Віртуалізація означає, що програма вже не може звертатися безпосередньо до фізичного пристрою, а звертається тільки до драйвера, який емулює (emulates) роботу фізичного пристрою (відеоадаптеру, клавіатури, звукової карти чи принтера). Програмна емуляція фізичних пристроїв (хороший стиль для станд. задач) з одного боку підвищує надійність і захищеність роботи операційної системи (помилкові команди перехоплюються), а з іншого обмежую можливості керування нестандартними зовнішніми пристроями через порти вв/вив. 

Тому команди вводу/вив в порт (IN and OUT) у Windows NT/2000/XP не працюють, а операційна система працює із зовнішніми пристроями як з файлами (команди запису/зчитування з файлу). Крім ускладнення програмування використання драйвера як посередника значно змекншує швидкодію операцій вв/вив.

Тому для роботи з портами розроблена динамічно під’єднувана бібліотека IO.DLL, що дозволяє зручно виконувати команди вв/вив даних у порти для 95/98 and NT/2000/XP.

/ Licensing IO.DLL is completely free! /

Download

io.zip 46k (Contains all the files) io.dll 46k 

The following two files are for C++ users. There is more info on these in the prototypes section.

io.cpp 1k io.h 1k 

C/C++ Prototypes

void WINAPI PortOut(short int Port, char Data);

void WINAPI PortWordOut(short int Port, short int Data);

void WINAPI PortDWordOut(short int Port, int Data);

char WINAPI PortIn(short int Port);

short int WINAPI PortWordIn(short int Port);

int WINAPI PortDWordIn(short int Port);

void WINAPI SetPortBit(short int Port, char Bit);

void WINAPI ClrPortBit(short int Port, char Bit);

void WINAPI NotPortBit(short int Port, char Bit);

short int WINAPI GetPortBit(short int Port, char Bit);

short int WINAPI RightPortShift(short int Port, short int Val);

short int WINAPI LeftPortShift(short int Port, short int Val);

short int WINAPI IsDriverInstalled();

procedure PortOut(Port : Word; Data : Byte); stdcall; external 'io.dll';

stdcallпараметр, що визначає режим передачі параметрів процедурі (через стек). По замовчуванню параметри передаються зліва направо (Left-to-right), а для параметрасправа наліво (Right-to-left). Для виклику зовнішніх процедур використовується stdcall (calls to external code)

Опис функцій / Function Descriptions

Please refer to the prototype for the particular language you are using. 

PortOut

Вивід байта у спеціальний порт / Outputs a byte to the specified port. 

PortWordOut

Вивід слова (16 біт) у порт / Outputs a word (16-bits) to the specified port. 

PortDWordOut

Вивід подвійного слова у порт / Outputs a double word (32-bits) to the specified port. 

PortIn

Зчитування байту з порта / Reads a byte from the specified port. 

PortWordIn

Зчитування слова / Reads a word (16-bits) from the specified port. 

PortDWordIn

Зчитування подвійного слова / Reads a double word (32-bits) from the specified port. 

SetPortBit

Встановлення бітів порта / Sets the bit of the specified port. 

ClrPortBit

Очищення бітів порта / Clears the bit of the specified port. 

NotPortBit

Інвертування бітів порта / Nots (inverts) the bit of the specified port. 

GetPortBit

Повернути стан порта / Returns the state of the specified bit. 

RightPortShift

Shifts the specified port to the right. The LSB is returned, and the value passed becomes the MSB. 

LeftPortShift

Shifts the specified port to the left. The MSB is returned, and the value passed becomes the LSB. 

IsDriverInstalled

Повертає не 0, якщо io.dll інстальовано. Returns non-zero if io.dll is installed and functioning. 

Приклад процедур у Delphi

function IsDriverInstalled : Boolean; stdcall; external 'io.dll'; // протопити

procedure PortOut(Port: Word; Data: Byte);stdcall; external 'io.dll';

function PortIn(Port: Word): Byte;stdcall; external 'io.dll';

procedure TForm1.FormCreate(Sender: TObject);

begin

if IsDriverInstalled then

begin

Label1.Caption:='Driver ready...';

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

var

i:byte;

begin

for i:=0 to 255 do

begin

PortOut($378,i);

Sleep(200);

Application.ProcessMessages;

end;

end;

procedure TForm1.Button2Click(Sender: TObject);

var

b:byte;

begin

b:=PortIn($379);.Text:=IntToStr(b);

end;

17




1. Задание 1 Прочитайте текст и переведите его письменно
2. РЕФЕРАТ дисертації на здобуття наукового ступеня кандидата наук з державного управління1
3. і Музикою займався з дитинства
4. лекція тварин А В Т О Р Е Ф Е Р А Т дисертації на здобуття наукового ступеня кандидата
5. Гидростатика 1
6. Значительное неравенство в распределении доходов является социально опасным
7. Не княжеской породыА ходит с короной;Не сторожем стоитА всех рано будит
8. Особенности управления компаниям
9. ДОКЛАДОВ ПО ДИСЦИПЛИНЕ БЕЗОПАСНОСТЬ ЖИЗНЕДЕЯТЕЛЬНОСТИ 1
10. Контрольная работа по дисциплине Экономика предприятия группа ЗЭФу11 Оформление- Шрифт 14 Times new Romn ин
11. 7- Системы распознавания образов идентификации Понятие образа.
12. Ставропольский городской штаб студенческих отрядов 29 ноября 2013 г
13. это АкарысСредний это БекарысЖанарыс помладше ихАксуек не входит в них
14. Идвирд Майбридж.html
15. Введення до спеціальності Зварювання
16. Б 2Б 3Г 4А 5В 6А 7 Какие места Омской области связанны с Сергием Радонежским Первый храм города Омска ос
17. реферат дисертації на здобуття наукового ступеня кандидата біологічних наук
18. I 3Часть II 8Часть III
19. в зажиме методика расчета параметров БВР сравнительная характеристика отбойки на зажатую среду
20. Как изменяется статическое давление вдоль проточной части насоса Обоснуйте ответ