|  | 
        
            | 
                    
                        | C# ile Paralel Port Kontrolü |  |  
                        | 
	
    
		
            | Gönderiliyor lütfen bekleyin... | 
 |  | 
        
            | Arkadaşlar bu makalemiz tamamen olmasada kısmen 
elektronik üzerine programlamaya temel olacağına inanıyorum.Elektronik 
programlama ile kastetdiğim paralel porta veri yollamakla ilgili.Programa 
başlamadan önce genel paralel port özellikleri ile ilgili bilgi vermek 
istiyorum. 
 PARALEL PORT: Bilgisayarımızda genellikle 
yazıcılar için kullandığımız LPT portu olarakta hatırlayabilirsiniz.Paralel port 
üzerinde 25 adet pin bulunur.Bu pinlerin ne işe yaradığına gelirsek;
 
 
  
 Bu şekilde görüldüğü gibi S0,S1,S2 konnektörleri 
		gözükmüyor.Bu konnektörlerden S0 timeout bitini temsil 
		eder.10,11.12.13.15 numaralı S bitleri ise paralel portun aldığı 
		hexadecimal sayı olan port adresini belirtir.Yani portumuzun adres 
		bitleri buradan gelir.Bu adres her bilgisayarda farklı olabilir fakat 
		istisnalar harici aynıdır ve bu adres DATA+1 olarak tanımlanır.DATA 
		adresi ise bilgisayarımızda kayıtlı olan adrestir.Bu adrese windows XP 
		veya windows 2000’de bakmak için   Settings > Control 
		Panel > System > Hardware > Device Manager > Ports (COM & LPT) > Printer 
		Port(LPT1) > Properties = in Resources > Resource  
		yoluyla ulaşabiliriz.Benim bilgisayarımda bu adres resimdede görüldüğü 
		gibi 0378-037F yazıyor buradaki DATA adresi 0x378 dir.Bu sayı 
		hexadesimal(16 lıktabanda)dır.Bu DATA adresinin decimal(10 luk 
		)karşılığı ise  888 dir.Biz daha çok decimal sayıyı kullanacağız.
 
 
  
 Paralel portta bizi en fazla 
ilgilendiren yer D0-D7 bitleridir.Görüldüğü gibi 8 bitimizin geleceği yerler 
buralarıdır.Paralel portumuza veri gelip gelmediğini kontrol etmek için ise 
portumuzun önüne 8 adet led yerleştirerek bu kontrolü gerçekleyebiliriz.Tabiki 
ledlerin önüne direnç koymalıyız ki ani gerilim değişmesinden 
etkilenmesin.Ledlerin önüne 47K’lık direnç işimizi görecektir.Her devrenin 
mutlaka bir toprağı olmalıdır bizim devremizin toprağını ise G7 bitini 
kullanarak alacağız.
			Bilgisayarı ilk açtığımızda portlara 
			11111111(decimal=255) gidicektir.Bunun anlamı yani her 1’in anlamı 
			+5 volttur.0 olduğu zaman ise 0 voltla ledimiz sönük durumda 
			olacaktır.Zaten yapacağımız şeyde porta veri yollayıp istediğimiz 
			ledi bilgisayar aracılığı ile yakmaktan başka bir şey olmayacak.
  
 Programımız:
Amaç:Yapacağımız 
	programla port kontrolüne bir giriş yapacağız.8 biti işaret eden 8 
	pictureBoxımız olacak.Yanan bit olduğu zaman bu resimler yanan resim olarak 
	değişecek.Ve birde girdiğimiz decimal sayıyı binary olarak ledlerde 
	görebileceğiz.Son olarak bütün ledleri söndüren bir söndür buttonu 
	yapacağız.Programın tasarımı şekildeki gibidir.
 
 
  
 Programımıza verileri yollarken port numarasını decimal 
		formatta yollarız.Benim paralel portumun decimal karşılığı 888 olduğu 
		için ben program içinde 888 yazacağım.Verileri porta yollamak için ise 
		inpout32.dll dosyasını kullanacağız.Bu dll dosyasını programımıza dahil 
		ederek işe başlayalım.
