Paralel portra csatlakoztatott 8 ledbõl álló futófény készítése

A párhuzamos (paralel) port 25 lábbal rendelkezõ I/O interfész a számítógépben. A lábakon keresztül lehet rajta adatot küldeni valamint fogadni, ill. állapotokat lekérdezni. A port felépítését a következõ ábra szemlélteti:

 

A porthoz 3 db 8 bites regiszter tartozik, a felsõ ábrán ezek láthatók, továbbá 18-25. lábig földelés van.

Az LPT1 port címe 378h továbbiakban BÁZISCÍM, a regiszterek címzése ebbõl számolva:

DATA REGISTER = BÁZISCÍM+0
Regiszter bitjei: D7 D6 D5 D4 D3 D2 D1 D0
Lábak: 9 8 7 6 5 4 3 2

 

 

STATUS REGISTER = BÁZISCÍM+1
Regiszter bitjei: S7 S6 S5 S4 S3 S2 S1 S0
Lábak: 11 10 12 13 15 N N N



 

CONTROL REGISTER = BÁZISCÍM+2
Regiszter bitjei: C7 C6 C5 C4 C3 C2 C1 C0
Lábak: N N N IRQ 1517 16 14 1

 

 

 

A port mûködése a következõ. Az adott lábon van feszültség ha a hozzá tartozó regiszterbitben 1 az érték, különben nincs feszültség. Tehát a rajz szerint led akkor világít ha a 2 lábon van áram. Ehhez a kettes számrendszert kell ismerni, mert ugye a gép abban dolgozik.
Vagyis ha a portra a 01h = 00000001b számot kiírva a 2 es lábon lesz csak áram, a többin nem. :

decimális bináris hexadecimális
0 00000000 00
1 00000001 01
2 00000010 02
3 00000011 03
4 00000100 04
5 00000101 05
6 00000110 06
7 00000111 07
8 00001000 08
9 00001001 09
10 00001010 0A

 

 

 

 

 

 

 


A bináris számok nagyon jól mutatják, hogy melyik led fog égni a 8 led közül közül(ahol 1 van).
A gép indításakor (ha az lefutatta a BIOS teszteket), a porton minden DATA láb be lesz kapcsolva, vagyis a DATA regiszter tartalma 0xff. Feszültség mérõvel kimértem, hogy a 0 állpaotba kb. +0.5 V van 1 állapotban +2,5 V.

Portra írás:
(A programozási nyelvek magyarázatára külön nem térek ki, feltételezem azt, hogy azt már ismered. A megvalósítás természetesen függ a nyelvtõl.)

DOS:

DOS-ban a portra írás elég könnyû megoldani, ugyanis a DEBUG programnak vannak ilyen funkciói. Tehát a parancs kiadása után megkapjuk a promtját.
-
A ? segítségével lekérdezhetjük milyen utasítások közül választhatunk. Számunkra az I és az O lesz a megfelelõ értelem szerûen az I (input) az O (output). Tehát így írhatunk a portra
- o 378 01
ezzel a 2 es lábra kapcsoltunk áramot nyilván kikapcsolni a 00-val az összesre visszakapcsolni az ff -el lehet. A szóközök használatára ügyeljünk. Az i parancs hasonlóan mûködik de arra most nem lesz szükség.

Assembly:

Assemblyben az I/O mûveletek megvalósítására az IN, OUT utasítások szolgálnak. A kommunikációban az AL,AX regiszterek vesznek részt attól függõen ,hogy a kiírandó adat 8 vagy 16 bites. A port címzésére a DX regisztert használjuk.

IN       AL/AX,port    ;AL/AX <- egy byte/szó a port-ról
OUT    port,AL/AX    ;port <- egy byte/szó AL/AX-bõl

ahol szó = 2 közvetlen egymás melett lévõ byte

ennek ismeretében, a kód:
forrás futtatható

C:

C nyelven a portra(ról) függvények segítségével írhatunk(olvashatunk), de természetesen assembly betétekkel is megoldható. A függvények:

inportb(port,adat); byte beolvasása adott I/O portról
inport(port,adat); két byte (szó) beolvasása adott I/O portról
outportb(port,adat); byte írása adott I/O portra
outport(port,adat); két byte (szó) írása adott I/O portra

 

 

 

Két Cprogram:
szimplán villógó ledek forrás futtatható
kicsit nagyobb lélegzetvételû program, menübõl választhatunk, hogy milyen futófényt lássunk forrás futtaható a 6,7 pontok nincsnek még kész
Egy képernyõkép a programból:

*************************************** FIGYLEM! ***************************************
AZ I/O TEVÉKENYSÉGEKKEL TÖNKRE LEHET TENNI A PORTOT, HA AZT NEM MEGFELELÕEN HASZNÁLJUK! AZ ITT KÖZZÉTETT PROGRAMOK 486 GÉPEN TURBO C 2.0, ÉS TASM FORDÍTÓVAL LETTEK LEFORDÍTVA DOS 6.22 OPERÁCIÓSRENDSZER ALATT. NEM VÁLLALOK SEMMILYEN GARANCIÁT HOGY MÁS OPRENDSZEREK (WIN 98/XP/UNIX) ALATT IS FUTNAK. A FORRÁSOKAT IS KÖZREADOM, AZT BÁRKI TETSZÉSE SZERINT MÓDOSÍTHATJA ÁTÍRHATJA, ÚGYMOND OPENSOURCE.

Szóval ha javasolhatom akkor ne a legféltetebb gépeden próbáld ki, de egyébként mûködnek, láthatsz is lent videókat :-)

A hardver:
Nézzük, hogy mi is kell nekünk ahhoz amit szeretnénk. A következõ elektronikai egységekre lesz szükségünk:
- 8 db 5mm-es led (szine, fényerõ teljesen mindegy)
- 8 db 270 ohmos ellenállás
- 1 db D 25 paralel apa csatlakozó (tehát amit a portba dugunk, hátlap nem szükséges hozzá)

A feljebb lévõ bekötést használva (8 szor megismételve) elkészíthetjük hardvert. Vezetékék használatát nem javaslom mert jelveszteség léphet fel, tehát ha hozzáforrasztjuk a ledeket csatlakozó lábaihoz az tökéletes, de ellenállást mindeképp kössük be. Én speciel a led anódjához kötöttem valahogy így:

A forrasztások után:

Ha ezzel megvolnánk akkor a programokat lefuttatva láthatjuk ahogyan a ledek villognak.

Felhasznált irodalom:
Máté Eörs - Assembly programozás
Benkõ Tiborné, Benkõ László Tóth Bertalan - Programozzunk C nyelven (Computer books-os)
valamint Kis Norbert magánweboldala http://www.tar.hu/norbimagan/


Nagy Gergõ © 2006.2.19. Email: daf182 .at. gmail.com