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/