46991 (665674), страница 2

Файл №665674 46991 (Використання інтерфейсу Centronics для керування зовнішніми пристроями) 2 страница46991 (665674) страница 22016-07-31СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

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) на мові високого рівня (Паскаль) і оперувати тільки елементами цього масиву (зменш. Швидкість).

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

Asm

Mov al,ba

And al,0100 0000b

Mob b2,al

end

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

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, строб формується після готовності принтера

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

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

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

Використання переривань: LPT1 – IRQ7, LPT2 – IRQ5.

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

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

  1. обмін даними є програмно-керованим (обробка переривань і прямий доступ до пам’яті неможливі).

  2. Невисока швидкість обміну

  3. Обмеження на довжину лінії зв’язку (2м)

  4. Немає шини живлення.

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

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

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


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

Для збільшення розрядності вхідних даних використовують мультиплекс ори (вхід – 16 біт, вихід – 4 ), а для збільшення розрядності вихідних даних – демультиплексори (вхід – 4 біт, вихід – 16 біт). Для побудови мультиплексорів використовують буфери з трьома станами (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;

Характеристики

Тип файла
Документ
Размер
997,79 Kb
Тип материала
Учебное заведение
Неизвестно

Список файлов реферата

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6532
Авторов
на СтудИзбе
301
Средний доход
с одного платного файла
Обучение Подробнее