Thursday, June 14, 2012

პარალელური პორტი (LPT პორტი)


პარალელური პორტი (LPT პორტი)
პარალელური პორტი განკუთვნილია კომპიუტერიდან ინფორმაციის გამოსაყვანად, ინფორმაციის კომპიუტერში შესაყვანად და პერიფერიული მოწყობილობების (პრინტერების, სკანერების და ა.შ.) სამართავად.
კომპიუტერში შესაძლებელია 3 პარალელური პორტის ჩართვა. Windows აღნიშნავს მათ როგორც LPT1, LPT2, LPT3.
თვითოეული პორტი შეიცავს სამ რეგისტრს – ესენია: ინფორმაციის გამოყვანა–შეყვანის რეგისტრი (მონაცემთა რეგისტრი), პერიფერიული მოწყობილობებიდან გამოსული სამართავი სიგნალების ( მაგ.: პრიტრიდან -”ქაღალდი გათავდა”) კომპიუტერში შეყვანის რეგისტრი (სტატუსის რეგისტრი), პერიფერიული მოწყობილობების სამართავი სიგნალების (მაგ.: “მონაცემები გადაცემულია”) კომპიუტერიდან გამოყვანის რეგისტრი (მართვის რეგისტრი). კომპიუტერის სამისამართო სივრცეში მათ მიეკუთვნებათ კონკრეტული მისამართები. მონაცემთა რეგისტრის მისამართს ეწოდება საბაზო მისამართი. საბაზო მისამართებია: &H378 (LPT1), &H278 (LPT2), &H3BC (LPT3). საბაზო+1 მისამართი მიეკუთვნება სტატუსის რეგისტრს, საბაზო+2 მისამართი მიეკუთვნება მართვის რეგისტრს.
პორტთან მიერთებული 25 კონტაქტიანი საკონტაქტო შემაერთებელი (connector). ნახაზზე მოცემულია კონტაქტების შეერთების სქემა. კონტაქტები 18 – 25 საერთოა (მიერთებულია კომპიუტერის კორპუსთან). სიგნალების ძაბვები იღებენ მნიშვნელობებს: 0 ვოლტი ან +5 ვოლტი . მონაცემთა რეგისტრის გამომყვანებზე მიეწოდება +5 ვოლტი, თუ შესაბამის თანრიგში ჩაწერილია ლოგიკური “1″. წინააღმდეგ შემთხვევაში (ანუ, თუ შესაბამის თანრიგში ჩაწერილია ლოგიკური “0″), გამომყვანზე ძაბვა შეადგენს 0 ვოლტს. ასეთ შემთხვევეში ამბობენ, რომ მონაცემთა რეგისტრის თანრიგები არ არის ინვერტირებული, ლოგიკურ ერთიანს შეესაბამება ძაბვის მაღალი მნიშვნელობა, ლოგიკურ ნულს – დაბალი. იგივეს ვერ ვიტყვით დანარჩენ რეგისტრებზე: როგორც სტატუსის რეგისტრის, ისე მართვის რეგისტრის ცალკეული თანრიგები ინვერტირებულია.
Pin No (DB25)
Signal name
Direction
Register – bit
Inverted
1
nStrobe
Out
Control-0
Yes
2
Data0
In/Out
Data-0
No
3
Data1
In/Out
Data-1
No
4
Data2
In/Out
Data-2
No
5
Data3
In/Out
Data-3
No
6
Data4
In/Out
Data-4
No
7
Data5
In/Out
Data-5
No
8
Data6
In/Out
Data-6
No
9
Data7
In/Out
Data-7
No
10
nAck
In
Status-6
No
11
Busy
In
Status-7
Yes
12
Paper-Out
In
Status-5
No
13
Select
In
Status-4
No
14
Linefeed
Out
Control-1
Yes
15
nError
In
Status-3
No
16
nInitialize
Out
Control-2
No
17
nSelect-Printer
Out
Control-3
Yes
18-25
Ground
-
-
-
ინფორმაცია ცალკეული ბიტების ინვერტულობის შესახებ განთავსებულია ცხრილის გრაფაში “Inverted”. გრაფაში “Pin No” მითითებულია 25 კონტაქტიანი კონტაქტური შემაერთებლის (DB25) გამომყვანის ნომერი, გრაფაში “Signal Name” – სიგნალის სახელწოდება, გრაფაში “Direction” სიგნალის გადაცემის მიმართულება, ხოლო გრაფაში “Register-bit” – რეგისტრის სახელი და თანრიგის (ბიტის) ნომერი. როგორც ცხრილიდან ჩანს, მონაცემთა რეგისტრი ორმხრივად არის მიმართული – მისი თანრიგები Data-0″ – “Data-7″ შეიძლება გამოყენებულ იქნას როგორც ინფორმაციის გამოსაყვანად, ისე კომპიუტერში შესაყვანად. ამ შესაძლებლობის რეალიზაციისათვის საჭიროა პორტი შესაბამისად დაკონფიგურირდეს, რისთვისაც კომპიუტერის გადატვირთვის მომენტში უნდა შევიდეთ BIOS -ის მენიუში, მოვძენოთ პუნქტი INTEGRATED PERIPHERALS, ავირჩიოთ PARALLEL PORT MODE: და დავაყენოთ პორტის რეჟიმი EPP. თუ თქვენს კომპიუტერს არ აქვს რეჟიმი EPP, მაშინ პორტის მონაცემთა რეგისტრი იმუშავებს მხოლოდ ინფორმაციის გამოყვანის რეჟიმში. ამ შემთხვევაში, ინფორმაციის შეყვანა კომპიუტერში შესაძლებელი იქნება მხოლოდ სტატუს რეგისტრის საშუალებით.
Windows არ გააჩნია პორტის ცალკეულ რეგისტრებთან მიმართვის საშუალება. შესაძლებელია, მხოლოდ, ასეთი ტიპის ბრძანების განხორციელება – “გაიგზავნოს სიტყვა ‘abc’ პორტში LPT1″.
სამაგიეროდ, ნებიმიერი რეგისტრის ნებისმიერი თანრიგის (ბიტის) ჩაწერა–წაკითხვა შესაძლებელია “inpout32.dll” დინამიური ბიბლიოთეკის ფუნქციების საშუალებით. “inpout32.dll” ბიბლიოთეკა თავისუფლად ვრცელდება (უფასოა) და შეიძლება ჩამოტვირთულ იქნას ინტერნეტიდან. ჩამოტვირთვის შემდეგ ფაილი “inpout32.dll” თავსდება Windows\System32 დირექტორიაში და მზად არის გამოსაყენებლად. იგი მოიცავს ორ INP და OUT ფუნქციებს, შესაბამისად ინფორმაციის შეყვანისა და გამოყვანისათვის.

