SERİ PORT ( RS232 ) Giriş. BÖLÜM 1 : DONANIM ( PC lerde ) BÖLÜM 2 : SERİ PORT KAYDEDİCİLERİ. BÖLÜM 3 : SERİ PORTUN PROGRAMLANMASI ( PC lerde )



Benzer belgeler
Paralel ve Seri İletişim. Asenkron/Senkron İletişim. Şekil 2: İletişim Modları

BÖLÜM 3 SERİ PORT 3.1 SERİ HABERLEŞMENİN SEBEPLERİ 3.2 SERİ HABERLEŞMENİN TEMELLERİ BİLGİSAYARLI KONTROL

8086 nın Bacak Bağlantısı ve İşlevleri. 8086, 16-bit veri yoluna (data bus) 8088 ise 8- bit veri yoluna sahip16-bit mikroişlemcilerdir.

İÇİNDEKİLER 1. KLAVYE KLAVYE RB KLAVYE RBHIGH DİSPLAY... 31

Sistem Programlama. Kesmeler(Interrupts): Kesme mikro işlemcinin üzerinde çalıştığı koda ara vererek başka bir kodu çalıştırması işlemidir.

BÖLÜM 6 Seri Port Đşlemleri

BÖLÜM Mikrodenetleyicisine Giriş

BM-311 Bilgisayar Mimarisi. Hazırlayan: M.Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

BM-311 Bilgisayar Mimarisi

EC-232C. Ethernet RS232 Çevirici. İstanbul Yazılım ve Elektronik Teknolojileri

MIKRODENETLEYICILER. Ege Üniversitesi Ege MYO Mekatronik Programı

İLERI MIKRODENETLEYICILER. Ege Üniversitesi Ege MYO Mekatronik Programı

BQ Modbus Analog Giriş Kartı 6 Kanal 4 20mA. Kullanım Kılavuzu. Doküman Versiyon: BQTEK

x86 Ailesi Mikroişlemciler ve Mikrobilgisayarlar

EC-100. Ethernet RS232/422/485 Çevirici. İstanbul Yazılım ve Elektronik Teknolojileri

Mifare Kart Yazıcı/Okuyucu Modül (MFM-200)

MİKROBİLGİSAYAR LABORATUVARI DENEY RAPORU

İletişim Protokolleri (Communication Protocols)

CP1E KM-N2-FLK MODBUS HABERLEŞMESİ

ENDA MODBUS PROTOKOLÜ

IFD8520 ADRESLENEBİLİR RS-485/RS-422 İZOLELİ ÇEVİRİCİ KULLANIM KILAVUZU

İSTANBUL TİCARET ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ MİKROİŞLEMCİLİ SİSTEM LABORATUVARI KESMELİ GİRİŞ/ÇIKIŞ

BQ Modbus Analog Giriş Kartı 6 Kanal PT100 - PT1000. Kullanım Kılavuzu. Doküman Versiyon: BQTEK

(Random-Access Memory)

LCD (Liquid Crystal Display)

EasyPic 6 Deney Seti Tanıtımı

BÖLÜM 6 RS232 SERİ İLETİŞİM İŞLEMLERİ

UMD-B12 UMD-B10 RF MODEM BOARD

Sistem Programlama. Seri ve Paralel Port Kullanımı:

RS-232'den RS-485'e Kullanıcı kılavuzu

XC8 ile PİC uygulamaları

FPGA İLE UYGULAMA ÖRNEKLERİ FPGA ile Seri Haberleşme (RS232) Uygulaması

MODBUS PROTOKOLÜ ÜZERİNDEN KABLOLU VE KABLOSUZ ENERJİ İZLEME SİSTEMİ

GMTCNT PLC ile MODBUS MASTER Haberleşmesi -MICNO Serisi Hız Kontrol ile Bağlantı-

Arduino Uno ile Hc-Sr04 ve Lcd Ekran Kullanarak Mesafe Ölçmek

LCD (Liquid Crystal Display )

CP1E-ARGOX AS8000-R SERI PORT HABERLEŞMESİ GENEL BILGI BAĞLANTI ŞEMASI HABERLEŞME AYARLARI RXD KOMUTU HABERLEŞME PROGRAMI

PİC HAKKINDA KISA KISA BİLGİLER GİRİŞ/ÇIKIŞ PORTLARI

ASENKRON (Eş Zamanlı Olmayan) HABERLEŞME ARA YÜZEYİ

Haberleşme Üniteleri Endüstriyel ve Ticari. CU- B 1/B 2/B 4 R S R S M o d ü l l e r

BETİ GSM/GPRS MODEM KULLANIM KILAVUZU

ATC-3200 ZigBee to RS232/422/485 Çevirici Kullanıcı Kılavuzu

Bilgisayar ile Dijital Devrelerin Haberleşmesi. FT232R ve MAX232 Entegreleri. Çalışma Raporu

İşletim Sistemleri. Hazırlayan: M. Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

RS-232 SERİ ARA BİRİM FOTOELEKTRİK YALITKAN

İ.T.Ü. Eğitim Mikrobilgisayarının Tanıtımı

Mikroişlemcili Sistemler ve Laboratuvarı 6.Hafta

İşletim Sistemlerine Giriş

8051 Ailesi MCS51 ailesinin orijinal bir üyesidir ve bu ailenin çekirdeğini oluşturur çekirdeğinin temel özellikkleri aşağıda verilmiştir:

PRONEM-midi MODBUS RTU İÇİN REGISTER ADRESLERİ

8051 Ailesi MCS51 ailesinin orijinal bir üyesidir ve bu ailenin çekirdeğini oluşturur çekirdeğinin temel özellikkleri aşağıda verilmiştir:

BQ352 Modbus Röle Cihazı 24 Kanal. Kullanım Kılavuzu. Doküman Versiyon: BQTEK

Mikroişlemcili Sistemler ve Laboratuvarı

İÇİNDEKİLER. 3 STM32F4 MIKRO-DENETLEYICISI 23 STM32 Ailesi ve STM32F STM32 Ailesi 23 STM32 Mikrodenetleyicileri 30 Numaralandırılması 30

İLERI MIKRODENETLEYICILER. Ege Üniversitesi Ege MYO Mekatronik Programı

GİRİŞ-ÇIKIŞ (INPUT / OUTPUT) ORGANİZASYONU

Donanımlar Hafta 1 Donanım

BİLGİSAYAR MİMARİSİ. << Bus Yapısı >> Özer Çelik Matematik-Bilgisayar Bölümü

DY-45 OSĐLOSKOP KĐTĐ. Kullanma Kılavuzu

E5_C-CJ PROGRAMSIZ HABERLEŞME

DERS 3 MİKROİŞLEMCİ SİSTEM MİMARİSİ. İçerik

Yrd. Doç.Dr. C. Harmanşah PARALEL PORT

EC-485. Ethernet RS485 Çevirici. İstanbul Yazılım ve Elektronik Teknolojileri

ACR-Net 100 Kullanım Kılavuzu

DERS 5 PIC 16F84 PROGRAMLAMA İÇERİK. PIC 16F84 bacak bağlantıları PIC 16F84 bellek yapısı Program belleği RAM bellek Değişken kullanımı Komutlar

BQ353 Modbus 8x D.Input 8x Röle Cihazı Kullanım Kılavuzu

PROJE RAPORU. Proje adı: Pedalmatik 1 Giriş 2 Yöntem 3 Bulgular 6 Sonuç ve tartışma 7 Öneriler 7 Kaynakça 7

Erzurum Teknik Üniversitesi RobETÜ Kulübü Robot Eğitimleri. ARDUİNO EĞİTİMLERİ I Arş. Gör. Nurullah Gülmüş

EEM 306 Mikroişlemciler ve Lab. Doç.Dr. Mehmet SAĞBAŞ

Bahar Dönemi. Öğr.Gör. Vedat MARTTİN

WiFi RS232 Converter Sayfa 1 / 12. WiFi RS232 Converter. Teknik Döküman

MCR02/04/05/08 Serileri Temassız Kart Okuyucular

Von Neumann Mimarisi. Mikroişlemciler ve Mikrobilgisayarlar 1

Temel Bilgisayar Programlama

Bilgisayarların Gelişimi

D Duplex : Alıcı + Verici Çalışma Debouching : DMA : Direct Memory Access Data-Bus : Data Veri Yolu Data Flow : Veri Akışı Data Processing : Veri

BQ410 Modbus RF Çevirici Kullanım Kılavuzu

BQ351 Modbus Röle Kontrol Ünitesi. Kullanım Kılavuzu. Doküman Versiyon: BQTEK

