Реферат по предмету "Информатика, программирование"


Паралельний інтерфейс IEEE 1284 (інтерфейс Centronics)

Реферат на тему:


«Паралельний інтерфейс IEEE 1284 (інтерфейс Centronics)»


1. Загальні положення


1.1 Призначення інтерфейсу


В ПК традиційно використовується паралельний інтерфейс IEEE 1284 (більше відомий під назвою Centronics, названий в честь фірми яка першою розробила даний інтерфейс), реалізований LPT – портом. Основним призначенням інтерфейсу IEEE 1284 є підключення до комп’ютера периферійних пристроїв (ПП), здебільшого принтерів різноманітних типів [1]. Тому розподіл контактів рознімача, призначення сигналів, програмні засоби керування налаштовані саме на це використання.


1.2 Характеристика інтерфейсу


Інтерфейс Centronics є радіальним, асинхронним, паралельним інтерфейсом. Його використовують для підєднання ПП з невеликою швидкістю. Аналогічним можна вважати інтерфейс ИРПР-М, який використовували для спряження із ЕОМ друкуючих пристроїв [1]. Інтерфейс реалізує паралельне передавання 8-ми бітів (1 байта). Лінії інтерфейсу однонапрямлені і забезпечують передавання даних між одним передавачем (ПРД) і одним приймачем (ПРМ).


В LPT-порті використовуються логічні рівні ТТЛ, що обмежує допустиму довжину кабелю через невелику завадостійкість ТТЛ-інтерфейсу.


Максимальна довжина з’єднувального кабелю по стандарту -1.8 м. Швидкість передачі даних при стандартних налаштуваннях 100–150 Кбайт/с.


1.3 Лінії інтерфейсу


Призначення 25-контактого рознімача IEEE 1284-A (рис. 1) приведено в таблиці 1 [2].




Рис. 1. Рознімач IEEE 1284-ADB-25 (DB (DataBus) – шина даних, 25 – кількість контактів)


Таблиця 1. Призначення контактів рознімача IEEE 1284-A




















































































































Контакт DB-25 (LPT) Напрям передачі

Регістр,


№ біта в регістрі


Сигнал Призначення
1 CR.0 Strobe# Спроб даних. Дані фіксуються по низькому рівню сигналу.
2 DR.0 D0 Дані 0
3 DR.1 D1 Дані 1
4 DR.2 D2 Дані 2
5 DR.3 D3 Дані 3
6 DR.4 D4 Дані 4
7 DR.5 D5 Дані 5
8 DR.6 D6 Дані 6
9 DR.7 D7 Дані 7
10 SR.6 Ack# Імпульс підтвердження прийому байта даних.
11 SR.7 Busy Зайнятість. Прийом даних можливий тільки при низькому рівні сигналу.
12 SR.5 PE Paper End. Низький рівень сигналізує про закінчення паперу.
13 SR.4 Select Сигналізує про включення принтера
14 CR.1 AutoLF# Автоматичний перевід каретки
15 SR.3 Error# Помилка
16 CR.2 Init# Ініціалізація пристрою
17 CR.3 SelectIn# Вибір принтера (низьким рівнем)
18–25 - - GND Заземлення (нульовий потенціал 0V)


Сигнали IEEE 1284 мають таке призначення:


←- вхідний сигнал від периферійного пристрою до ПК;


→- вихідний сигналвід ПК до периферійного пристрою;


1.4 Пам’ять інтерфейсу


LPT-порт містить три 8-бітних регістра, розміщених по сусідніх адресах в просторі пам'яті вводу-виводу, починаючи з базової адреси порту BASE. В комп'ютері може використовуватись декілька LPT-портів, що позначаються LPT1, LPT2 і т.д., відповідно адреси в них будуть різними. В табл. 2 показано адреси для 3-х LPT-портів.


Таблиця 2. Адреси LPT-портів


















Базова адреса (BASE)


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


(DataRegister)


Регістр стану


(StatusRegister)


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


(ControlRegister)


3BCh 3BDh 3BEh
378h 379h 37Ah
278h 279h 27Ah

Регістр даних (DataRegister, DR), 8-бітний регістр, дані, що записуються в цей регістр, виводяться на вихідні лінії (DR. [0:7]), адреса = BASE.


