Програма, яка реалізує контроль передачі даних через паралельний порт LPT

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

ЗМІСТ

ВСТУП

1. ОПИС ПРЕДМЕТНОГО СЕРЕДОВИЩА

1. 1Опис LPT порта

1.1. 1 Інтерфейс Centronics і стандарт IEEE 1284

1.1. 2 Роз'єми

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

1.1. 4 Фірмові розширення

1.1. 5 Режими роботи

1.1. 6 Опції BIOS для LPT-порту

1.1. 7 Стандарт IEEE-1284

1. 2 Опис програмного середовища

2. РОЗРОБКА ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ

ВИСНОВКИ

ВСТУП

Перший контролер був розроблений в 1971 році інженером англ. Gary W. Boone, співробітником «Texas Instruments». У 1980 році фірма Intel випускає мікроконтролер «i8048». Трохи пізніше в цьому ж році «Intel» випускає наступний мікроконтролер: «i8051». Вдалий набір периферійних пристроїв, можливість гнучкого вибору зовнішньої або внутрішньої програмної пам’яті і прийнятна ціна забезпечили цьому мікроконтролеру успіх на ринку. З погляду технології мікроконтролер i8051 був для свого часу дуже складним виробом -- у кристалі було використано 128 тисяч транзисторів, що в 4 рази перевищувало кількість транзисторів в 16-розрядному мікропроцесорі i8086.

На сьогоднішній день існує більше 200 модифікацій мікроконтролерів, що сумісних з i8051, випускаються двома десятками компаній, і великої кількості мікроконтролерів інших типів. Популярністю у розробників користуються 8-бітові мікроконтролери PIC від фірми «Microchip Technology» і «AVR» від фірми «Atmel».

Сьогодні проектування взагалі і, зокрема, проектування друкованих плат немислимо без застосування САПР — системи автоматизації проектування. За останні роки сучасні технології стали серйозною підмогою в складному працю проектувальника.

На зміну калькулятору, папері, олівця і туші прийшли спеціальні програми для розрахунку та графічного побудови. Це дозволило вдвічі скоротити терміни проектування, знизити трудомісткість даного процесу. Системи автоматизації проектування, об'єднали математику і графіку, стали наступним кроком на цьому шляху.

САПР — комплекс засобів автоматизації проектування, взаємопов'язаний з підрозділами проектної організації і виконує автоматизоване проектування. Під автоматизацією проектування розуміється такий спосіб проектування, при якому всі проектні операції та процедури або їх частина здійснюється при взаємодії людини і ЕОМ. У результаті функціонування САПР — від технічного завдання, послідовно, проходячи ряд проектних стадій, користувач отримує робочий проект об'єкту проектування (робочі креслення, технічний опис та ін.) Однією з важливих складових частин САПР є машинна графіка. САПР виконує низку процедур певним чином логічно пов’язаних між собою і службовців для прийняття проектних рішень. САПР можуть бути використані в різних галузях науки, техніки та виробництва. Повністю весь цикл розробки та виготовлення друкованих плат можна автоматизувати за допомогою САПР.

1. ОПИС ПРЕДМЕТНОГО СЕРЕДОВИЩА

1. 1Опис LPT порта

IEEE 1284 (порт принтера, паралельний порт, англ. Line Print Terminal, LPT) — міжнародний стандарт паралельного інтерфейсу для підключення периферійних пристроїв персонального комп’ютера.

У основному використовується для підключення до комп’ютера принтера, сканера та інших зовнішніх пристроїв (часто використовувався для підключення зовнішніх пристроїв зберігання даних), проте може застосовуватися і для інших цілей (організація зв’язку між двома комп’ютерами, підключення яких-небудь механізмів телесигналізації і телекерування).

В основі даного стандарту лежить інтерфейс Centronics і його розширені версії (ECP, EPP).

Назва «LPT» утворено від найменування стандартного пристрою принтера «LPT1» (Line Printer Terminal або Line PrinTer) в операційних системах сімейства MS-DOS.

1.1.1 Інтерфейс Centronics і стандарт IEEE 1284

Паралельний порт Centronics — порт, який використовується з 1981 року в персональних комп’ютерах фірми IBM для підключення друкуючих пристроїв, розроблений фірмою Centronics Data Computer Corporation; вже давно став стандартом де-факто, хоча в дійсності офіційно на даний момент він не стандартизований.

Спочатку цей порт був розроблений тільки для симплексного (односпрямованої) передачі даних, так як передбачалося, що порт Centronics повинен використовуватися тільки для роботи з принтером. Згодом різними фірмами були розроблені дуплексні розширення інтерфейсу (byte mode, EPP, ECP). Потім був прийнятий міжнародний стандарт IEEE 1284, що описує як базовий інтерфейс Centronics, так і всі його розширення.