TEKNOMOBİL UYDU HABERLEŞME A.Ş. KULLANICI KILAVUZU Rev. 1.0 Satcom SCATEL

NB Ekran Seri Port Üzerinden Veri Okuma/Yazma. Genel Bilgi Protokol Oluşturma Veri Okuma Veri Yazma

Deney 10: Analog - Dijital Dönüştürücüler (Analog to Digital Converters - ADC) Giriş

DY-45 OSİLOSKOP V2.0 KİTİ

ATC-105. RS232 RS422/RS485 Data Çevirici KULLANMA KILAVUZU

İşletim Sistemlerine Giriş

9. MERKEZİ İŞLEM BİRİM MODÜLÜ TASARIMI

İŞLEMCİLER (CPU) İşlemciler bir cihazdaki tüm girdilerin tabii tutulduğu ve çıkış bilgilerinin üretildiği bölümdür.

7. HAFTA KBP208 VE ASSEMBLER. Öğr.Gör. Kürşat M. KARAOĞLAN.

MY PANEL METER KULLANIM KILAVUZU

INTELNET İletişim Teknolojileri San. Tic. Ltd. Şti Oruç Reis Mahallesi Giyimkent Sitesi Giyimkent 2. Sok. No:56/A Esenler/ISTANBUL

ELEKTRİK ELEKTRONİK MÜHENDİSLİĞİ SAYISAL TASARIM LABORATUVARI DENEY 6 ANALOG/DİGİTAL DÖNÜŞTÜRÜCÜ. Grup Numara Ad Soyad RAPORU HAZIRLAYAN:

CUMHURİYET MESLEKİ VE TEKNİK ANADOLU LİSESİ BİLİŞİM TEKNOLOJİLERİNİN TEMELLERİ DERSİ DERS NOTLARI BELLEKLER

BM-311 Bilgisayar Mimarisi

MİKROBİLGİSAYAR SİSTEMLERİ VE ASSEMBLER

UFM-A12 WPA MODEM MODUL

MC6800. Veri yolu D3 A11. Adres yolu A7 A6 NMI HALT DBE +5V 1 2. adres onaltılık onluk bit 07FF kullanıcının program alanı

William Stallings Computer Organization and Architecture 9 th Edition

TOPCON RECEIVER UTILITY (TRU)

AÇIK ARABİRİMLER. FV sistemine ait verilerin bir açık veri protokolü üzerinden özel olarak işlenmesi.

PIC MİKROKONTROLÖR TABANLI MİNİ-KLAVYE TASARIMI

Temel Kavramlar-2. Aşağıda depolama aygıtlarının kapasitelerini inceleyebilirsiniz.

Transkript:

SERİ PORT ( RS232 ) Giriş BÖLÜM 1 : DONANIM ( PC lerde ) Donanım Özellikleri Pin Fonksiyonları Null Modemler Döngü Sınama Fişi DTE / DCE Hızları Akış Kontrolü UART ( 8250 Uyumlu ) UART Tipleri ( PC ler için ) BÖLÜM 2 : SERİ PORT KAYDEDİCİLERİ Port Adresleri ve IRQ lar Register Tablosu DLAB ( Divisor Latch Access Bit ) Interrupt Enable Register (IER) Interrupt Identification Register (IIR) First In / First Out Control Register (FCR) Line Control Register ( LCR ) Modem Control Register ( MCR ) Line Status Register ( LSR ) Modem Status Register ( MSR ) Scratch Register (Çalışma Kaydedicisi) BÖLÜM 3 : SERİ PORTUN PROGRAMLANMASI ( PC lerde ) Sorgulama veya Kesme? Termpoll.c Sorgulama (Polling) Kullanan Bir Haberleşme Program Örneği Buff1024.c Kesme Güdümlü Örnek Bir Haberleşme Programı Kesme Vektörleri ( Interrupt Vectors ) Interrupt Service Routine (ISR)

UART Konfigurasyonu Yazılım Yolu ile UART Tipinin Belirlenmesi BÖLÜM 4 : RS-232 PORTU ile AYGITLARIN HABERLEŞMESİ RS-232 Dalga Şekilleri RS-232 Seviye Dönüştürücüleri 8250 Uyumlu UART lar CDP6402, AY-5-1015 / D36402R-9 ve Diğer UART lar Giriş Seri Port ile haberleşmek Paralel Porta göre daha zordur. Çoğu zaman, seri porta bağlanan bir aygıtın kullanılabilmesi için, yine paralele dönüştürülecek, seri iletime ihtiyaç vardır. Bu UART ( Universal Asynvhronous Receive Transmit ) kullanılarak yapılabilir. Yazılım açısından bakılınca da Standart Paralel Porta (SPP) ulaşırken kullanılan register'lardan çok daha fazlası kullanılmaktadır. Seri veri transferinin paralele göre avantajları şunlardır : 1. Seri kablolar paralel kablolardan uzun olabilir. Seri port kullanımında '1' biti -3 'ten -25 volta, '0' biti de +3'ten +25 volta kadar temsil edilir. Paralel port kullanımında ise '0' 0 volt, '1' ise 5 volt olarak temsil edilir. Bundan dolayı, paralel porttaki maksimum salınım 5 volt iken seri portta bu 50 volta kadar çıkmaktadır. Bu nedenle seri portta kablodaki gerilim kaybı paralel porttaki kadar fazla sorun oluşturmaz. 2. Paralel iletimdeki kadar çok kabloya ihtiyaç duyulmaz. Eğer aygıtın bilgisayardan oldukça uzak bir mesafede kurulması gerekirse 3 kablo kullanmak, paralel iletimdeki gibi 19 veya 25 kablo kullanmaktansa daha ucuzdur. Bununla birlikte her uçtaki arabirim maliyeti gözardı edilmemelidir. 3. Infra Red ( Kızıl Ötesi) aygıtlar son zamanlarda oldukça yaygın. Kızıl ötesi özelliği olan elektronik günlükler veya cep bilgisayarları görmüş olabilirsiniz. Bununla birlikte,8 bitlik bir verinin aynı anda bir oda içinde iletilirken, aygıtın hangi bitin ne olduğunu anlamasının imkansız olduğu açıktır. Bundan dolayı bir bit gönderildiğinde seri iletişim kullanılır. IrDA-1 ( ilk infra red özelliklerinden ) 115.2k baud 'tur ve UART'a bağlıdır. Bununla birlikte, bu aygıtların genellikle elektronik günlüklerde, dizüstü veya avuçiçi bilgisayarlarda kullanıldığını varsayarak, gücü muhafaza etmek için RS232 bit uzunluğunun 3/16 'sına kısaltılmıştır. 4. Mikrodenetleyici kullanımı da günümüzde artmıştır. Bunların birçoğu dış dünya ile iletişim kurabilecek SCI ( Serial Communication Interface - Seri İletişim Arabirimi )

ünitelerine sahiptir. Seri iletişim bu mikrodenetleyicilerdeki pin sayısını azaltır. 8 bitlik paralel iletimde 8 pin kullanılmasına karşın, seri iletimde yalnızca iki pin ortak olarak kullanılır, Transmit Data (TxD) ve Receive Data (RxD) ( Strobe ucuna da ihtiyaç duyulabilir). Donanım Özellikleri BÖLÜM 1 : DONANIM ( PC lerde ) Seri iletişim kullanan aygıtlar iki sınıfa ayrılır. Bunlar DCE ( Data Communications Equipment Veri İletim Cihazları ) ve DTE ( Data Terminal Equipment Veri Terminal Cihazları ). Veri İletim Cihazları için modem, TA adaptörü, plotter örnek olarak verilebilir. Bilgisayar veya terminal Veri Terminal Cihazları sınıfına girer. Seri portun elektriksel özellikleri EIA ( Electronic Industries Association Elektronik Sanayi Birliği ) RS232 standardı tarafından belirlenir. Bu standartın bazı parametreleri aşağıdaki gibidir : 1. "Logic 0 " +3 ile +25 volt arasındadır. 2. "Logic 1" -3 ile -25 volt arasındadır. 3. +3 ile -3 arasındaki bölge tanımsızdır. 4. Açık devre voltajı 25 voltu asla aşmamalıdır ( GND referans alınarak ). 5. Kısa devre akımı 500mA aşmamalıdır. Aygıt bu akımla, devre zarar görmeden çalışabilmelidir. Yukarıda sayılan özellikler EIA standardı tam listesinin çok küçük bir kısmıdır. Ayrıca RS232C standardının maksimum baud rate olarak bugünkü standartlardan oldukça yavaş olan 20,000 bps i desteklemesi ilginçtir. Yenilenmiş standartlar, EIA-232D ve EIA-232E sırasıyla 1987 ve 1991 yıllarında çıkmıştır. Seri portlar iki şekilde olurlar : D Tipi 25 pin connetcor ve D Tipi 9 pin connector vardır. Bunlar PC nin arkasında erkek connector olarak yerleştirilirler ve seri porta bir aygıt bağlamak için dişi connector e ihtiyaç duyulur. Aşağıda 9 pin ve 25 pin D-tipi connector lerin pin bağlantıları verilmiştir. D-Tipi 25 pin No. D-Tipi 9 pin No. Kısaltma Pin 2 Pin 3 TD Transmit Data ( Veri Gönder ) Adı Pin 3 Pin 2 RD Receive Data ( Veri Al )