Регістр стану (StatusRegister, SR) призначений тільки для зчитування. Регістр відображає 5-бітовий (SR. [3:7]) порт вводу сигналів стану, адреса = BASE+1.


Регістр управління (ControlRegister, CR), 4-бітний (CR. [0:3]) порт виводу управляючих сигналів, адреса = BASE+2.


З’єднання регістрів пам’яті із рознімачем DB-25 показано на рис. 2.




Рис. 2. З’єднання регістрів пам’яті з рознімачем DB-25


1.5 Робота інтерфейсу


Формування і прийом сигналів проводиться шляхом запису і читання виділених для конкретного порту регістрів за певними адресами. При вмиканні обладнання відбувається процедура послідовність погодження режиму передачі даних (рис. 3).


Послідовність погодження режиму передачі


Послідовність погодження режиму передачі складається з наступних кроків:


1. ПК виставляє так званий байт розширення на лінії даних.


2. ПК виставляє високий рівень сигналу SelectIn# і низький – AutoLF#, що означає початок послідовності погодження.


3. ПП відповідає встановленням низького рівня сигналу Ack# і низького – Error#, PE і Select.


4. ПК встановлює низький рівень сигналу Strobe# для запису байту розширення в ПП.


5. ПК встановлює високий рівень сигналу Strobe# і AutoLF#.


6. ПП відповідає встановленням в низький рівень PE і Error#, якщо ПП має зворотній канал передачі даних. Якщо режим, що запитується, підтримується пристроєм, то на лінії Select встановлюється високий рівень, а якщо не підтримується – низький.


7. ПП встановлює високий рівень на лінії Ack# для вказівки на завершення погодження, після чого контролер встановлює потрібний режим роботи.



Рис. 3. Послідовність погодження режимів передачі IEEE 1284


Послідовність побудована так, що старі пристрої, які не розраховані на застосування IEEE 1284, на неї не дадуть відповіді і контролер ПК залишиться в стандартному режимі. Під час фази погодження контролер ПК встановлює на лінії даних байт розширення, тим самим даючи запит на перевід інтерфейсу в потрібний режим [3] (табл. 3).


Таблиця 3. Біти в байті розширення










































Бит Опис Допустимі комбінації бітів [7:0]
7 Зарезервовано 1000 0000
6 Запит режиму EPP 0100 0000
5 Запит режиму ECP з RLE 0011 0000
4 Запит режиму ECP без RLE 0001 0000
3 Зарезервовано 0000 1000
2

Запит ідентифікатора пристрою з відповіддю в режимі:


півбайтовий


байтовий


ECP без RLE


ECP з RLE


0000 0100


0000 0101


0001 0100


0011 0100


1 Зарезервовано 0000 0010
0 Запит півбайтового режиму 0000 0001
none Запит байтового режиму 0000 0000

Передача даних


Після узгодження режиму передачі можна здійснювати передачу даних. На рис. 4 показано передачу даних по протоколу Centronics.



Рис. 4. Передача даних по протоколу Centronics


1.6 Програмна частина інтерфейсу


Програмувати розробку інтерфейсу можна на нижчому рівні (наприклад із використанням мови Assembler), на середньому рівні та на мовах високого рівня (наприклад в середовищі Delphi).


Для програмування LPT портів в середовищі Delphi використовується модуль LPTIO.pas в якому описана вся взаємодія з драйвером LPT-порту lptwdmio.sys (Увага!!! Драйвер повинен знаходитись в папці c:\WINDOWS\system32\drivers\ або в тій же папці що і програма) [4].


Для роботи з LPT-портом оголошуємо об’єкт:


Lpt: TLptPortConnection;


В процедурі створення форми створюємо об’єкт Lpt


procedure TForm1. FormCreate (Sender: TObject);


var


msg: AnsiString;


begin


Lpt:= TLptPortConnection. Create;


В тій же процедурі занесемо в регістр даних і у регістр управління заносимо 0 і 3 відповідно, що в результаті приведе до виключення всіх світлодіодних індикаторів.


Lpt. WritePort (GetCurrentPort, 0,0);


Lpt. WritePort (GetCurrentPort, 2,3);