1.1.2 Роз'єми

Порт на стороні керуючого пристрою (комп'ютера) має 25-контактний 2-рядний роз'єм DB-25-female («мама») (IEEE 1284-A). Не плутати з аналогічним male-роз'ємом («папа»), який встановлювався на старих комп’ютерах і являє собою 25-піновий COM-порт (рис1. 1). На периферійних пристроях зазвичай використовується 36-контактний мікророз'єм стрічкового типу Centronics (IEEE 1284-B), тому кабелі для підключення периферійних пристроїв до комп’ютера за паралельним порту зазвичай виконуються з 25-контактним роз'ємом DB-25-male на одній стороні і 36-контактним IEEE 1284-B на іншій (AB-кабель). Зрідка застосовується AC-кабель з 36-контактним роз'ємом MiniCentronics (IEEE 1284-C).

Рис. 1. 1

Існують також CC-кабелю з роз'ємами MiniCentronics на обох кінцях, призначені для підключення приладів в стандарті IEEE 1284-II, який застосовується рідко.

Довжина з'єднувального кабелю не повинна перевищувати 3 метрів. Конструкція кабелю: виті пари в загальному екрані, або кручені пари в індивідуальних екранах. Зрідка використовуються стрічкові кабелі.

Для підключення сканера, та деяких інших пристроїв використовується кабель, у якого замість роз'єму (IEEE 1284-B) встановлений роз'єм DB-25-male. Зазвичай сканер оснащується другим інтерфейсом з роз'ємом DB-25-female (IEEE 1284-A) для підключення принтера (оскільки зазвичай комп’ютер оснащується тільки одним інтерфейсом IEEE 1284). Схемотехніка сканера побудована таким чином, щоб при роботі з принтером сканер прозоро передавав дані з одного інтерфейсу на інший.

1.1.3 Фізичний інтерфейс

Базовий інтерфейс Centronics (рис. 1. 2) є односпрямованим паралельним інтерфейсом, містить характерні для такого інтерфейсу сигнальні лінії (8 для передачі даних, строб, лінії стану пристрою).

Рис. 1. 2

Дані передаються в один бік: від комп’ютера до зовнішнього пристрою. Але повністю односпрямованим його назвати не можна. Так, 4 зворотні лінії використовуються для контролю за станом пристрою. Centronics дає змогу підключати один пристрій, тому для спільного чергового використання декількох пристроїв потрібно додатково застосовувати селектор.

Швидкість передачі даних може варіюватися і досягати 1,2 Мбіт / с.

1.1.4 Фірмові розширення

Більшість фірмових розширень початкового інтерфейсу згодом було стандартизовано індустрією, якою процес завершився прийняттям серії стандартів IEEE-1284.

Однак, слід зазначити, що повної відповідності між цим стандартом і попередніми йому фірмовими розширеннями немає. Найбільш відомими фірмовими розширеннями є їх до від фірми Hewlett-Packard. Це Bitronics, що забезпечує двосторонню передачу інформації (застосовується перш за все для зняття розширеної інформації про стан принтера) і протокол мультиплексування шини від HP, призначений для того щоб підключати до одного LPT-порту безліч пристроїв за схемою «ланцюжок». На основі цього протоколу були розроблені стандарти 1284. 3−2000 і 1284. 4−2000, але повної сумісності досягнуто не було.

У результаті деякі дуже старі пристрої від HP можуть не цілком коректно працювати із портами, зконфігурований в режим IEEE-1284. Переважна більшість сучасної техніки не відчуває такої проблеми.

1.1.5 Режими роботи

Стандарт дозволяє використовувати інтерфейс в декількох режимах:

SPP (Standart Paralell Port) — односпрямований порт, повністю сумісний з інтерфейсом Centronics.

Nibble Mode — дозволяє організувати двонаправлений обмін даними в режимі SPP шляхом використання керуючих ліній (4 біт) для передачі даних від периферійного пристрою до контролера. Історично це був єдиний спосіб використовувати Centronics для двостороннього обміну даними.

Byte Mode — рідко використовуваний режим двостороннього обміну даними. Використовувався в деяких старих контролерах до прийняття стандарту IEEE 1284.

EPP (Enhanced Parallel Port) — розроблений компаніями Intel, Xircom і Zenith Data Systems — двонаправлений порт, зі швидкістю передачі даних до 2МБайт/сек. (1 991)

ЕСР (Extended Capabilities Port) — розроблений компаніями Hewlett-Packard і Microsoft — на додаток з’явилися такі можливості, як наявність апаратного стиснення даних, наявність буфера і можливість роботи в режимі DMA.

1.1.6 Опції BIOS для LPT-порту

BIOS забезпечує підтримку LPT-порту, необхідну для організації висновку по інтерфейсу Centronics.

У процесі початкового тестування POST BIOS перевіряє наявність паралельних портів за адресами ЗВСЬ, 378h і 278h і поміщає базові адреси виявлених портів в осередку BIOS DATA AREA 0: 0408 h, 040Ah, 040СП, 040ЕП. Ці осередки зберігають адреси портів з логічними іменами LPT1-LPT4. У комірки 0: 0478, 0479, 047А, 047 В заносяться константи, які визначають витримку тайм-ауту для цих портів.

Пошук портів зазвичай ведеться за базовим адресою. Якщо лічений байт збігся із записаним, вважається, що знайдено LPT-порт, і його адресу поміщають у клітинку BIOS DATA AREA. Адреса порту LPT4 BIOS самостійно встановити не може, оскільки в списку стандартних адрес пошуку є лише три вищевказаних.

Виявлені порти ініціалізувалися — записом в регістр управління формується і знімається сигнал Initff, після чого записується значення 00h, відповідне вихідного стану сигналів інтерфейсу.

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

00h — висновок символу з регістра AL по протоколу Centronics. Дані поміщаються у вихідний регістр і після готовності принтера формується строб.

01h — ініціалізаія інтерфейсу та принтера.

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

Коли Ви INT 17h номер функції задається в регістрі АН, номер порту — в регістрі DX (0 — LPT1, 1 — LPT2 …). При поверненні після будь-якої функції регістр АН містить код стану — біти регістра стану SR [7: 3] (біти 6 і 3 інвертувати) і прапор тайм-ауту в біті 0. Прапор тайм-ауту встановлюється при невдалій спробі виведення символу.

1.1.7 Стандарт IEEE-1284

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

Режим сумісності (Compatibility Mode) — однонаправлений (висновок) по протоколу Centronics. Цей режим відповідає SPP-порту.

Полубайтний режим (Nibble Mode) — введення байта в два циклу (по 4 біти), використовуючи для прийому лінії стану. Цей режим обміну підходить для будь-яких адаптерів, оскільки задіює тільки можливості стандартного порту.

Байтний режим (Byte Mode) — введення байта цілком, використовуючи для прийому лінії даних. Цей режим працює тільки на портах, що допускають читання вихідних даних (Bi-Directional або PS / 2 Турі 1, див. вище).

Режим ЕРР (ЕРР Mode) — двонаправлений обмін даними (ЕРР означає Enhanced Parallel Port). Керуючі сигнали інтерфейсу генеруються ап апаратні під час циклу звернення до порту. Ефективний при роботі з устрій чують зовнішньої пам’яті і адаптерами локальних мереж.

Режим ЕСР (ЕСР Mode) — двонаправлений обмін даними з можливістю апаратного стиску даних за методом RLE (Run Length Encoding) і використання FIFO-буферів і DMA (ЕСР означає Extended Capability Port). Керуючі сигнали інтерфейсу генеруються апаратно. Ефективний для принтерів і сканерів (тут може використовуватися стиск) і різних пристроїв блочного обміну.

Стандарт визначає спосіб, за яким ПЗ може визначити режим, доступний і хосту (PC), і периферійні пристрої (або приєднання другого комп’ютера). Режими нестандартних портів, що реалізують протокол обміну Centronics апаратно (Fast Centronics, Parallel Port FIFO Mode), можуть і не бути режимами IEEE 1284, незважаючи на наявність у них рис ЕРР і ЕСР.

У комп’ютерах з LPT-портом на системній платі режим — SPP, ЕРР, ЕСР або їх комбінація — задається в BIOS Setup. Режим сумісності повністю відповідає SPP-порту. Решта режими докладно розглянуті нижчі.

При описі режимів обміну фігурують такі поняття:

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

ПП — периферійний пристрій, що підключається до цього порту;

Ptr — в назвах сигналів позначає передавальний ПП;

Прямий канал — канал виведення даних від хоста у ПП;

Зворотний канал — канал введення даних у хост з ПП.

1.2 Опис програмного середовища

Для реалізації даної задачі було використано мову програмування С++.

Звідси — програмне середовище, що використовувалось Microsoft Visual C++ 6. 0

Microsoft Visual Studio — лінійка продуктів компанії Майкрософт, що включають інтегроване середовище розробки програмного забезпечення і ряд інших інструментальних засобів.

Visual Studio 6.0 — випущена в червні 1998 — остання версія Visual Studio, що працює на платформі Win9x. Як і раніше популярна серед програмістів, що використовують Visual Basic. Дана версія була основним середовищем розробки програм під Windows від Microsoft, до появи платформи. NET.

2. РОЗРОБКА ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ

Для реалізації поставленої задачі необхідно в першу чергу скласти алгоритм по якому і буде виконуватись програма. Оскільки дії виконуються як на ММК так і на ПК, то проект розділено на 2 програми.

Алгоритм роботи програми, встановленої на ММК:

Підготовка ММК до запису числових значень;

Запис даних до регістрової пам’яті ММК;

Якщо на пінах регістру Control є номер цифри — передача на регістр даних цієї цифри;

Запис до регістру статусу номеру наступної цифри.

Завдяки роботі такого алгоритму забезпечується передача цифр «без плутанини».

Тепер складемо блок-схему, котра відображатиме роботу логічної частини передачі даних на LPT (рис. 2. 1).

Рис. 2. 1

Тепер, згідно з наведеною блок-схемою розроблюємо саму програму, яка виконуватиме перечисленні функції і працюватиме за створеним алгоритмом. інтерфейс паралельний порт

Дана частина проекту буде розроблятись у AVR Studio 4 на мові програмування Assembler.

Друга частина проекту — програма для ПК. Спочатку складемо алгоритм:

Перевірка значень на вході регстру статусу порта LPT;

Запис вмісту регістру даних до відповідної змінної;

Вивід номеру цифри до регістру Control порта LPT;

Перетворення змінних у вигляд гг: хх;

Зміна системного часу.

Складемо блок-схему алгоритму (Рис. 2. 2).

Рис. 2. 2

Як було зазначено в пункті 1.2 (див. вище), розробка програми буде здійснюватись в Microsoft Visual C++ 6. 0, на мові програмування — С++. Тому для коректної роботи програми з апаратною частиною комп’ютера, тобто з LPT, необхідно додатково підключити зовнішню бібліотеку ввода-виводу для LPT порта INPOUT32. lib i INPOUT32. dll (динамічна та статична бібліотеки роботи з LPT). Копіюємо ці бібліотеки до папки Debug що створилася після компіляції програми, а також прописуємо їх в коді самої програми (див. додаток).

Приклад виконання програми показаний на рис. 2.3.

Рис. 2. 3

Код програми:

. include «8535def. inc»

. def Temp1=R16

. def M1=R17

. def M2=R18

. def M3=R19

. def M4=R20

. def Delay1=R21

. def Delay2=R22

. def Delay3=R23

. org 0

rjmp Reset

rjmp INT0

rjmp INT1

; Опис переривань:

INT0: rcall Record

INT1: rcall Clear

reti

; Налаштування портів вводувиводу:

RESET: ldi Temp1,0

out DDRA, Temp1

out DDRB, Temp1

ldi Temp1,0b00001111

out DDRC, Temp1

ldi Temp1,0b11111111

out DDRD, Temp1

ldi Temp1,0b11000000

out GIMSK, Temp1

ldi Temp1, low (RAMEND)

out SPL, Temp1

ldi Temp1, high (RAMEND)

out SPH, Temp1

ldi M1,1

ldi M2,2

ldi M3,3

ldi M4,4

sei

; Головний код програми:

MAIN: clr Temp1

out PORTD, Temp1

rcall Check

rjmp MAIN

; Підпрограма перевірки коду:

Check: rcall Ready

cp Temp1, M1

brne Error

ER1: rcall Ready

cp Temp1, M1

brne ET1

rjmp ER1

ET1: cp Temp1, M2

brne Error

ER2: rcall Ready

cp Temp1, M2

brne ET2

rjmp ER2

ET2: cp Temp1, M3

brne Error

ER3: rcall Ready

cp Temp1, M3

brne ET3

rjmp ER3

ET3: cp Temp1, M4

brne Error

rcall Show

ret

; Реалізація затримки:

Delay: ldi Delay1,0×20

ldi Delay2,0xBF

ldi Delay3,0×02

LOOP: subi Delay1,1

sbci Delay2,1

sbci Delay2,1

brcc LOOP

ret

; Підпрограма якщо код «ВІРНИЙ»:

Show: in Temp1, PortA

and Temp1,0b00001111

cpi Temp1,1

breq GO1

cpi Temp1,2

breq GO2

cpi Temp1,3

breq GO3

cpi Temp1,4

breq GO4

rcall Delay

ret

; Підпрограма якщо код «НЕ ВІРНИЙ»:

ERROR: ldi Temp1,8

out PORTD, Temp1

rcall Delay

rjmp MAIN

; Мітки для передачі числа на вхід LPT

GO1: ldi Temp1, 0b00100000

out PortD, M1

out PortC, Temp1

rjmp Show

GO2: ldi Temp1, 0b00110000

out PortD, M2

out PortC, Temp1

rjmp Show

GO3: ldi Temp1, 0b01000000

out PortD, M3

out PortC, Temp1

rjmp Show

GO4: ldi Temp1, 0b00000000

out PortD, M4

out PortC, Temp1

rjmp Show

; Підпрограма зчитування клавіш:

Ready: sbic PINA, 0

rjmp ROU11

sbic PINA, 1

rjmp ROU21

sbic PINA, 2

rjmp ROU31

sbic PINA, 3

rjmp ROU41

sbic PINA, 4

rjmp ROU51

sbic PINA, 5

rjmp ROU61

sbic PINA, 6

rjmp ROU71

sbic PINA, 7

rjmp ROU81

sbic PINB, 1

rjmp ROU91

sbic PINB, 2

rjmp ROU01

rjmp Ready

ROU11: ldi Temp1,1

ret

ROU21: ldi Temp1,2

ret

ROU31: ldi Temp1,3

ret

ROU41: ldi Temp1,4

ret

ROU51: ldi Temp1,5

ret

ROU61: ldi Temp1,6

ret

ROU71: ldi Temp1,7

ret

ROU81: ldi Temp1,8

ret

ROU91: ldi Temp1,9

ret

ROU01: ldi Temp1,0

Ret

; Підпрограма переривання INT0, за допомогою якої змінюється стандартний час:

Record: rcall Ready

mov M1, Temp1

EW1: rcall Ready

cp Temp1, M1

brne EY1

rjmp EW1

EY1: mov M2, Temp1

EW2: rcall Ready

cp Temp1, M1

brne EY2

rjmp EW2

EY2: mov M3, Temp1

EW3: rcall Ready

cp Temp1, M2

brne EY3

rjmp EW3

EY3: mov M4, Temp1

ret

; Підпрограма переривання INT1, скидання перевірки часу на початок:

Clear: clr Temp1

out PORTD, Temp1

rjmp MAIN

#include < iostream. h>

#include < conio. h>

#include < stdlib. h>

#include < windows. h>

#include «h. h»

BOOL SetNewTime (WORD hour, WORD minutes);

int GetDigit (int num);

int GetDigit (int num){

int Adress = 890;

Out32(Adress, num);

Adress = 888;

return Inp32(Adress);

}

BOOL SetNewTime (WORD hour, WORD minutes)

{

SYSTEMTIME st;

GetSystemTime (& st); // получаем текущее время

if (st. wMonth>3 & & st. wMonth<11){

st. wHour = hour-3; // устанавливаем час

}

else{

st. wHour = hour-2; // устанавливаем час

}

st. wMinute = minutes; // и минуты

if (!SetSystemTime (& st)) // устанавливаем системное время

return FALSE;

return TRUE;

}

void main ()

{

int Address=889;

WORD hours, h_h, h_l, minutes, m_h, m_l;

hours=h_h=h_l=minutes=m_h=m_l=0;

cout< <"This program changes system time"< <endl;

cout< <"Connect device to LPT"< <endl;

cout< <"To exit press any key. «<<endl;

cout< <" «< <endl;

while (!kbhit ())

{

if (h_h≠0 & & h_l≠0 & & m_h≠0 & & m_l≠0)

return;

switch (Inp32(Address)){

case 2: {h_l = GetDigit (2);

break; }

case 3: {m_h = GetDigit (3);

break; }

case 4: {m_l = GetDigit (4);

break; }

case 'e': {return; break; }

default: {h_h = GetDigit (1);

break; }

}

}

hours = h_h*10 +h_l;

minutes = m_h*10 + m_l;

SetNewTime (hours, minutes);

cout < < «System time is changed!"< <endl;

getch ();

}

ВИСНОВКИ

Під час виконання даної курсової роботи набув досвіду роботи з портами вводу-виводу ПЕОМ, в даному випадку з LPT портом. Розроблена програма, яка реалізує контроль передачі даних з ОМК до ПК через паралельний порт LPT.

Стало зрозуміло, що LPT порт можна використовувати не тільки для підключення принтерів, сканерів та зовнішніх пристроїв зберігання даних, але й при правильній та продуманій реалізації ПЗ, спектр використання цього порта значно розширюється.

ПоказатьСвернуть
Заполнить форму текущей работой