Cevapla
 
Konu Seçenekleri
Eski 07-12-07, 17:35 Çevrimiçi   #1

 
ares - ait Avatar
Genel Mesajlar: 6.380
Teşekkür etti: 764
Teşekkür edildi: 2.102
RepForum Gücü: 500
Forum Puanı:43217
ares tanımayanı zamansız forum da kimse adam yerine koymazares tanımayanı zamansız forum da kimse adam yerine koymazares tanımayanı zamansız forum da kimse adam yerine koymazares tanımayanı zamansız forum da kimse adam yerine koymazares tanımayanı zamansız forum da kimse adam yerine koymazares tanımayanı zamansız forum da kimse adam yerine koymazares tanımayanı zamansız forum da kimse adam yerine koymazares tanımayanı zamansız forum da kimse adam yerine koymazares tanımayanı zamansız forum da kimse adam yerine koymazares tanımayanı zamansız forum da kimse adam yerine koymazares tanımayanı zamansız forum da kimse adam yerine koymaz
Ders-46 'REGISTRY'

PORTLAR
ÖN BILGILERE GIRIS:
Paralel port, bilgisayarin dis dünyasiyla baglanti kurmasini saglar ve bu sayede buraya takilan aygita dijital olarak bilgi gönderir ve aygittan bilgi alir. Bu bilgi alma ve verme islemlerinin hepsi ikilik sistemde olur. Bilgisayarda temel olan iki büyüklük vardir. Bilgisayar içerisinde veri bu iki deger üzerinden akmaktadir. "1" devrenin kapali (aktif) "0" ise açik (pasif) oldugunu gösterir. Bilgisayarda bu birler ve sifirlarin her birine "BIT"; bunlardan sekiz tanesinin yanyana gelmis sekline "1 BYTE" diyoruz. Bir seferde paralel porttan en fazla 256(11111111) sayisi gönderilebilir.(8 Tane veri ucu bulundugundan) Paralel portta veri transfer hizi genelde 150kb/sn dir. Fakat bu deger su an bir kaç kat artabilmektedir.Bilgisayara bagli her aygitin bellekte bir adresi bulunur ve her açilista BIOS bu adres degerlerini RAM bellege yeniden yükler. Paralel portun da belirli bir adres degeri vardir. Bu adres deger kontrol edilerek paralel porta bagli olan aygitin kontrolü saglanir. Aygit bilgisayara yakin oldugu zamanlarda paralel port kullanilir.
Temel olarak paralel port üçe ayrilir.
-GIRIS BIRIMI
-ÇIKIS BIRIMI
-KONTROL BIRIMI

Bu deney çalismasinda paralel portun kavranmasi için çesitli direnç, diyot, led gibi aletlerle kurulan devreler olusturulacaktir.
-Portun açik olmasi
-Portun kapali olmasi
PARALEL PORT PINLERI SEMASI( DB25 ) :
1-14-16-17 :Kontrol uçlari.
2-3-4-5-6-7-8-9 :Veri uçlari.
10-11-12-13-15 :Giris uçlari.
LEDLI PARALEL PORT ÇIKISI DEVRESI:
Dirençler ledlerin tahrip olamamasi için konulmustur. Toprak ise dis kaplama metalinden veya 18..25 nolu pinlerin herhangi birinden alinabilir. PARALEL PORT BILGI GIRISI DEVRESI:


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.

ÖRNEK :
KODU :

Code:
procedure TForm1.Button1Click(Sender: TObject);
var
m:integer;
begin
if edit1.Text='' then
showmessage('YAZIM KUTUNUZ BOS!')
else
begin
If not SmallPort1.Opened then
begin
SmallPort1.Opened:= True;
//if smallport1.Opened then showmessage('girdi');
end;
m:=(strtoint(edit1.text) mod 256);
smallport1.WriteByte($378,m);
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
smallport1.writebyte($378,0);
CLOSE;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
n:integer;
begin
if not smallport1.Opened then smallport1.opened:=true;
n:=smallport1.ReadByte($379);
edit2.text:=inttostr(n);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
smallport1.opened:=false;
end;

  Alıntı ile Cevapla
Mesaja teşekkür eden:
YaGMuR_CiNi (07-12-07)
Cevapla

Konu Seçenekleri

Yetkileriniz
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodları Kapalı
Trackbacks are Kapalı
Pingbacks are Kapalı
Refbacks are Kapalı

Powered by vBulletin Copyright © 2000-2008 Jelsoft Enterprises Limited.
SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.
http://www.zamansiz.com

Bütün Zaman Ayarları WEZ +2 olarak düzenlenmiştir. Şu Anki Saat: 22:04 .