using 
System.Runtime.InteropServices; // ile dll dosyası kullanacağımızı gösterdik.
 
 
 
 
 
 Daha sonra bu dll’yi işleteceğimiz bir class yaratıp 
		bu classa dll’yi ekledik.
 
 
 
          Son olarak ledlerin yanık olup olmadığının program 
		içinde yanıklığını veya sönüklüğünü göstermek için pictureBoxları 
		kullandık.Ve girilen sayımızı bitlerine ayırıp bu bitleri bir diziye 
		aktardık.Aktardığımız bu dizinin 0.elemanı bir ise 1.biti yak gibi bir 
		olayı if-else ile kontrol ettik.Tabiki burda yakma olayı sadece resim 
		değiştirme.
            | public class gonder {
 [[DllImport("inpout32.dll", EntryPoint="Out32")]
 public static extern void verigonder(int portno,int sayi);
 }
 |  
 
 
  Arkadaşlar bu programla temel bir gösterim 
		yaptık.Bundan sonra timerları kullanarak ledleri haraket ettirebilir 
		yada bazı bitleri 1  göndererek bir step motor kontrol 
		edebiliriz.Yani bitlerle hayal edebileceğiniz herşeyi yapabilirsiniz. 
        Kolay gelsin. Umarım port kullanımı hakkında yardımcı 
				olmuşumdur.
    | private void button1_Click(object sender, 
    System.EventArgs e) {
 byte bit,and;
 byte[]donusum=new byte[8];//0-255 arası girilen 
    sayımızın bitler ayırdığımız zaman aktaracağımız dizi
 if(textBox1.Text=="")
 {
 MessageBox.Show("Sayı 
    girmeniz gerekiyor");
 return;
 }
 long degeregec=Convert.ToInt64(textBox1.Text);
 if(degeregec>255)
 {
 MessageBox.Show("0-255 
    arası veri giriniz");
 if(textBox1.CanFocus)
 {
 textBox1.Focus();
 }
 return;
 }
 byte deger=Convert.ToByte(textBox1.Text);
 for(byte k=8;k>=1;k--)
 {
 and=1;
 for(int l=1;l<=k-1;l++)
 {
 and*=2;
 }
 bit=(byte)((deger&and)>>k-1);
 donusum[k-1]=bit;
 }
 
 if(donusum[7]==1)
 {
 sekiz.Image=yanık.Image;
 }
 else if(donusum[7]==0)
 {
 sekiz.Image=sonuk.Image;
 }
 if(donusum[6]==1)
 {
 yedi.Image=yanık.Image;
 }
 else if(donusum[6]==0)
 {
 yedi.Image=sonuk.Image;
 }
 if(donusum[5]==1)
 {
 altı.Image=yanık.Image;
 }
 else if(donusum[5]==0)
 {
 altı.Image=sonuk.Image;
 }
 if(donusum[4]==1)
 {
 bes.Image=yanık.Image;
 }
 else if(donusum[4]==0)
 {
 bes.Image=sonuk.Image;
 }
 if(donusum[3]==1)
 {
 dort.Image=yanık.Image;
 }
 else if(donusum[3]==0)
 {
 dort.Image=sonuk.Image;
 }
 if(donusum[2]==1)
 {
 uc.Image=yanık.Image;
 }
 else if(donusum[2]==0)
 {
 uc.Image=sonuk.Image;
 }
 if(donusum[1]==1)
 {
 iki.Image=yanık.Image;
 }
 else if(donusum[1]==0)
 {
 iki.Image=sonuk.Image;
 }
 if(donusum[0]==1)
 {
 bir.Image=yanık.Image;
 }
 else
 {
 bir.Image=sonuk.Image;
 }
 try
 {
 gonder.verigonder(888,deger);
 label1.Text="Veri 
    başarıyla gönderildi";
 textBox1.ResetText();
 }
 catch(Exception hata)
 {
 string 
    error=hata.Message;
 MessageBox.Show("Veri 
    gönderilirken hata 
    oluştu","hata",MessageBoxButtons.OK,MessageBoxIcon.Warning);
 }
 }
 
 private void button2_Click(object sender, System.EventArgs e)
 {
 gonder.verigonder(888,0);
        sekiz.Image=sonuk.Image;
 yedi.Image=sonuk.Image;
 altı.Image=sonuk.Image;
 bes.Image=sonuk.Image;
 dort.Image=sonuk.Image;
 uc.Image=sonuk.Image;
 iki.Image=sonuk.Image;
 bir.Image=sonuk.Image;
 }
 
 private void Form1_Load(object sender, 
    System.EventArgs e)
 {
 gonder.verigonder(888,0);
 }
 
 private void Form1_Closing(object sender, 
    System.ComponentModel.CancelEventArgs e)
 {
 gonder.verigonder(888,0);
 }
 |  
 Örnek uygulamayı indirmek için tıklayın.
 
 CANER 
				ŞAHAN
 
 [email protected]
 
 University of Istanbul Dept.of Electronics 
				Engineering 3.
KAYNAK:
 
 Bu makalede adı geçen paralel port ile haberleşme 
					örneği ilk olarak  codeproject sitesinde Levent S. 
					tarafından gerçeklenmiştir.Ve dll’ dosyasının referansı 
					http://www.logix4u.net/  sitesinden alımıştır.
 
 dll’:::http://www.logix4u.net/
 
 codeproject::http://www.codeproject.com/csharp/csppleds.asp
 
                Makale:C# ile Paralel Port Kontrolü C#, Visual C# ve .NET Caner Şahan
 | 
        
            |  | 
        
            |  | 
        
            | 
                    
                        
                            
                        
                            Eklenen Son 10 
                            Bu Konuda Geçmiş 10 
                        
                            Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
                         
                            Son Eklenen 10 Makale Yükleniyor
                         
                            Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
                         | 
        
            |  |