Pin 4 Pin 7 RTS Request To Send ( Gönderme İsteği ) Pin 5 Pin 8 CTS Clear To Send (Göndermeye Müsait ) Pin 6 Pin 6 DSR Data Set Ready ( Veri Paketi Hazır ) Pin 7 Pin 5 SG Signal Ground ( Sinyal Topraklama ) Pin 8 Pin 1 CD Carrier Detect ( Taşıyıcı Tanımlandı) Pin20 Pin 4 DTR Data Terminal Ready ( Veri Terminali Hazır ) Pin 22 Pin 9 RI Ring Indicator ( Çevrim Göstergesi ) Pin Fonksiyonları Tablo1. D Tipi 9 pin ve D Tipi 25 pin Connectorler Kısaltma Adı Fonksiyonu TD Transmit Data Seri Veri Çıkışı (TxD) RD Receive Data Seri Veri Girişi (RxD) CTS Clear To Send Bu hat seri portun veriyi göndermek için hazır olup olmadığını belirler. DCD Data Carrier Detect Seri port telefon hattının diğer ucundaki portta bir taşıyıcı (Carrier) tespit ettiğinde hat aktif olur. DSR Data Set Ready UART a modemin bağlantı için hazır olduğunu belirtir. DTR Data Terminal Ready DSR nin tersini yapar. Modeme UART ın bağlantı için hazır olduğunu belirtir. RTS Request To Send Modeme, UART ın veriyi göndermek için hazır olduğunu belirtir. RI Ring Indicator Modem, PSTN den bir çevrim sinyali tespit ettiğinde aktif duruma geçer. Null Modemler Null Modem iki DTE yi birbirine bağlamak için kullanılır. Bu yöntem, network oyunları ya da Zmodem Protocol, Xmodem Protocol gibi protokoller kullanarak bilgisayarlar arasında dosya transfer etmek için oldukça ucuzdur. Ayrıca birçok Mikroişlemci Geliştirme Sistemleri ile birlikte kullanılabilir.

Şekil 1. Null Modem Bağlantı Şeması Yukarıda en çok tercih edilen Null Modem bağlantısı verilmiştir. Yalnızca 3 tel uzatılmış olması uzun bağlantılar için maliyeti düşürür. İşlemin teorisi oldukça basittir. Hedef, bilgisayarın bilgileri bir başka bilgisayara değil de bir modeme ilettiğini düşündürmektir. Birinci bilgisayardan gönderilen herhangi bir veri ikinciye ulaşması için TD çıkışı diğer bilgisayarın RD girişine bağlanmalıdır. İkinci bilgisayarın da aynı şekilde TD ucu birinci bilgisayarın RD ucuna bağlanır. Son olarak da SG uçları birbirine bağlanır. Her iki bilgisayarda da Data Terminal Ready çıkışı, Data Set Ready ve Carrier Detect ucuna uygulanmıştır. Data Terminal Ready aktif olduğunda Data Set Ready ve Carrier Detect hemen aktif duruma geçerler. Bu durumda bilgisayar, bağlı olduğu Sanal Modemin hazır olduğunu bu modem için taşıyıcı (carier) tespit ettiğini düşünür. Bu işlemlerden sonra Request To Send ve Clear To Send çıkışları kaldı. İki bilgisayar aynı hız ile haberleştiklerinden akış kontrolüne ihtiyaç duyulmaz ve böylece her iki bilgisayarda da bu iki çıkış birbirine bağlanır. Bilgisayar veri göndermek istediğinde, Request To Send sinyali üretir. Bu sinyal direkt olarak Clear To Send çıkışına varacağından, verinin gönderilmeye hazır olduğu cevabını hemen alır ve işlem gerçekleştirilir. Döngü Sınama Fişi Döngü Sınama Fişi Bu döngü sınama fişi Seri/RS232 Haberleşme Programları yazarken çok kullanışlı olabilir. Seri porttan gönderilen bir verinin aynı porttan hemen alınmasını sağlamak için TD ve RD birbirine bağlanmıştır. Eğer bu fişi seri porta takıp Terminal Programını yüklerseniz, herhangi bir şey yazdığınızda hemen ekranda görüntülenir. Şekil 2. Döngü Sınama Fişi Bağlantısı DTE / DCE Hızları

DTE ve DCE hakkında daha önce de bahsetmiştik. Bilgisayar tipik bir Veri Terminal Aygıtı iken modem tipik bir Veri Haberleşme Aygıtıdır. DTE den DCE ye olan hız bilgisayar ile modem arasında olan hızdır ve bazen terminal hızı olarak adlandırılır. Bu hız DCE den DCE ye ( modemler arasındaki bağlantı ) olan hızdan daha büyük olmalıdır. Günümüzde genellikle 33.6K veya 56K lık modemler kullanılmaktadır. Bundan dolayı DCE den DCE ye olan hız da 33.6K veya 56K olmalı. Modemin yüksek hızı göz önünde bulundurularak DTE den DCE ye hızın da yaklaşık olarak 115,200 bps olması beklenir (16550a UART ın maksimum hızı). Çoğu kimsenin yanıldığı nokta da bu. Kullanılan haberleşme programı DCE den DTE ye olan hızla ilgili ayarlar içerir. Fakat bu 28.8K, 33.6K vs. olarak görülür ve modem hızı sanılır. Günümüzde kullanılan modemler Veri Sıkıştırma Ünitesi içerir. Bu ünite doğru olarak kurulduğunda 1:4, hatta daha fazla sıkıştırma beklenebilir. 1: 4 sıkıştırma text dosyaları için idealdir. Eğer bir text dosya 28.8K hızla (DCE-DCE) transfer edilirse modem bu dosyayı sıkıştırır ve bilgisayarlar arasında gerçekte 115.2 Kbps ile iletilir. Böylece DCE-DTE hızı 115.2 Kbps olur. DCE-DTE hızının modem bağlantı hızından çok daha büyük olmasının nedeni de budur. Yeni modemlerle birlikte veri sıkıştırma oranı da yükselmiştir. Örnek olarak 33.6 Kbps bir modem 1:8 sıkıştırma oranı kullansın. Böylece modem ile UART arasındaki maksimum transfer hızı da 268,800 bps olur. Eğer maksimum transfer hızı 16550a olan UART kullanıyorsanız modem tam bir verimle çalışmayacaktır. Maksimum transfer oranı 230,400 bps olan bir 16C650 UART kullanmak bu sorunu çözecektir. Akış Kontrolü Veri iletimi sırasında tampon belekteki taşmalardan dolayı oluşan veri kaybını engellemek için akış kontrolü kullanılır. Akış kontrolü iki yolla yapılır, Yazlım ve Donanım. Akış kontrol yazılımı Xon ve Xoff olmak üzere iki karakter kullanır. Xon genelde ASCII 17 karakteri ile belirtilirken, Xoff ASCII 19 karakteri ile belirtilir. Modeme ait tampon bellek dolduğunda bilgisayarın daha fazla veri göndermemesi için modem Xoff sinyali üretir. Modemde daha fazla veri için bellek varsa veri gönderilmesi için Xon sinyali üretilir. Bu tip akış kontrolünün avantajı karakterlerin RD ve TD hatlarından gönderilmesi ve fazladan kablo bağlantısına ihtiyaç duyulmamasıdır. Bununla birlikte her karakter 10 bitlik bir iletim gerektirdiğinden bağlantıyı yavaşlatır. Akış kontrol donanımı RTS/CTS akış kontrolü olarak da bilinir. Bu yöntemde veri hatlarının karakter iletimi ile meşgul edilmesi yerine iki adet seri kablo bağlanır. Bu şekilde akış kontrol donanımı veri iletimini yavaşlatmaz. Bilgisayar veri göndermek istediği zaman Request To Send (Gönderme İsteği) sinyali üretir. Modem bu veriyi kabul edebilecek durumda ise Clear To Send sinyali üretir ve bilgisayar veriyi göndermeye başlar. UART ( 8250 Uyumlu )