Регістри є 8-бітні тому максимально можливе десяткове число, яке може бути записане в них, це 255 або 11111111 в двійковому форматі. Для запису використовується функція WritePort,де в параметрах вказується порт, в який записуються дані, його можна взнати використавши процедуруGetCurrentPort. Номера регістру: 0 – регістр даних, 1 – регістр стану, 2 – регістр управління. Число яке записується від 0 до 255.


Для зчитування значень з регістру використовується функція ReadPort в параметрах якої вказується поточний порт і номер регістру (аналогічно з функцією запису).


Lpt. ReadPort (GetCurrentPort, 0)


Зчитується все значення регістру і тому, для того, щоб отримати значення певної комірки регістру, над зчитаним значенням потрібно виконати наступні дії:


var


d: boolean;


begin


d:= true;


d:= d and (1 = (1 and Lpt. ReadPort((GetCurrentPort), 0)));


Над зчитаними даними і степенем двійки, відповідно до номера регістра, значення якого потрібно взнати, виконується логічна операція and (логічне множення). Потім прирівнюємо до того ж числа в результаті виходе логічне значення true – якщо значення рівні і false – якщо ні. Значення булевої змінної можна використати наприклад для перемикання прапорця чи зміни кольору фігури, яка символізує діод. Повний текст програми яка зчитує і записує значення в LPT-порт дивіться в додатку.


1.7 Перспективи інтерфейсу
IEEE
1284


Зараз практично всі сучасні системні плати не мають LPT-порту. Але на старіших системних платах цей порт досить поширений. Це пов’язане з вичерпанням портом свого ресурсу як такого. На заміно йому прийшов більш зручний і функціональний USB-порт. [5]. Порівняльні характеристики інтерфейсу IEEE 1224 та USB приведено в табл. 4


інтерфейс аналог асинхронний передача


Таблиця 4. Порівняльні характеристики інтерфейсу IEEE 1224 та USB
















IEEE 1284 USB 2.0 USB 3.0
Швидкість 1,2 Мбіт/c

Low-speed: 10– 1500 Кбіт/c


Full-speed: 0,5 – 12 Мбіт/с


Hi-speed: 25 – 480 Мбіт/с


4,8 Гбит/с
Довжина лінії 3 м 3–5 м 3–5 м


Додаток


Код програми написаний на мові Delphi для зчитування і запису даних в LPT-порт.


unit Unit1;


interface


uses


Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,


Dialogs, LPTIO, StdCtrls, ExtCtrls;


type


TForm1 = class(TForm)


Shape1: TShape;


Shape2: TShape;


Shape3: TShape;


Shape4: TShape;


Shape5: TShape;


Shape6: TShape;


Shape7: TShape;


Shape8: TShape;


Shape9: TShape;


Shape10: TShape;


Shape11: TShape;


Shape12: TShape;


Shape13: TShape;


Shape14: TShape;


Shape15: TShape;


Shape16: TShape;


Shape17: TShape;


Label1: TLabel;


Label2: TLabel;


Label3: TLabel;


Label4: TLabel;


Label5: TLabel;


Label6: TLabel;


Label7: TLabel;


Label8: TLabel;


Label9: TLabel;


Label10: TLabel;


Label11: TLabel;


Label12: TLabel;


Label13: TLabel;


Label14: TLabel;


Label15: TLabel;


Label16: TLabel;


Label17: TLabel;


Shape18: TShape;


Shape19: TShape;


Shape20: TShape;


Shape21: TShape;


Shape22: TShape;


Shape23: TShape;


Label19: TLabel;


Label20: TLabel;


Label21: TLabel;


Label22: TLabel;


Label23: TLabel;


Label24: TLabel;


Label25: TLabel;


Label26: TLabel;


Label27: TLabel;


Label28: TLabel;


Label29: TLabel;


Label30: TLabel;


Label31: TLabel;


Label32: TLabel;


Label33: TLabel;


Label34: TLabel;


Label35: TLabel;


Button1: TButton;


Button2: TButton;


Button3: TButton;


Button4: TButton;


Button5: TButton;


Button6: TButton;


Button7: TButton;


Button8: TButton;


Button9: TButton;


Button14: TButton;


Button16: TButton;


Button17: TButton;


Shape24: TShape;


Shape25: TShape;


