ANA SAYFA          YARDIM      KAYNAK      HAZIRLAYANLAR                                                                                       <|  1  2  3  |>
 

KONULAR

 

  DERSLER

  HAZIR DÖK.

  UYGULAMA_PRO.

  PÜF NOKTALAR

  DÖNGÜ_KOM.

  COMPANET DOW.

  APİLER

  LİNKLER

  HACKER

  BAZI_KOMUTLAR

 

 

   DERS ANLATIMI  PORTLAR

PORTLAR

PARALEL PORT ÇIKISI:
Ilk olarak almis oldugumuz yazici kablosunu kesmemiz gerekiyor. Kesmeden kablolar soyularakta yapilabilir. Kabloyu kestikten sonra içerisinden çikan 25 tane kabloyu ayiralim ve uçlarini soyalim. Data göndermek için bu kablolardan bize sadece sekiz tanesi gerekli. Bize gerekli olan sekiz kablo, data pinlerinden gelen kablolar. Bu kablolar direnç,led, protobord ile devre sekle uygun olarak kurulur. Montaj plakasini kullanarak data pinlerine giden kablolardan her birinin ucuna bir direnç ve ledi bagliyoruz. Dikkat etmemiz gereken ledin (+) olan kismini baglamamiz. Dirençlerin ise belli bir yönü yoktur istediginiz yönde takabilirsiniz. Genelde led diyotlarda bir bacak daha uzun olur. Iste o uzun bacak (+) olan tarafidir. Ledin diger bacagini ise kablodan gelen açik TOPRAK kablosuna birlestirecegiz.
Devremizi tamamladiktan sonra simdi bilgisayarimizdaki paralel portun adresini bulmamiz gerekli. Bunun için Denetim Masasindan Sisteme, oradanda aygit yöneticisine girin. Portlara (Baglanti Noktalari) gelin ve LPT portunun Kaynaklarindan Giris-Çikis araligindaki degerin ilk kismindaki deger yazici portunuzun adresidir.Default olarak bu deger 0378 dir.böylece deneyimizin donanim kismi biter yazilim kismi baslar.
Paralel porttan bilgi gönderme-almanin çesitli yolari vardir.
-Assembly komutlari kullanarak
-Uygun bir programlama dili componenti kullanarak
-Donanima hükmeden komut setini kullanarak
Assembly ile gönderme ve alma komutlari(win9x’te geçerli)
Göndermek için:

procedure WritePort(wPort : Word; girilen : Byte);
begin

asm {Assembly kodlarinin baslayacagini belirtiyor}
mov dx, wPort { Disaridan verilen wPort adresine dx tasiyicisinin bilgi gönderecegini belirtiyor}
mov al, bValue {Programda kullanici tarafindan girilen isimli degiskeni al’a aktariliyor. }
out dx, al {Al deki bilgi dx portuna yollaniyor}
end; {Assembly kodu bitiyor}
end;
Almak için:
Function portin(IOport:word):byte;assembler;
asm