16450, 16550, 16650 ve 16750 yi içeren 8250 serisi PC lerde en çok kullanılan UART tipidir. Şekil 3. 16550, 16450 ve 8250 UART için Pin Bağlantıları 16550 yongası, 8250 ve 16450 uyumludur. Aradaki fark 24 ve 29 pinleridir. 8250 de Pin 24 Chip Select ucudur ve yalnızca chip in aktif olup olmadığını gösterir. 8250/16450 UART larda Pin 29 bağlanmamıştır. 16550 de bunların yerine iki pin kullanılmıştır. Bunlar DMA (Direct Memory Access) ile birlikte kullanılabilecek olan Transmit Ready (İletime Hazır) ve Receive Ready (Almaya Hazır) çıkışlarıdır. Bu pinler iki ayrı işlem moduna sahiptir. Mode 0 tek DMA transferini desteklerken Mode 1 Multi DMA transferini destekler. Tüm UART pinleri (TD, RD, RI, DCD, DSR, CTS, DTR ve RTS dahil ) TTL uyumludur. Bundan dolayı RS232 Seviye Dönüştürücülerine ihtiyaç duyulur. Genellikle DS1489 Receiver ve DS1488 kullanılır. RS232 dönüştürücüleri TTL sinyalini RS232 standardına çevirirler. Pin.No Adı Açıklama Pin 1:8 D0:D7 Data Bus Pin 9 RCLK Receiver Clock Input. Bu girişin frekansı alıcının baud rate in 16 katına eşit olmak zorundadır. Pin 10 RD Receive Data Pin 11 TD Transmit Data Pin 12 CS0 Chip Select 0 - Active High Pin 13 CS1 Chip Select 1 - Active High Pin 14 ncs2 Chip Select 2 - Active Low Pin 15 nbaudout Baud Output. Programlanabilir baud rate üreteci çıkışı Frekans=

(baud rate * 16) Pin 16 XIN External Crystal Input. Baud Rate üreteci osilatorü için kullanılır. Pin 17 XOUT External Crystal Output Pin 18 nwr Write Line Eviren Pin 19 WR Write Line Evirmeyen Pin 20 VSS Ortak Ground ucuna bağlanır Pin 21 RD Read Line Eviren Pin 22 NRD Read Line Evirmeyen Pin 23 DDIS Driver Disable.CPU UART tan bilgi okurken bu pin aktif 0 olur. Pin 24 ntxrdy Transmit Ready Pin 25 nads Address Strobe. Okuma veya yazma işleminde sinyal sabit değil ise kullanılır. Pin 26 A2 Address Bit 2 Pin 27 A1 Address Bit 1 Pin 28 A0 Address Bit 0 Pin 29 nrxrdy Receive Ready Pin 30 INTR Interrupt Output Pin 31 nout2 User Output 2 Pin 32 nrts Request to Send Pin 33 ndtr Data Terminal Ready Pin34 nout1 User Output 1 Pin 35 MR Master Reset Pin 36 ncts Clear To Send Pin 37 ndsr Data Set Ready Pin 38 ndcd Data Carrier Detect Pin 39 nri Ring Indicator Pin 40 VDD + 5 Volt Tablo 2: 16550A UART Pin Bağlantıları UART ın çalışması için Clock girişine ihtiyaç duyulur. Seri porta ait kart üzerinde genellikle 1.8432 MHz veya 18.432 MHz lik bir kristal bulunur. Kristal, osilasyona başlamasını

sağlayan birkaç bileşen ile birlikte UART ın Xin-Xout pinlerine bağlanır. Clock girişi, alıcı zamanlama devrelerine değil de iletim zamanlama devrelerine direkt olarak arabirim oluşturan Programlanabilir Baud Rate Üreteci için kullanılır. Bunun için pin 15 ten (baudout) pin 9 a (alıcı clock girişi) harici bir bağlantı yapmak gerekir. Clock sinyalinin Baudrate*16 olması gerektiğine dikkat edin. UART Tipleri ( PC ler için ) 8250 Bu serideki ilk UART. Çalışma kaydedicisi içermez. 8250A 8250B 8250 nin geliştirilmiş versiyonudur. 8250 ye çok benzer. 16450 AT bilgisayarlarda kullanılmaktadır. Hat iletimi 8250 ye göre hızlandırılmıştır. 38.4 Kbps de oldukça verimli çalışır. Günümüzde hala kullanılmaktadır. 16550 Tampon belleğe sahip ilk UART lardandır. 16550A 14.4K ve 28.8 K modemlerde çok kullanılır. Bu tip UART larda FIFO daha etkili çalışır. 16650 32 byte lık FIFO, programlanabilir X-on / X-off karakterleri içerir ve güç yönetimini destekler. 16750 Texas Instruments tarafından geliştirilmiştir. 64 byte lık bir FIFO içerir. BÖLÜM 2 : SERİ PORT KAYDEDİCİLERİ Port Adresleri ve IRQ lar Adı Adres IRQ COM 1 3F8 4 COM 2 2F8 3 COM 3 3E8 4

COM 4 2E8 3 Tablo 3: Standart Port Adresleri Yukarıda standart port adresleri verilmiştir. Eğer micro-channel özelliği olan IBM P/S2 bir bilgisayara sahipseniz adres ve IRQ lar da farklı olacaktır. LPT portları gibi COM portların taban adresleri de BIOS Veri Alanından okunabilir. Başlangıç Adresi Fonksiyonu 0000:0400 COM 1 Taban Adresi 0000:0402 COM 2 Taban Adresi 0000:0404 COM 3 Taban Adresi 0000:0406 COM 4 Taban Adresi Tablo 4: BIOS Veri Alanındaki COM Port Adresleri Yukarıdaki tablo BIOS Veri Alanında da bulabileceğimiz COM Port adreslerini göstermektedir. Her adres 2 byte yer tutmaktadır. C de yazılmış olan aşağıdaki program, bu bölgedeki adreslerin nasıl okunacağını gösterir. #include <stdio.h> #include <dos.h> void main(void) { unsigned int far *ptraddr; /* Port Adreslerinin bulunduğu bölgeye ait pointer */ unsigned int address; /* Port Adresi */ int a; ptraddr=(unsigned int far *)0x00000400; for (a = 0; a < 4; a++) { address = *ptraddr; if (address == 0) printf("com%d için port bulunamadı \n",a+1); else printf("com%d 'e bağlı adres %Xh\n",a+1,address); *ptraddr++; } } Register Tablosu

Taban Adres DLAB Read/Write Kıs. Register Adı +0 =0 Write - Transmitter Holding Buffer =0 Read - Receiver Buffer =1 Read/Write - Divisor Latch Low Byte +1 =0 Read/Write IER Interrupt Enable Register =1 Read/Write - Divisor Latch High Byte +2 - Read IIR Interrupt Identification Register - Write FCR FIFO Control Register +3 - Read/Write LCR Line Control Register +4 - Read/Write MCR Modem Control Register +5 - Read LSR Line Status Register +6 - Read MSR Modem Status Register +7 - Read/Write - Scratch Register DLAB ( Divisor Latch Access Bit ) Tablo 5: Register Tablosu Register tablosunda DLAB sütunu da yer almaktadır. DLAB 0 veya 1 olduğunda bazı registerların içeriği değişmektedir. Bu şekilde UART 8 port adresinde 12 ayrı registera (scatch register dahil) sahip olabilir. Interrupt Enable Register (IER) Bit Bit 7 Bit 6 Açıklama Reserved Reserved Bit 5 Enables Low Power Mode (16750) Bit 4 Enables Sleep Mode (16750) Bit 3 Bit 2 Bit 1 Enable Modem Status Interrupt Enable Receiver Line Status Interrupt Enable Transmitter Holding Register Empty Interrupt Bit 0 Enable Received Data Available Interrupt