Shape26: TShape;


Label18: TLabel;


Label36: TLabel;


Label37: TLabel;


ComboBox1: TComboBox;


Timer1: TTimer;


CheckBox1: TCheckBox;


CheckBox2: TCheckBox;


CheckBox3: TCheckBox;


CheckBox4: TCheckBox;


CheckBox5: TCheckBox;


CheckBox6: TCheckBox;


CheckBox7: TCheckBox;


CheckBox8: TCheckBox;


CheckBox9: TCheckBox;


CheckBox10: TCheckBox;


CheckBox11: TCheckBox;


CheckBox12: TCheckBox;


CheckBox13: TCheckBox;


CheckBox14: TCheckBox;


CheckBox15: TCheckBox;


CheckBox16: TCheckBox;


CheckBox17: TCheckBox;


Edit1: TEdit;


procedure Button1Click (Sender: TObject);


procedure Button2Click (Sender: TObject);


procedure Button3Click (Sender: TObject);


procedure Button4Click (Sender: TObject);


procedure Button5Click (Sender: TObject);


procedure Button6Click (Sender: TObject);


procedure Button7Click (Sender: TObject);


procedure Button8Click (Sender: TObject);


procedure Button9Click (Sender: TObject);


procedure Button14Click (Sender: TObject);


procedure Button16Click (Sender: TObject);


procedure Button17Click (Sender: TObject);


procedure FormCreate (Sender: TObject);


procedure FormDestroy (Sender: TObject);


procedure Timer1Timer (Sender: TObject);


private


{Private declarations}


Lpt: TLptPortConnection;


public


{Public declarations}


function GetCurrentPort: byte;


function Pin2: boolean;


function Pin3: boolean;


function Pin4: boolean;


function Pin5: boolean;


function Pin6: boolean;


function Pin7: boolean;


function Pin8: boolean;


function Pin9: boolean;


function Pin1: boolean;


function Pin14: boolean;


function Pin16: boolean;


function Pin17: boolean;


function Pin10: boolean;


function Pin11: boolean;


function Pin12: boolean;


function Pin13: boolean;


function Pin15: boolean;


procedure ButtonPin2;


procedure ButtonPin3;


procedure ButtonPin4;


procedure ButtonPin5;


procedure ButtonPin6;


procedure ButtonPin7;


procedure ButtonPin8;


procedure ButtonPin9;


procedure ButtonPin1;


procedure ButtonPin14;


procedure ButtonPin16;


procedure ButtonPin17;


end;


var


Form1: TForm1;


implementation


{$R *.dfm}


procedure TForm1. FormCreate (Sender: TObject);


var


msg: AnsiString;


begin


Lpt:= TLptPortConnection. Create;


if not Lpt. Ready then


begin


msg:= 'Помилка при створенні обєкта Lpt, драйвер ERROR, код = ' + Application. MessageBox (PChar(msg), 'ERROR', MB_OK);


Application. Terminate;


end;


ComboBox1. Items. Clear;


if Lpt. IsPortPresent(LPT1) then


ComboBox1. Items. Add ('$3BC');


if Lpt. IsPortPresent(LPT2) then


ComboBox1. Items. Add ('$378');


if Lpt. IsPortPresent(LPT3) then


ComboBox1. Items. Add ('$278');


if 0=ComboBox1. Items. Count then


begin


ComboBox1. Items. Add ('LPT ïîðò³â íå çíàéäåíî');


ComboBox1. ItemIndex:= 0;


end


else


ComboBox1. ItemIndex:= 0;


Lpt. WritePort (GetCurrentPort, 0,0);


Lpt. WritePort (GetCurrentPort, 2,3);


end;


procedure TForm1. FormDestroy (Sender: TObject);


begin


Lpt. Destroy;


Timer1. Enabled:= false;


end;


function TForm1. GetCurrentPort:byte;


begin


if '$3BC' = ComboBox1. Text then


GetCurrentPort:=LPT1


else


if '$378' = ComboBox1. Text then


GetCurrentPort:=LPT2


else


GetCurrentPort:=LPT3;


end;


procedure TForm1. Timer1Timer (Sender: TObject);


begin


CheckBox1. Checked:= Pin1;


