18.4 Seri Port Örnekleri
18.4 Seri Port Örnekleri
Bu bölümde, yine Standart C’de olmayan bilgisayarın seri portları üzerinden iletişim konu edilecektir.
NOT
|
Standart PC’lerin seri iletişim portlarına erişim UART olarak adlandırılan bir birim üzerinden gerçekleştirilir. Bu birim anakat üzerindeki bir entegre devredir. Ancak temel olarak bilinmesi gereken alma saklayıcısına ve gönderme saklayıcısına nasıl erişileceği ve UART’ın ayarlarının nasıl yapılacağıdır. Program 18.5’de bir dosya içeriğinin karakter karakter seri port üzerinden karşı tarafa nasıl gönderileceği görülmektedir[1].
Program 18.5: Bir metin dosyasının içeriğini seri porta aktarır.
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 |
/* 18prg05.c: Bir metin dosyasının içeriğini seri porta aktarır */ #include <stdio.h> #include <dos.h> #include <stdlib.h> int main() { char kr; FILE *dosya; /* UART'ın ayarlanması */ outportb(0x3FB,0x80); outport (0x3F8,0x0C); outportb(0x3FB,0x1B); /* 9600 bps.dur biti 1.cift eslik, 8 bit veri*/ /* dosya açılıyor */ if ( (dosya=fopen("deneme.txt", "r")) == NULL) { puts ("Hata olustu! Dosya acilmadi."); exit(1); } while( !feof(dosya) ) { kr=getc(dosya); /* dosyadan bir karakter oku */ while ( (inportb(0x3FD) & 0x20)==0 ); /* gönderme saklayicisi sınanıyor */ ouportb(0x3F8,kr); /* porta gönderiliyor */ } fclose(dosya); /* dosya kapatiliyor */ return 0; } |
ÇIKTI
Bir UART iletişim işine geçmeden önce ayarlanmalıdır; yani, iletişim hızı, hata biti kullanıp kullanılmayacağı gibi birtakım bilgilerin yerleştirimi yapılmalıdır. UART’ın herhangi bir andaki durumu, yani veri göndermeye hazır olup olmadığı, yeni veri gelip gelmediği gibi bilgiler hat durum saklayıcısı üzerindeki bitlere bakılarak anlaşılır. Örneğin, UART’a gönderilmesi için bir veri yazılmadan önce, göndermek için uygun olup olmadığı sınanmalıdır. Program 18.6’de seri port üzerinden gelen karakterleri alıp ekrana nasıl yazıldığı görülmektedir[1].
Program 18.6: Seri port üzerinden gelen karakterleri alıp ekrana yazar.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
/* 18prg06.c: Seri port üzerinden gelen karakterleri alıp ekrana yazar */ #include <stdio.h> #include <dos.h> int main() { char kr; /* UART'ın ayarlanması */ outportb(0x3FB,0x80); outport (0x3F8,0x0C); outportb(0x3FB,0x1B); /* 9600 bps.dur biti 1.cift eslik, 8 bit veri*/ while(1) { while( (inportb(0x3FD) & 0x01)==0 ); /* yeni karakter gelene kadar bekle */ kr=inportb(0x3F8); /* geleni al ve kr'ye yerleştir */ printf("%c", kr); } return 0; } |
Soru: Son iki programı öyle değiştirin ki, birinin klavyesinden girilen, diğerinin ekranında görülsün.