Tablo 6: Interrupt Enable Register Receiving register/fifo CPU tarfından okunacak bir bilgi içerirken Bit 0 ı High konumuna getirmek Received Data Available Interrupt ı etinleştirir ve interrupt oluşur. Interrupt Identification Register (IIR) Bit Bit 6 : 7 Bit 5 Bit 4 Bit 3 Bit 1:2 Bit 0 Açıklama Bit 6 Bit 7 0 0 No FIFO 0 1 FIFO Enabled but Unusable 1 1 FIFO Enabled 64 Byte Fifo Enabled (16750 only) Reserved 0 Reserved on 8250, 16450 1 16550 Time-out Interrupt Pending Bit 2 Bit 1 0 0 Modem Status Interrupt 0 1 Transmitter Holding Register Empty Interrupt 1 0 Received Data Available Interrupt 1 1 Receiver Line Status Interrupt 0 Interrupt Pending 1 No Interrupt Pending Tablo 7: Interrupt Identification Register Interrupt Identification Register ( Kesme Belirleme Kaydedicisi ) salt okunur özelliğindedir. Bit 6 ve 7 FIFO Buffer ın durumunu verirler. Her iki bit de 0 ise aktif FIFO Buffer ı yoktur. Eğer Bit 7 aktif Bit 6 aktif değil ise UART buffer ları etkin hale gelir fakat kullanılamaz. Her iki bit de 1 olduğunda hem aktif hem de kullanılabilir duruma gelirler. Bit 4 ve Bit 5 ayrılmıştır. Bit 3 16550 ve yüksek modellerinde time-out kesmesinin durumunu gösterir. Bit 0 kesmenin gerçekleşip gerçekleşmediğini gösterir. Gerçekleşen bir kesmenin durumunu bit 1 ve 2 gösterir. Bu kesmeler öncelik durumuna göre çalışır. Line Status Interrupt en yüksek önceliğe sahiptir. Ondan sonra Data Available Interrupt, Transmit Register Empty Interrupt ve en düşük önceliğe sahip Modem Status Interrupt gelir. First In / First Out Control Register (FCR) Bit Açıklama

Bit 7 Bit 6 Interrupt Trigger Level 0 0 1 Byte 0 1 14 Byte 1 0 18 Byte 1 1 14 Byte Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Enable 64 Byte FIFO (16750 only) Reserved DMA Mode Select. Clear Transmit FIFO Clear Receive FIFO Enable FIFO's Tablo 8 : FIFO Control Register FIFO (First In First Out ) kaydedicisi salt yazılır bir kaydedicidir ve 16550 den yüksek model UART larda FIFO buffer larını kontrol eder. Bit 0 FIFO alma ve gönderme işlemini etkinleştirir. Bu bitin 0 olması FIFO alma ve gönderme işlemini durdurur ve FIFO buffer ları içindeki bilgi kaybolur. Bit 1 ve 2 alma ve gönderme FIFO buffer ların içeriğini siler. Bit 1 alma buffer ından sorumlu iken Bit 2 gönderme buffer ından sorumludur. Bu bitlerin 1 olması yalnızca FIFO içeriğini temizler shift register ları (kaydırma kaydediciler) etkilemez. Bit 3, 16550 ve üst model UART larda DMA mod seçimini sağlar. Bit 6 ve 7 Alıcı FIFO daki tetikleme seviyesini belirler. Örneğin Bit 7 1 ve Bit 6 0 konumuna getirilirse tetikleme seviyesi 8 byte olur. Alıcı FIFO daki veri 8 byte a ulaştığında Received Data Availeble Interrupt üretilir. Line Control Register ( LCR Hat Kontrol Kaydedicisi ) Bit Bit 7 Bit 6 Bits 3 : 5 Açıklama 1 Divisor Latch Access Bit 0 Access to Receiver buffer, Transmitter buffer & Interrupt Enable Register Set Break Enable Bit 5 Bit 4 Bit 3 Parity Select X X 0 No Parity

Bit 2 Bits 0 : 1 0 0 1 Odd Parity 0 1 1 Even Parity 1 0 1 High Parity (Sticky) 1 1 1 Low Parity (Sticky) Length of Stop Bit 0 One Stop Bit 1 2 Stop bits for words of length 6,7 or 8 bits or 1.5 Stop Bits for Word lengths of 5 bits. Bit 1 Bit 0 Word Length 0 0 5 Bits 0 1 6 Bits 1 0 7 Bits 1 1 8 Bits Tablo 9 : Line Control Register LCR iletimdeki temel parametreleri düzenler. Bit 7 Divisor Latch Access Bit idir. Bit 6 Durdurmayı (Break) etkinleştirir. Aktif olduğunda bilgilerin UART tan alınmasını durdurur. Bu bit 0 konumuna getirilirse Durdurma etkisiz hale gelir. Bit 3,4 ve 5 parity seçerler. Bit 3 parity nin kullanıp kullanılmayacağını belirler. Yani 0 ise parity kullanılmaz, 1 ise kullanılır. Bit 2 stop bitinin uzunluğunu belirler. Bu bitin içeriği 0 olduğunda bir stop biti, 1 olduğunda ise kelime uzunluğuna göre ya 1.5 ya da 2 stop biti üretilir. Alıcının yalnızca ilk stop bitini kontrol ettiğine dikkat edin. Bit 0 ve 1 kelime (word) uzunluğunu belirler. Günümüzde en çok 8 bitlik word kullanılmaktadır. Modem Control Register (MCR) Bit Açıklama Bit 7 Reserved Bit 6 Reserved Bit 5 Autoflow Control Enabled (16750 only) Bit 4 LoopBack Mode Bit 3 Aux Output 2 Bit 2 Aux Output 1

Bit 1 Force Request to Send Bit 0 Force Data Terminal Ready Tablo 10 : Modem Control Register Modem kontrol register ı hem okunabilir hem de yazılabilir özelliğindedir. 5, 6 ve 7 bitleri ayrılmıştır. Bit 4 döngü sınama modunu (Loopback) aktif duruma getirir. Bu modda verici seri çıkışı işaretleme konumuna getirilmiştir. Alıcı seri girişi bağlanmamıştır. Vericinin çıkışı alıcının girişine uygulanmıştır. DSR, CTS, RI ve DCD bağlı değildir. DTR, RTS, OUT1 ve OUT2 modem kontrol girişlerine bağlıdır. Bu durumda modem kontrol çıkışları etkisiz durumdadır. Bu modda iletilmek için vericinin register ına yerleştirilen her veri aynı chip üzerinde bulunan alıcı devresi tarafından alınır ve receiver buffer ında hazır bulunur. Bu yöntem UART ın çalışmasını kontrol etmek için kullanılabilir. Aux Output 2, UART-CPU işlemlerini kontrol eden harici bir devreye bağlanabilir. Aux Output 1 normalde bağlı değildir, fakat bazı kartlarda MIDI lerde kullanılan 1.8432MHZ crystal ile 4MHZ crystal arasında seçim yapmak için kullanılır. Line Status Register ( LSR - Hat Durum Kaydedicisi) Bit Açıklama Bit 7 Error in Received FIFO Bit 6 Empty Data Holding Registers Bit 5 Empty Transmitter Holding Register Bit 4 Break Interrupt Bit 3 Framing Error Bit 2 Parity Error Bit 1 Overrun Error Bit 0 Data Ready Tablo 11 : Line Status Register Line Status Register salt okunur bir kaydedicidir. Bit 7 alınan FIFo bitindeki hatayı belirtir. FIFO da tutulan byte üzerinde bir kesme, parite veya çerçeveleme hatası oluştuğunda Bit 7 high durumuna geçer. Bit 6 nın değeri 1 olduğunda gönderme kaydedicisi (transmitter holding register) ve kaydırma kaydedicisinin (shift register) içerikleri boştur. UART ın gönderme kaydedicisi paralel olarak gönderilecek bir sonraki biti saklar. Kaydırma kaydedicisi de bu biti tek hat üzerinden seri olarak gönderilecek şekle dönüştürür. Bit 5 1 olduğu zaman yalnızca gönderme kaydedicisi boş olur. Bit 6 ile Bit 5 arasındaki fark şudur : Bit 6, gönderme