mov dx,ax {port'taki degeri okumak için}
in al,dx
end;

Smallport isimli delphi komponenti ile bilgi gönderme programi:
procedure TForm1.Button1Click(Sender: TObject);
var

i,l:byte;
begin
if not SmallPort1.Opened then smallport1.Opened:=true;
i:=strtoint(edit1.text);
l:=(i mod 256);
smallport1.WriteByte($378,l);
end;
Smallport isimli delphi komponenti ile bilgi alma programi:
procedure TForm1.Button2Click(Sender: TObject);
begin

if not SmallPort1.Opened then smallport1.Opened:=true;
edit2.text:=inttostr(smallport1.readbyte($379));
end;
komponente ait kullanilan prosedürler sunlar:
procedure TSmallPort.WriteByte(Index: WORD; value: WORD);/*parallel port data pinlerine deger göndermeye yariyor. */
function TSmallPort.ReadWord(port: WORD): WORD;/* parallel portta kontrol pinlerinden deger okumaya yariyor*/
Ilk olarak paralel porttan veri çikisini görecegiz. Yukaridaki paralel port bilgi gönderme devresinde 8 pin özel bir durum olmadigi sürece degerleri "0" dir. Biz bu pinlerden istedigimizi "1" durumuna getirebiliriz. Paralel port üzerindeki bir data pininin "1" olmasi o pinin +5 Volt olmasi anlamina gelir. Bilgisayar sistemlerinde temel rakamlar bunlar oldugundan, yazdigimiz diger veri ve adresler bilgisayar içerisinde ikilik sayi sisteminde islenir.
255 11111111
0 00000000
1 00000001
4 00000100
16 00010000
96 01100000
153 10011001
128 10000000
85 01010101
170 10101010
Paralel port üzerindeki data pinlerinden bir tanesini "1" yapacagiz, dolayisi ile o pinin elektriksel degeri +5Volt olacak. Buradan çikan 5 Voltu direnç üzerinden geçirerek üzerindeki akimin degerini ledi bozmayacak degere düsürüyoruz ve bunuda led diyotun (+) ucuna bagliyoruz. Ledin diger ucunuda TOPRAK kismina baglayarak devreyi kapatacagiz


PARALEL PORT BILGI GIRISI:
Önceki uygulamada , paralel porttan basit veri çikisini incelemis ve porta bagli 8 tane ledi yakip södürmüstük. Simdi paralel porta bagladigimiz 5 tane buton ile bilgisayara sayisal veri girisi yapacagiz. Paralel porttan veri girisi STATUS yada CONTROL portuna ait pinlerden gerçeklestirilebilir. Hatta bazi ayarlamalar yaparak, eger bilgisayariniz da destekliyorsa, DATA pinlerinden giris yapmamiz da mümkün olabilir. Biz STATUS portundan veri girisini inceleyecegiz.
STATUS portu sayesinde, 15 - 13 - 12 - 11- 10 numarali pinlerden, 5 bit sayisal giris yapabiliriz. STATUS portu paralel portunuzun taban adresinin +1 fazlasinda bulunmaktadir. Örnegin paralel portunuzun taban adresi h378 ise STATUS portu h379 da bulunacaktir. Veriyi paralel portun seklinde gözüktügü gibi S7, S6, S5, S4, S3 pinlerinden yapacagiz. Bu 5 pinlerden herhangi bir müdahale bulunmadan okuyacaginiz lojik deger "1" olacaktir. Eger voltmetrenizle bu pinlerdeki voltaji ölçerseniz +5 Volt oldugunu göreceksiniz. Bu pinlere baglayacagimiz butonlar ile pinleri topraklayarak lojik degerlerini "0" yapip bir nevi veri girisi gerçeklestirmis olacagiz.
Paralel porta veri giris islemi, temel olarak ayni olsa da veri çikisindan biraz daha karisiktir. Bunun sebebi STATUS portunda bulunan sinyallerden birinin donanim tarafindan terslenmis olmasidir. Simdi veriyi 8 bit olarak okudugumuzu varsayalim. Bu durumda STATUS portundaki binary (ikilik sisteme karsilik gelen) deger, "11111111" olacaktir. Bu da 10 tabaninda 255 'e denk gelmektedir. Fakat gelin görün ki, bu porttan veriyi okudugumuz da bambaska bir deger olan 127 ' ye rastlayacagiz. Dikkat ederseniz 127 degerini binary olarak okursak "01111111" degerini elde edecegiz. Iste buradaki 127 degerinin okunmasinin sebebi pinlerden bir tanesi olan S7 nin terslenmis olmasidir. Yani S7 ye karsilik gelen pine veri yolladigimizda o pinin degeri "1" olacaktir. Digerlerine veri yolladigimizda ise degerleri "0" olacaktir. Veriyi 8 bit olarak okudugumuzu varsaymistik. Iste okudugumuz degerin son 3 bitini esasinda okuyamiyoruz. Yani 127 degerinin okunabilir karsiligi "01111xxx" olacaktir. Buradaki x lerin bir degeri yoktur. Iptal edilmis bitleri göstermek için kullandim. Gerçekte okunan deger "01111" olacaktir. Bu da STATUS portuna veri girisinin 5 bit oldugunu bize bir daha gösterecektir.
Daha rahat islem yapabilmek için tersinmis olan S7 bitini bizim yazilim olarak tekrar tersindirmemiz gerekmektedir. Yani porta hiç bir müdahalede bulunmadan okumak istedigimiz deger "11111xxx" olmalidir. Bu durumda en bastaki biti tersindirmemiz gerekecektir. Bu islemi yapmanin en kolay yolu Xor kullanmaktir. Bu programi yaptiginiz dile gore degisir. Bazi bilgisayarlarda bu Xor lama islemine hiç gerek kalmaz.
Asagidaki tabloda hangi butonlara bastigimizda, yukaridaki komutla hangi veriyi okuyabilecegimizi gösterilmistir.
Butonlar S7 S6 S5 S4 S3 S2 S1 S0 10 tabanindaki deger

S5 1 1 0 1 1 1 1 1 223
S4 1 1 1 0 1 1 1 1 239
S5 ve S4 1 1 0 0 1 1 1 1 207
Tümü 0 0 0 0 0 1 1 1 7

Kullanmadigimiz S0,S1 ve S2 degerleri genelde "1" olarak gelmektedir fakat bazen bu degisebiliyor. Eger portunuzdaki bu degerler degisik ise farkli bir sonuç elde edebilirsiniz. Benim denedigim diger bir bilgisayarda XOR kullanmadan ilk okudugum deger 120 idi. Bu da ikilik sistemde "01111000" degerine karsilik geliyordu. Bu durumda kullanilmayan S2,S1 ve S0 degerlerinin "0" olarak geldigini gördüm. Bu degeri yukarida anlattigim sekilde S7 ye ve S3, S2, S1 pinlerine yönelik "1000111" maskesi ile XOR layip, ilk okunan degeri "11111111" yani 255 olarak alabildim. Simdi bu kadar ugrasmaya ne gerek var diye düsünebilirsiniz. Yani alti üstü veriyi evirip çevirip 255 degerini elde ettik. Esasinda bu tamamen size kalmis veriyi XOR lamak zorunda degilsiniz. Bu sadece hesaplamalarda ve mantikta biraz kolaylik saglayacaktir. Önemli olan okunan verinin siz butona bastikça degismesidir.

 

İSTEK, YAYINLANMASINI İSTEDİĞİNİZ PROG.  VE ŞİKAYETLERİNİZİ delphikursu@delphikursu.com MAİL ATINIZ