CheckBox2. Checked:= Pin2;


CheckBox3. Checked:= Pin3;


CheckBox4. Checked:= Pin4;


CheckBox5. Checked:= Pin5;


CheckBox6. Checked:= Pin6;


CheckBox7. Checked:= Pin7;


CheckBox8. Checked:= Pin8;


CheckBox9. Checked:= Pin9;


CheckBox10. Checked:= Pin10;


CheckBox11. Checked:= Pin11;


CheckBox12. Checked:= Pin12;


CheckBox13. Checked:= Pin13;


CheckBox14. Checked:= Pin14;


CheckBox15. Checked:= Pin15;


CheckBox16. Checked:= Pin16;


CheckBox17. Checked:= Pin17;


if Pin1=true then


Shape1. Brush. Color:=clRed


else


Shape1. Brush. Color:=clWhite;


if Pin2=true then


Shape2. Brush. Color:=clRed


else


Shape2. Brush. Color:=clWhite;


if Pin3=true then


Shape3. Brush. Color:=clRed


else


Shape3. Brush. Color:=clWhite;


if Pin4=true then


Shape4. Brush. Color:=clRed


else


Shape4. Brush. Color:=clWhite;


if Pin5=true then


Shape5. Brush. Color:=clRed


else


Shape5. Brush. Color:=clWhite;


if Pin6=true then


Shape6. Brush. Color:=clRed


else


Shape6. Brush. Color:=clWhite;


if Pin7=true then


Shape7. Brush. Color:=clRed


else


Shape7. Brush. Color:=clWhite;


if Pin8=true then


Shape8. Brush. Color:=clRed


else


Shape8. Brush. Color:=clWhite;


if Pin9=true then


Shape9. Brush. Color:=clRed


else


Shape9. Brush. Color:=clWhite;


if Pin10=true then


Shape10. Brush. Color:=clRed


else


Shape10. Brush. Color:=clWhite;


if Pin11=true then


Shape11. Brush. Color:=clRed


else


Shape11. Brush. Color:=clWhite;


if Pin12=true then


Shape12. Brush. Color:=clRed


else


Shape12. Brush. Color:=clWhite;


if Pin13=true then


Shape13. Brush. Color:=clRed


else


Shape13. Brush. Color:=clWhite;


if Pin14=true then


Shape14. Brush. Color:=clRed


else


Shape14. Brush. Color:=clWhite;


if Pin15=true then


Shape15. Brush. Color:=clRed


else


Shape15. Brush. Color:=clWhite;


if Pin16=true then


Shape16. Brush. Color:=clRed


else


Shape16. Brush. Color:=clWhite;


if Pin17=true then


Shape17. Brush. Color:=clRed


else


Shape17. Brush. Color:=clWhite;


end;


procedure TForm1. Button1Click (Sender: TObject);


begin


ButtonPin1;


end;


procedure TForm1. Button2Click (Sender: TObject);


begin


ButtonPin2;


end;


procedure TForm1. Button3Click (Sender: TObject);


begin


ButtonPin3;


end;


procedure TForm1. Button4Click (Sender: TObject);


begin


ButtonPin4;


end;


procedure TForm1. Button5Click (Sender: TObject);


begin


ButtonPin5;


end;


procedure TForm1. Button6Click (Sender: TObject);


begin


ButtonPin6;


end;


procedure TForm1. Button7Click (Sender: TObject);


begin


ButtonPin7;


end;


procedure TForm1. Button8Click (Sender: TObject);


begin


ButtonPin8;


end;


procedure TForm1. Button9Click (Sender: TObject);


begin


ButtonPin9;


end;


procedure TForm1. Button14Click (Sender: TObject);


begin


ButtonPin14;


end;


procedure TForm1. Button16Click (Sender: TObject);


begin


ButtonPin16;


end;


procedure TForm1. Button17Click (Sender: TObject);


begin


ButtonPin17;


end;


procedure TForm1. ButtonPin2;


begin


Lpt. WritePort (GetCurrentPort, 0, (1 xor Lpt. ReadPort((GetCurrentPort), 0)));


end;


procedure TForm1. ButtonPin3;


begin


Lpt. WritePort (GetCurrentPort, 0, (2 xor Lpt. ReadPort((GetCurrentPort), 0)));