kaydedicisi ve kaydırma kaydedicisi boş olduğunda seri dönüşüm olmaz ve bundan dolayı veri hattı üzerinde herhangi bir işlem yapılmaz. Bit 5 1 değerini aldığında, gönderme kaydedicisi boş olur. Böylece başka bir bit veri portuna gönderilebilir fakat kaydırma kaydedicisi kullanılarak seri dönüşümler yapılabilir. Durdurma kesmesi (break interrupt Bit 4), alıcı veri hattının Logic 0 (boş) tutulduğu zamanın, tam bir kelimenin gönderilmesi için harcanan zamandan daha fazla olduğunda oluşur. Bu başlama biti, veri bitleri, parity bitleri ve durdurma bitini de içerir. Çerçeveleme hatası (Framing Error - Bit 3), son bit durdurma biti (stop bit) olmadığı zaman oluşur. Bu durum zamanlama hatasından dolayı oluşabilir. Çerçeveleme hatası ile en sık, gönderilen verinin hızı ile UART tan alınan verinin hızı farklı olan bilgisayar bağlantılarında null modem kullanıldığında ortaya çıkar. Overrun hatası program porttan yeterince hızlı okuyamadığı zaman oluşur. Kaydedicideki değer okunmadan yeni bir bit gelirse son bit kaybolacağından işlem overrun hatası ile sonuçlanır. Bit 0, verinin UART tarafından alındığını ve okunmak için alıcının buffer ında tutulduğunu belirtir. Modem Status Register ( MSR Modem Durum Kaydedicisi ) Bit Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Açıklama Carrier Detect Ring Indicator Data Set Ready Clear To Send Delta Data Carrier Detect Trailing Edge Ring Indicator Delta Data Set Ready Delta Clear to Send Tablo 12 : Modem Status Register Modem Durum Kaydedicisindeki Bit 0, Clear To Sen hattındaki son okumadan itibaren değişimi gösterir. Bit 1 ve 3 için aynı durum söz konusudur. Bit 1 Data Set Ready hattındaki değişimi gösterirken Bit 3 Data Carrier Detect hattındaki değişimi gösterir. Bit 2 Çevrim Göstergesinde (Ring Indicator) low seviyesinden high seviyesine geçişi gösterir. Bit 4,5,6 ve 7 veri hatlarındaki okuma durumunu belirtir.

Scratch Register (Çalışma Kaydedicisi) Çalışma kaydedicisi haberleşmeden çok bir veri bitinin yazılması için kullanılır. Tek kullanıldığı yer UART ın 8250/8250B ya da 8250A/16450 dan hangisi olduğunu tespit etmektir. BÖLÜM 3 : SERİ PORTUN PROGRAMLANMASI Sorgulama veya Kesme? Bir haberleşme programı yazarken kullanılabilecek iki metod vardır. Yeni bir verinin mevcut olup olmadığını görmek için UART ı sorgulayabilirsiniz veya UART taki verinin bir kesme ürettiği zaman bu veriyi silecek bir kesme yöneticisi oluşturabilirsiniz. UART ı sorgulamak işlemciye çok fazla iş yüklediği için oldukça yavaştır ve veriyi kaybetmeden önce maksimum 34.8 Kbps hızına ulaşmaktadır. Pentium Pro dan sonra çıkan yeni işlemciler bu işi daha hızlı yapabilmektedirler. Diğer seçenek, ise bizim yaptığımız gibi, kesme yöneticisi kullanmaktır. Bu yöntem düşük hızlı bilgisayarlarda bile 115.2 Kbps hızını desteklemektedir. Termpoll.c Sorgulama (Polling) Kullanan Bir Haberleşme Program Örneği #include <dos.h> #include <stdio.h> #include <conio.h> #define PORT1 0x3F8 /* Seri Port Taban Adreslerini Tanımlar */ /* COM1 0x3F8 */ /* COM2 0x2F8 */ /* COM3 0x3E8 */ /* COM4 0x2E8 */ void main(void) { int c; int ch; outportb(port1 + 1, 0); /* Kesmeleri etkisiz duruma getirir- Port1 */ /* PORT 1 - Haberleşme Ayarları */ outportb(port1 + 3, 0x80); /* DLAB'ı ON durumuna getir */ outportb(port1 + 0, 0x03); /*Baud rate belirle-divisor Latch Low Byte */ /* Default 0x03 = 38,400 BPS */ /* 0x01 = 115,200 BPS */ /* 0x02 = 56,700 BPS */ /* 0x06 = 19,200 BPS */ /* 0x0C = 9,600 BPS */ /* 0x18 = 4,800 BPS */ /* 0x30 = 2,400 BPS */ outportb(port1 + 1, 0x00); /* Baud rate belirle-divisor Latch High Byte */ outportb(port1 + 3, 0x03); /* 8 Bits, No Parity, 1 Stop Bit */ outportb(port1 + 2, 0xC7); /* FIFO Control Register */

outportb(port1 + 4, 0x0B); /* DTR, RTS, ve OUT2'yi aç */ printf("\nhaberleşme Örnek Programı. Çıkmak için ESC tuşuna basın \n"); do { c = inportb(port1 + 5); /* Karakterin gelip gelmediğini */ /* kontrol et. */ if (c & 1) {ch = inportb(port1); /* Geldiği ise karakteri oku */ printf("%c",ch);} /* Karakteri ekranda göster */ if (kbhit()){ch = getch(); /* Bir tuşa basıldıysa tuşu oku */ outportb(port1, ch);} /*Tuşun karakter kodunu porta gönder */ } while (ch!=27); /* ESC tuşuna basıldıysa çık */ } Buff1024.c Kesme Güdümlü Örnek Bir Haberleşme Programı #include <dos.h> #include <stdio.h> #include <conio.h> #define PORT1 0x2E8 /* Port Adresleri buraya başvurur. */ /* Seri Port Taban Adresleri tanımlanır. */ /* COM1 0x3F8 */ /* COM2 0x2F8 */ /* COM3 0x3E8 */ /* COM4 0x2E8 */ #define INTVECT 0x0B /* Com Port IRQ */ int bufferin = 0; int bufferout = 0; char ch; char buffer[1025]; void interrupt (*oldport1isr)(); void interrupt PORT1INT() /* PORT1 için Interrupt Service Routine (ISR) */ { int c; do { c = inportb(port1 + 5); if (c & 1) {buffer[bufferin] = inportb(port1); bufferin++; if (bufferin == 1024) bufferin = 0;} }while (c & 1); outportb(0x20,0x20); } void main(void) { int c; outportb(port1 + 1, 0); /* Kesmeleri etkisiz duruma getirir - Port1 */ oldport1isr = getvect(intvect); /* Önceki kesme vektörünü saklar */ setvect(intvect, PORT1INT); /* Kesme Vektörü girişini ayarlar */ /* COM1-0x0C */

/* COM2-0x0B */ /* COM3-0x0C */ /* COM4-0x0B */ /* PORT 1 - Haberleşme Ayarları */ outportb(port1 + 3, 0x80); /* DLAB'ı On konumuna getir */ outportb(port1 + 0, 0x03); /* Baud rate belirle-divisor Latch Low Byte */ /* Default 0x03 = 38,400 BPS */ /* 0x01 = 115,200 BPS */ /* 0x02 = 56,700 BPS */ /* 0x06 = 19,200 BPS */ /* 0x0C = 9,600 BPS */ /* 0x18 = 4,800 BPS */ /* 0x30 = 2,400 BPS */ outportb(port1 + 1, 0x00); /* Baud rate belirle-divisor Latch High Byte */ outportb(port1 + 3, 0x03); /* 8 Bits, No Parity, 1 Stop Bit */ outportb(port1 + 2, 0xC7); /* FIFO Control Register */ outportb(port1 + 4, 0x0B); /* Turn on DTR, RTS, and OUT2 */ outportb(0x21,(inportb(0x21) & 0xF7)); /* Programmable Interrupt */ /* Controller'ı düzenle */ /* COM1 (IRQ4) - 0xEF */ /* COM2 (IRQ3) - 0xF7 */ /* COM3 (IRQ4) - 0xEF */ /* COM4 (IRQ3) - 0xF7 */ outportb(port1 + 1, 0x01); /* Veri geldiğinde kesme oluştur. */ printf("\nhaberleşme Program Örneği. Çıkmak için ESC tuşuna basın \n"); do { if (bufferin!= bufferout) {ch = buffer[bufferout]; bufferout++; if (bufferout == 1024) bufferout = 0; printf("%c",ch);} if (kbhit()){c = getch(); outportb(port1, c);} }while (c!=27); outportb(port1 + 1, 0); /* Kesmeleri kapat - Port1 */ outportb(0x21,(inportb(0x21) 0x08)); /*PIC kullanarak IRQ'ları maskele */ /* COM1 (IRQ4) - 0x10 */ /* COM2 (IRQ3) - 0x08 */ /* COM3 (IRQ4) - 0x10 */ /* COM4 (IRQ3) - 0x08 */ setvect(intvect, oldport1isr); /* Önceki kesme vektörlerini çağır */ } Kesme Vektörleri ( Interrupt Vectors )