Visual Basic კოდი ფუნქციების გამოცხადებისათვის:

Private Declare Function Inp Lib “inpout32.dll” _
Alias “Inp32″ (ByVal PortAddress As Integer) As Integer

Private Declare Sub Out Lib “inpout32.dll” _
Alias
“Out32″ (ByVal PortAddress As Integer, ByVal Value As Integer)
VB კოდი LPT1 პორტში რაიმე რიცხვის (<256) გადასაგზავნად:
Private Sub
Command1_Click()
Out &H378, 15          
‘გაიგზავნება რიცხვი 15
End Sub



თუ ნახაზზე მოყვანილ სქემას ავაწყობთ და ზემოთ მოყვანილ პროგრამას შევასრულებთ, მაშინ აინთება ზედა ოთხი შუქდიოდი.
ამ პროგრამის შესრულება კი გამოიწვევს შუქდიოდების ჩაქრობას.
Private Sub
Command1_Click()
Out &H378, 0             გაიგზავნება რიცხვი 0
End Sub
ყველა შუქდიოდის ასანთებად, ცხადია, უნდა შერულდეს პროგრამა:
Private Sub Command1_Click()
Out &H378, 255         
‘გაიგზავნება რიცხვი 255
End Sub
VB კოდი LPT1 პორტიდან სგნალის შემოსაყვანად:
მონაცემთა რეგისტრიდან სიგნალების შემოყვანისათვის გამოიყენება არა საბაზო მისამართი &H378 , არამედ მისამართი &H37F (ანუ, საბაზო+7).
Private Sub Command1_Click()
Text1.Text = Inp(&H37F)
End Sub

ზემოთ მოყვანილი პროგრამის შესრულებით Text1 ტექსტბოქსში აისახება მონაცემთა რეგისტრის გამომყვანებზე მიწოდებული ბაიტის რიცხვითი მნიშვნელობა.


თუ ნახაზზე მოყვანილ სქემაზე ყველა ჩამრთველს ჩავრთავთ, მაშინ Text1 ტექსტბოქსში აისახება “0″, თუ ყველა ჩამრთველს ამოვრთავთ – ტექსტბოქსში აისახება “255″.
რა თქმა უნდა, ინფორმაცია შეიძლება შემოვიყვანოთ სტატუს რეგისტრიდანაც ოღონდ უნდა გავითვალისწინოთ, რომ მისი მე–7 თანრიგი ინვერსულია:
Private Sub Command1_Click()
Text1.Text = Inp(&H379) AND &HF0
End Sub
მიაქციეთ ყურადღება, რომ სტატუს რეგისტრს 0–3 თანრიგების გამომყვანები უბრალოდ, არ აქვს. ამიტომ გვიწევს მათი მასკირება კონსტრუქციით Inp(&H379) AND &HF0. თუ ყველა ჩამრთველი ჩართულია, მაშინ Text1 ტექსტბოქსში აისახება “128″.
იმ კომპიუტერებისათვის, რომელთაც პარალელური პორტი არ გააჩნიათ, შეიძლება გამოყენებულ იქნას PCI-LPT პლატა, რომელიც კომპიუტერის PCI სლოტში შეიძლება ჩამონტაჟდეს. 

No comments:

Post a Comment