end;


procedure TForm1. ButtonPin4;


begin


Lpt. WritePort (GetCurrentPort, 0, (4 xor Lpt. ReadPort((GetCurrentPort), 0)));


end;


procedure TForm1. ButtonPin5;


begin


Lpt. WritePort (GetCurrentPort, 0, (8 xor Lpt. ReadPort((GetCurrentPort), 0)));


end;


procedure TForm1. ButtonPin6;


begin


Lpt. WritePort (GetCurrentPort, 0, (16 xor Lpt. ReadPort((GetCurrentPort), 0)));


end;


procedure TForm1. ButtonPin7;


begin


Lpt. WritePort (GetCurrentPort, 0, (32 xor Lpt. ReadPort((GetCurrentPort), 0)));


end;


procedure TForm1. ButtonPin8;


begin


Lpt. WritePort (GetCurrentPort, 0, (64 xor Lpt. ReadPort((GetCurrentPort), 0)));


end;


procedure TForm1. ButtonPin9;


begin


Lpt. WritePort (GetCurrentPort, 0, (128 xor Lpt. ReadPort((GetCurrentPort), 0)));


end;


procedure TForm1. ButtonPin1;


begin


Lpt. WritePort (GetCurrentPort, 2, (1 xor Lpt. ReadPort((GetCurrentPort), 2)));


end;


procedure TForm1. ButtonPin14;


begin


Lpt. WritePort (GetCurrentPort, 2, (2 xor Lpt. ReadPort((GetCurrentPort), 2)));


end;


procedure TForm1. ButtonPin16;


begin


Lpt. WritePort (GetCurrentPort, 2, (4 xor Lpt. ReadPort((GetCurrentPort), 2)));


end;


procedure TForm1. ButtonPin17;


begin


Lpt. WritePort (GetCurrentPort, 2, (8 xor Lpt. ReadPort((GetCurrentPort), 2)));


end;


function TForm1. Pin2: boolean;


var


d: boolean;


begin


d:= true;


d:= d and (1 = (1 and Lpt. ReadPort((GetCurrentPort), 0)));


Pin2:= d;


end;


function TForm1. Pin3: boolean;


var


d: boolean;


begin


d:= true;


d:= d and (2 = (2 and Lpt. ReadPort (GetCurrentPort, 0)));


Pin3:= d;


end;


function TForm1. Pin4: boolean;


var


d: boolean;


begin


d:= true;


d:= d and (4 = (4 and Lpt. ReadPort (GetCurrentPort, 0)));


Pin4:= d;


end;


function TForm1. Pin5: boolean;


var


d: boolean;


begin


d:= true;


d:= d and (8 = (8 and Lpt. ReadPort (GetCurrentPort, 0)));


Pin5:= d;


end;


function TForm1. Pin6: boolean;


var


d: boolean;


begin


d:= true;


d:= d and (16 = (16 and Lpt. ReadPort (GetCurrentPort, 0)));


Pin6:= d;


end;


function TForm1. Pin7: boolean;


var


d: boolean;


begin


d:= true;


d:= d and (32 = (32 and Lpt. ReadPort (GetCurrentPort, 0)));


Pin7:= d;


end;


function TForm1. Pin8: boolean;


var


d: boolean;


begin


d:= true;


d:= d and (64 = (64 and Lpt. ReadPort (GetCurrentPort, 0)));


Pin8:= d;


end;


function TForm1. Pin9: boolean;


var


d: boolean;


begin


d:= true;


d:= d and (128 = (128 and Lpt. ReadPort (GetCurrentPort, 0)));


Pin9:= d;


end;


function TForm1. Pin1: boolean;


var


d: boolean;


begin


d:= true;


d:= d xor (STROBE = (STROBE and Lpt. ReadPort (GetCurrentPort, 2)));


Pin1:= d;


end;


function TForm1. Pin14: boolean;


var


d: boolean;


begin


d:= true;


d:= d xor (AUTOFEED = (AUTOFEED and Lpt. ReadPort (GetCurrentPort, 2)));


Pin14:= d;


end;


function TForm1. Pin16: boolean;


var


d: boolean;


begin


d:= true;


d:= d and (INIT = (INIT and Lpt. ReadPort (GetCurrentPort, 2)));