IRQ ları öğrendikten sonraki adım kesme vektörlerini veya yazılım kesmelerini bulmaktır. Temel olarak her 486 işlemcinin 0 dan 255 e numaralandırılmış 256 kesme vektörü bulunmaktadır. Bu vektörlerden her biri Interrupt Service Routine nin (ISR) adresi olan 4 byte lık bir kod içermektedir. INT (Hex) IRQ Kullandığı Birim 08 0 System Timer 09 1 Keyboard 0A 2 Redirected 0B 3 Serial Comms. COM2/COM4 0C 4 Serial Comms. COM1/COM3 0D 5 Reserved/Sound Card 0E 6 Floppy Disk Controller 0F 7 Parallel Comms. 70 8 Real Time Clock 71 9 Reserved 72 10 Reserved 73 11 Reserved 74 12 PS/2 Mouse 75 13 Maths Co-Processor 76 14 Hard Disk Drive 76 15 Reserved Tablo 13 :Kesme Vektörleri (Donanım) Yukarıdaki tabloda IRQ larla birlikte kullanılan kesmeler gösterilmiştir. RS232 ile haberleşirken diğer 240 kesmenin bilinmesi gerekmez. Örneğin IRQ su 4 olan COM3 ü kullanıyorsak kesme vektörü 0C olur. C programlama dilini kullanırken setvect(0x0c, PORT1INT); komutu yardımı ile vektör atanır. Bununla birlikte bu işlemi gerçekleştirmeden önce, eski vektör adreslerini saklayıp işlem bittikten sonra geri yüklemek oldukça kullanışlıdır. Bu oldport1isr=getvect(intvect); komut satırı ile yapılır. Burada oldport1isr void interrupt ( * oldport1isr) satırı işle tanımlanmıştır. Interrupt Service Routine (ISR)

PORT1INT, Interrupt Service Routine (ISR) olarak adlandırılan kesme yöneticisinin etiketidir. Bu etikete herhangi bir isim verilebilir. Bununla birlikte bazı DOS rutinlerini çağırırken problem çıkabilir. void interrupt PORT1INT() { int c; do { c = inportb(port1 + 5); if (c & 1) { } } while (c & 1); buffer[bufferin] = inportb(port1); bufferin++; outportb(0x20,0x20); } if (bufferin == 1024) bufferin = 0; Yukarıdaki örnekte alınacak bir karakter olup olmadığı kontrol edilir ve eğer varsa onu UART dan silerek hafızada yer alan buffer a yerleştirir. Programın son satırında Programmable Interrupt Controller a kesmenin bitiğini bildiren outportb(0x20,0x20); satırı yer almaktadır. Programmable Interrupt Controller (PIC) donanım kesmelerini işler. Çoğu kişisel bilgisayarlarda (PC), farklı adreslerde konumlandırılmış iki adet PIC bulunmaktadır. Birisi 0 dan 7 ye kadar diğeri de 8 den 15 e kadar olan IRQ ları işler. Çoğu seri haberleşmelerde 7 den önceki IRQ lara ihtiyaç duyulur ve böylece 0200 Hex adresinde bulunan PIC1 kullanılır. Bit Disable IRQ Fonksiyon 7 IRQ 7 Parallel Port 6 IRQ 6 Floppy Disk Controller 5 IRQ 5 Reserved/Sound Card 4 IRQ 4 Serial Port 3 IRQ 3 Serial Port 2 IRQ 2 PIC2

