18.3 Paralel Port Örnekleri
18.3 Paralel Port Örnekleri
Bu bölümde, bir önceki kısımda verilen port fonksiyonları ile, bir PC’nin paralel portunun nasıl denetleneceği 6 tane örnek programda anlatılmıştır.
NOT
|
Program 18.1: outp fonksiyonunun kulanımı
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/* 18prg01.c: outp örneği */ #include <stdio.h> #include <dos.h> #define DATA 0x0378 int main() { int deger = 25; outp(DATA, deger); printf("\n%X nolu adrese %d degeri yazildi.", DATA, deger); return 0; } |
ÇIKTI
1 |
378 adresine 25 degeri yazildi. |
Program 18.1’de 6. satırda tanımlanan porta, 12.satırda 25 değeri yazılmaktadır. Bu değer PC paralel portunun DATA uçlarına yazılır. Bu sebeple 25 değeri ikili sistemde (binary) ifade edilip 8 bite bölünür, yani 25 = 00011001 şekinde DATA portuna yazılır. Burada 1 portun ilgili bacağına +5V DC sinyalini gönderir. 0 olan bağlantı noktalarına ise sinyal gönderilmez. Bu değerler basit bir voltmetre ile ölçülüp test edilebilir.
Porta yazılmak veya porttan okunmak istenen veriyi ikili (binary) olarak görüntülemek yararlı olabilir. Program 18.2’de cevir_taban2 fonksiyonu bu amaçla yazılmıştır.
Program 18.2: outportb fonksiyonun kullanımı
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
/* 18prg02.c: outportb fonksiyonu */ #include <stdio.h> #include <dos.h> #include <math.h> #define DATA 0x0378 long cevir_taban2(int); int main() { int deger = 0x19; /* deger = 25 */ outportb(DATA,deger); printf("\nDATA portuna gonderilen deger %d : %08ld",deger, cevir_taban2(deger)); return 0; } /* Bu fonksiyon 10 tabanındaki bir sayıyı 2 tabınındaki karşılığını hesaplar. */ long cevir_taban2(int x) { int i = 0, k; long bin = 0; while( x>0 ) { if(x%2) k = 1; else k = 0; bin += k*pow(10,i++); x /= 2; } return bin; } |
ÇIKTI
1 |
DATA portuna gonderilen deger 25 : 00011001 |
9. satırdaki cevir_taban2 fonksiyonu, kendisine parametere olarak gelen bir tamsayıyı iki tabana çevirir. Ekranda porta yazılan değer ve onun iki tabanındaki karşılığı, uygun bir formatla, 8 bit halinde gösterilmiştir.
inp() ve inportb() fonksiyonları, PC bağlantı noktalarından sırasıyla bir karakter ve bir baytlık veri okumak mümkündür. Program 18.3, bu fonksiyonlar ile nasıl veri okunacağına dair iyi bir fikir verir.
Program 18.3: inp ve inportb fonksiyonlarıyla paralel porta atanan varsayılan değerleri öğrenme
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
/* 18prg03.c: inp ve inportb fonksiyonlarının kullanımı */ #include <dos.h> #include <stdio.h> #define DATA 0x0378 #define STATUS DATA+1 #define CONTROL DATA+2 int main() { int veri; puts("Paralel porta atanan degerler (Hex):"); veri = inp(DATA); printf( "Data portu : %X\n",veri ); veri = inp(STATUS); printf( "Status portu : %X\n",veri ); veri = inportb(CONTROL); printf( "Kontrol portu : %X\n",veri ); return 0; } |
ÇIKTI
1 2 3 4 |
Paralel porta atanan degerler (Hex): Data portu : 4 Status portu : 7F Kontrol portu : CC |
Programın elde ettiği değerler, porta hiç bir müdehale olmadan elde edilmiştir ve her bilgisayarda başka bir sonuç verebilir. Bu fonksiyonların tek parameteresi olduğuna dikkat ediniz.
Bir porta herhangi bir veri yazıldıktan sonra, bu veri o portun saklayıcısına (register) yazılır ve yeni bilgi yazılmadıkça orada kalır. Program 18.4 CONTROL portuna ouportb ile yazılan bir verinin inportb fonksiyonu ile okunması gösterilmiştir.
Program 18.4: inportb ve outportb fonksiyonlarının kullanımı
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
/* 18prg04.c: inportb ve outportb örneği */ #include <stdio.h> #include <dos.h> #define PORT 0x037A int main() { int deger; deger = inportb(PORT); /* varsayılan deger */ printf("\nPorta veri yazilmadan onceki deger : %X",deger); deger = 0x0A; /* deger = 10 */ outportb(PORT, deger); deger = inportb(PORT); printf("\nPorta veri yazdiktan sonraki deger : %X",deger); return 0; } |
ÇIKTI
1 2 |
Porta veri yazilmadan onceki deger : CC Porta veri yazdiktan sonraki deger : CA |
Program 18.4’ün çıktısı incelendiğinde, portta varsayılan değerin CCh, veri yazıldıktan sonraki değerin CAh olduğu görülmektedir. CONTROL portunun ilk 4-bitine müdehale edilebildiği halde ikinci 4-biti değiştirilememiş. Neden?