Pin16:= d;


end;


function TForm1. Pin17: boolean;


var


d: boolean;


begin


d:= true;


d:= d xor (SELECTIN = (SELECTIN and Lpt. ReadPort (GetCurrentPort, 2)));


Pin17:= d;


end;


function TForm1. Pin10: boolean;


var


d: boolean;


begin


d:= true;


d:= d and (ACK = (ACK and Lpt. ReadPort (GetCurrentPort, 1)));


Pin10:= d;


end;


function TForm1. Pin11: boolean;


var


d: boolean;


begin


d:= true;


d:= d xor (BUSY = (BUSY and Lpt. ReadPort (GetCurrentPort, 1)));


Pin11:= d;


end;


function TForm1. Pin12: boolean;


var


d: boolean;


begin


d:= true;


d:= d and (PAPEREND = (PAPEREND and Lpt. ReadPort (GetCurrentPort, 1)));


Pin12:= d;


end;


function TForm1. Pin13: boolean;


var


d: boolean;


begin


d:= true;


d:= d and (SELECT = (SELECT and Lpt. ReadPort (GetCurrentPort, 1)));


Pin13:= d;


end;


function TForm1. Pin15: boolean;


var


d: boolean;


begin


d:= true;


d:= d and (ERROR = (ERROR and Lpt. ReadPort (GetCurrentPort, 1)));


Pin15:= d;


end;end.


Додаток2


Код програми написаний на мові Delphi для виводу двійкового числа 10000000 на світлодіодні індикатори лабораторного макету із періодом зміни інформації в 1 секунду.


unit Unit1;


interface


uses


Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,


Dialogs, LPTIO, ExtCtrls, StdCtrls, Spin;


type


TForm1 = class(TForm)


Button1: TButton;


Timer1: TTimer;


SpinEdit1: TSpinEdit;


CheckBox1: TCheckBox;


Label1: TLabel;


Label2: TLabel;


procedure FormCreate (Sender: TObject);


procedure FormDestroy (Sender: TObject);


procedure Timer1Timer (Sender: TObject);


procedure Button1Click (Sender: TObject);


procedure SpinEdit1Change (Sender: TObject);


private


{Private declarations}


Lpt: TLptPortConnection;


public


{Public declarations}


function GetCurrentPort: byte;


end;


var


Form1: TForm1;


implementation


{$R *.dfm}


procedure TForm1. FormCreate (Sender: TObject);


var


msg: AnsiString;


begin


Lpt:= TLptPortConnection. Create;


if not Lpt. Ready then


begin {объект не готов – покажем код ошибки}


msg:= 'Ошибка при создании объекта Lpt, драйвер ERROR, код = ' + IntToStr (GetLastError());


Application. MessageBox (PChar(msg), 'ERROR', MB_OK);


Application. Terminate;


end;


Lpt. WritePort (GetCurrentPort, 0,0);


Lpt. WritePort (GetCurrentPort, 2,3);


end;


procedure TForm1. FormDestroy (Sender: TObject);


begin


Lpt. Destroy;


Timer1. Enabled:= false;


end;


function TForm1. GetCurrentPort:byte;


begin


if Lpt. IsPortPresent(LPT1) then


GetCurrentPort:=LPT1


else


if Lpt. IsPortPresent(LPT2) then


GetCurrentPort:=LPT2


else


if Lpt. IsPortPresent(LPT3) then


GetCurrentPort:=LPT3;


end;


procedure TForm1. Timer1Timer (Sender: TObject);


begin


Lpt. WritePort (GetCurrentPort, 0, (1 xor Lpt. ReadPort((GetCurrentPort), 0)));


if CheckBox1. Checked=false then


CheckBox1. Checked:=true


else


CheckBox1. Checked:=false;


end;


procedure TForm1. Button1Click (Sender: TObject);


begin


if Timer1. Enabled=false then


begin


Timer1. Enabled:=true;


Button1. Caption:='Stop';


end


else


begin


Timer1. Enabled:=false;


Button1. Caption:='Start';


end;


end;


procedure TForm1. SpinEdit1Change (Sender: TObject);


begin


Timer1. Interval:=SpinEdit1. Value;


end;


end.



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

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.