1 IRQ 1 Keyboard 0 IRQ 0 System Timer Tablo 14 : PIC1 Control Word (0x21) Bit Disable IRQ Fonksiyon 7 IRQ 15 Reserved 6 IRQ 14 Hard Disk Drive 5 IRQ 13 Maths Co-Processor 4 IRQ 12 PS/2 Mouse 3 IRQ 11 Reserved 2 IRQ 10 Reserved 1 IRQ 9 IRQ2 0 IRQ 8 Real Time Clock Tablo 15 : PIC2 Control Word (0xA1) Çoğu PIC tanımlamaları BIOS tarafından yapılır. Dikkat edilmesi gereken yalnızca iki komut vardır. Birincisi maskelemek istediğimiz kesmeyi seçen outportb(0x21,(inportb(0x21) & 0xEF); komutudur. Diğer komut ise kesmenin bittiğini PIC e bildiren outportb(0x20,0x20); komutudur. Bu komut daha düşük öncelikli kesmenin kabul edilmesi için Interrupt Service Routine nin sonuna yazılır. UART Konfigurasyonu İlk komut olarak UART da kesme üretimini önlemek iyi bir yöntemdir. Bu şekilde başlangıç işlemleri UART tarafından engellenemez. İkinci adım olarak haberleşme hızı belirlenmeli. Bunun için LCR deki (Line Control Register) Bit 7 high seviyesine getirilip Divisor Latch High veya Low bitlerine ulaşım sağlanmalı. 16450 ve 16550 tip UART lar için uygun olan 38,400 bps seçiyoruz. Bu işlem 3 bölenini gerektirir ve böylece divisor latch high byte 0x00 iken divisor latch low byte 0x03 tür. Bir sonraki adım olarak Interrupt Enable Register ve alıcı/verici buffer larını kullanabilmek için Divisor Latch ulaşımı iptal edilmeli. Bunu yapmak için kaydedici içeriğine 0x00 yazılmalı. Ayrıca hat kontrol kaydedicisine 0x03 yazmak DLAB ı kapatır. Programdaki bir sonraki satır FIFO bufferlarını açmaktır. Tetikleme seviyesini 14 byte yapabiliriz. Böylece bit 6 ve 7 1 olurlar. FIFO buffer larını başlangıçta sıfırlamak yaralıdır. Böylece FIFO buffer larında bir önceki programdan kalan kalıntılar silinir. Bit 6 ve 7 nin otomatik olarak sıfırlandıklarını gözönüne alırsak aynı işlemi bu bitler için tekrarlamanın gereği yok. Ana Rutin ( Döngü )

do { if (bufferin!= bufferout){ if (kbhit()){ } } while (c!=27); c = getch(); } ch = buffer[bufferout]; bufferout++; i f (bufferout == 1024) bufferout = 0; printf("%c",ch); outportb(port1, c); Bu program parçası ESC (ASCII 27) tuşuna basılana kadar devam eder. if şartlı dallanma komutu bir tuşa basılıp basılmadığını kontrol eder. (kbhit()) Eğer basıldıysa getch() komutu ile bu tuşun karakterini alır ve alıcı buffer ına gönderir. Bu programda, Haberleşme Programını kullanan kişinin UART ın gönderme hızından daha hızlı bir şekilde yazamayacağı varsayılmıştır. Bununla birlikte, eğer program veri göndermek istiyorsa, verici kaydedicisine bir şey yazmadan önce Line Status Register ında Bit 5 in 1 olup olmadığı kıontrol edilir. Yazılım Yolu ile UART Tipinin Belirlenmesi Bilgisayarı açmadan UART tipini öğrenmek mümkündür. UART tiplerinin tanıtıldığı bölümden de görüldüğü gibi her bir UART ın belirleyici özellikleri vardır. Birzim yapmamız gereken bu özellikleri test etmektir. Yapılacak ilk prosedür FIFO control register da Bit 0 ı 1 seviyesine getirmektir. Bu işlem FIFO buffer larını etkin duruma getişrmeye çalışır. Bundan sonra kesme belirleme kaydedicisinde bit 6 ve 7 okunur. Her iki bit de 1 ise FIFO buffer ları etkin durumdadır. Bu UART ın 16550a olduğu anlamına gelir. Eğer etkin FIFO buffer ı yoksa büyük ihtimalle 16450 UART tır, fakat çok eski sistemlerde 8250,8250A veya 8250B olabilir. AT bilgisayarlar 8250 tipi UART ların uyum gösteremeyeceği yüksek bir hıza sahiptirler ve bu bakımdan bir AT sistemde yer almaları çok nadir bir durumdur. Ancak yine de bunları test etmek istiyorsanız 16550 ve 16550A ları diğerlerinden ayırt etmek için yukarıdaki işlemler

tekrarlanır. Eğer FIFO lar etkin değil ise muhtemelen UART 16450, 8250,8250A veya 8250B dir. Bu işlemlerden sonra çalışma kaydedicisine (scratch register) bir değer yazıp okutun ve sonuçları karşılaştırın. Yazılan değer ile okunan değer aynı ise bu çalışma kaydedicisinin olduğu anlamına gelir. Eğer sonuçlar çelişiyor ise ya çalışma kaydedicisi yok ya da çalışmıyor demektir. Yukarıdaki UART tanımlamalarına bakarak yazılan değer aynen okunabiliyorsa UART 16450 veya 8250A dır. (her ikisi de çalışma kaydedicisine sahip) Yazılan değer okunamıyorsa 8250 veya 8250B dir. 16750 64 byte FIFO ya sahip. Bunu test etmek için en kolay yol FIFO Control Register ı kullanarak 64 byte buffer ı etkinleştirmek ve Interrupt Identification Register ın durumunu okumaktır. BÖLÜM 4 : RS-232 Portu ile Aygıtların Haberleşmesi RS-232 Dalga Şekilleri RS232 iletişimi asenkron özelliğindedir. Yani veri ile birlikte bir clock sinyali gönderilmez. Şekil 4: TTL/CMOS Serial Logic Waveform Yukarıdaki şekil 8N1 formatı kullanıldığında UART tan beklenen dalga şeklini göstermektedir. 8N1 8 veri biti, No Parity ve 1 Stop bitini ifade etmektedir. RS232 hattı boşta iken Logic 1 durumundadır. İletim Logic 0 olan bir Start biti ile başlar ve her bit hattan gönderilir. İlk önce LSB (Least Significant Bit) biti gönderilir. Son olarak Stop Biti (Logic 1) gönderilerek iletim tamamlanır. Şekilde Stop Bitinden sonraki bit de Logic 0 olarak gösterilmiştir. Bu, başka bir kelimenin devam ettiği anlamına gelir ve bu bir Start Bitidir. Eğer başka gelen veri yoksa hat Logic 1 seviyesinde kalır. Veri hattı tüm bir kelimeyi gönderecek kadar uzun bir süre Logic 0 seviyesinde tutulursa bu Break sinyali anlamına gelir. Bundan dolayı hat boş duruma (Logic 1) getirilmez ise alıcı bunu break sinyali olarak algılar. Bu şekilde gönderilen veri çerçevelenmiş (framed) özelliğine sahiptir. Yani veri Start Biti ile Stop Biti arasında çerçevelenmiştir. Yukarıdaki şekil yalnızca UART taki sinyaller ile ilgilidir. RS232 standardında +3 volt ile +25 volt arası Boşluk (Space Logic 0) belirtir; -3 volt ile -25 volt arası İşaret (Mark Logic 1) belirtir. Bu voltlar arasındaki bir değer (-3 ile +3 arası) tanımsızdır. Bundan dolayı sinyal RS232 Seviye Dönüştürücü ye uygulanmaktadır.

Waveform Şekil 5 : RS-232 Logic Yukarıdaki dalga şekli RS-232 port üzerindeki Alıcı ve Verici hatlarına uygulanmaktadır. Bu hatlar seri veri taşırlar. RS-232 port üzerinde bazı paralel hatlar da vardır. Bu hatlar (RTS, CTS, DCD, DSR, DTR, RTS ve RI) da RS-232 Logic Seviyesindedirler. RS-232 Seviye Dönüştürücüleri Kullandığımız dijital aygıtların neredeyse tümü TTL veya CMOS logic seviyelerine ihtiyaç duyarlar. Bundan dolayı bir aygıtı RS232 portuna bağlamadan önce yapılacak ilk iş RS-232 seviyelerini 0 ve 5 volta dönüştürmektir. Daha önce de bahsedildiği gibi bu işlem RS-232 Seviye Dönüştürücüleri tarafından yapılmaktadır. 1488 RS-232 Driver ve 1489 RS-232 Receiver en çok kullanılan RS-232 Seviye Dönüştürücüleridir. Her paket tek tip 4 çevirici içermektedir, Sürücü (Driver) veya Alıcı (Receiver). Sürücü iki besleme hattını gerektirir, +7.5 ten +15 e ve 7.5 ten 15 e. Tahmin edilebileceği gibi yalnızca +5V bir kaynağın olduğu durumlarda birçok sorun ortaya çıkar. Ancak bu devrelerin avantajı ucuz olmalarıdır. Şekil 6: MAX-232 (RS-232 Receiver/Driver) Pin Bağlantıları Şekil 7 : Genel bir MAX-232 Devresi Diğer bir aygıt da 5V tek bir kaynaktan +10v ve 10v üreten MAX-232 dir. Bu entegre aynı zamanda iki alıcı ve iki verici içermektedir. Yalnızca alıcı ve verici veri hatlarının kullanılacağı durumlar için oldukça kullanışlıdır. Biri alıcı hattı için biri de verici hattı için olmak üzere iki ayrı chip kullanmak zorunda değilsiniz.

8250 Uyumlu UART lar UART lar kullanılmadan önce başlangıç değeri verilmesi gereken ve veri ve adres hatları ile ulaşılabilen konfigurasyon kaydedicilerine sahiptir. Eğer aygıtınız bir Mikroişlemci kullanıyorsa bu bir sorun oluşturmaz. Şekil 8 : 16550, 16450 ve 8250 UART lar için Pin Bağlantıları CDP6402, AY-5-1015 / D36402R-9 ve Diğer UART lar CDP6402, AY-5-1015 / D36402R-9 ve uyumlu UART tipleri de vardır. Bunların 8250 ve uyumlularından farkı ayrı alıcı ve verici hatlarının olması ve pinlerinin farklı logic seviyelerine bağlanarak düzenlenebilmesidir. Mikroişlemci olamayan uygulamalarda çok kullanışlıdırlar. Örneğin ADC0804 (Analog to Digital Converter) UART a bağlandığında. CDP6402 nin Control Register ı Parity Inhibit (PI), Stop Bit Select (SBS), Character Length Select (CLS1 and 2) ve Even Parity Enable (EPE) den oluşmaktadır. Şekil 9 : CDP6402 Pin Bağlantıları Pin Number Kıs. Tam Adı Açıklama

Pin 1 VDD + 5v Supply Connect to Supply (VCC +5V) Rail Pin 2 NC Not Not Connected Connected Pin 3 GND Ground Ground Pin 4 RRD Receiver Register When driven high, outputs RBR8:RBR1 are High Impedance. Disable Pin 5:12 RBR8: Receiver Receiver's Data Bus RBR1 Buffer Register Pin 13 PE Parity Error When High, A Parity Error Has Occurred. Pin 14 FE Framing Error When High, A Framing Error Has Occurred. i.e. The Stop Bit was not a Logic 1. Pin 15 OE Overrun Error When High, Data has been received but the Data Received Reset had not yet been activated. Pin 16 SFD Status Flag Disable Pin 17 RRC Receiver When High, Status Flag Outputs (PE, FE, OE, DR and TBRE) are High Impedance x16 Clock input for the Receiver Register. Register Clock Pin 18 ndrr Data Received Reset Active Low. When low, sets Data received Output Low (i.e. Clears DR)

Pin 19 DR Data Received Pin 20 RRI Receiver When High, Data has been received and placed on outputs RBR8:RBR1. RXD - Serial Input. Connect to Serial Register In Port, Via RS-232 receiver. Pin 21 MR Master Reset Resets the UART. UART should be reset after applying power. Pin 22 TBRE Transmitter When High, indicates that Transmitter Buffer Register Buffer Register is Empty, thus all bits including the stop bit have been sent. Empty Pin 23 ntbrl Transmitter Buffer Load / Strobe Active Low. When low, data present on TBR8:TBR1 is placed in Transmitter Buffer Register. A Low to High Transition on this pin, then sends the data. Pin 24 TRE Transmitter Register Empty Pin 25 TRO Transmitter Register Out When High, Transmitter Register is Empty, thus can accept another byte of data to be sent. TXD - Serial Output. Connect to Serial Port, Via RS-232 Transmitter. (TXD) Pin 26:33 TBR8: Transmitter Data Bus, for Transmitter. Place Data TBR1 Buffer here which you want to send. Register Pin 34 CRL Control Register When High, Control Register (PI, SBS, CLS2,CLS1,EPE) is Loaded. Can be Load

tied high, so changes on these pins occur instantaneously. Pin 35 PI Parity Inhibit When High, No Parity is Used for Both Transmit andreceive. When Low, Parity is Used. Pin 36 SBS Stop Bit Select A High selects 2 stop bits. (1.5 for 5 Character Word Lengths) A Low selects one stop bit. Pin 37:38 CLS2: Character Selects Word Length. 00 = 5 Bits, CLS1 Length Select Pin 39 EPE Even Parity Enable Pin 40 TRC Transmitter 01 = 6 Bits, 10 = 7 Bits and 11 = 8 Bits. When High, Even Parity is Used, When Low, Odd Parity is Used. 16x Clock input for Transmitter. Register Clock Tablo 16 : CDP6402, AY-5-1015 / D36402R-9 ve uyumlu UART lar için Pin Tanımlamaları Bu chiplerin 8250 lere göre bir dezavantajı da Programmable Baud Rate Generator ve doğrudan crystal bağlanma imkanı olmamasıdır. Bu durumlarda 74HC4060 14-bit Binary Counter ve Oscillator kullanılabilir.

Şekil 10 : 74HC4060 kullanan Baud Rate Generator Tablo 17 : 74HC4060 kullanılarak üretilen muhtemel Baud Rate değerleri.