Yeni tasarım, test yayınıdır. Gördüğünüz hataları lütfen bildiriniz.

HSERIN – PBP Türkçe

HSERIN {ParityLabel,}{Timeout,Label,}[Item{,...}]

Donanımsal olarak asenkron seri haberleşmeyi destekleyen cihazların, donanımsal seri portu üzerinden bir veya birden fazla veriyi almak için kullanılır.

HSERIN, PicBasic’de bulunan asenkron seri haberleşme fonksiyonlarından biridir. Bu fonksiyon, sadece donanımsal olarak USART birimi olan cihazlarda kullanılabilir. Seri giriş pinini ve diğer parametreleri öğrenmek için cihazın kullanım kılavuzuna (“datasheet”) bakılmalıdır. Seri haberleşme parametreleri ve “baud rate” değeri DEFINE ile belirtilir.


' Seri iletişim ile bilgi almak için alma yazmacını ("register") ayarla.
DEFINE HSER_RCSTA 90h

' Seri iletişim ile bilgi göndermek için gönderme yazmacını ("register") ayarla.
DEFINE HSER_TXSTA 20h

' "Baud rate" değerini ayarla.
DEFINE HSER_BAUD 2400

' SPBG yazmacını ("register") direkt olarak ayarla. (Normalde HSER_BAUD ile ayarlanır.)
DEFINE HSER_SPBRG 25

HSER_RCSTA, HSER_TXSTA ve HSER_SPBRG sırasıyla PIC içerisinde bulunan, RCSTA, TXSTA ve SPBRG adlı yazmaçlara (“register”) DEFINE ile belirtilmiş onaltılık tabandaki değerleri atar. Kullanılan cihaza göre en doğru bilgiyi edinmek için, cihazın Microchip tarafından hazırlanmış kullanma klavuzuna (“datasheet”) bakılmalıdır.

TXSTA yazmaçının (“register”), BRGH biti (bit 2) “baud rate” üreticisinin yüksek hızı modunu kontrol eden bir bittir. Bazı osilatör değelerinde, bazı “baud rate” değerlerini düzgün bir şekilde elde etmek için bu bitin 1 olarak ayarlanması gerekmektedir. Bu, HSER_TXSTA parametresinin 20h yerine 24h ile ayarlanması ile mümkündür. Donanımsal seri iletişim “baud rate” tablosu ve detaylı bilgiler için kullanılan cihazın Microchip tarafından hazırlanmış kullanım klavuzuna (“datasheet”) bakılabilir.

HSERIN fonksiyonu “baud rate” değerini hesaplarken osilatör hızının 4 Mhz olduğunu var saymaktadır. Diğer osilatör hızlarında fonskiyonun doğru çalışabilmesi için, osiltaör hızı DEFINE ifadesi programda belirtilmelidir.

Opsiyonel olarak Timeout ve Label parametreleri, belirlenen bir süre içerisinde herhangi bir karakter alınmadığı takdirde programın, istenilen bir yerden devam etmesini sağlamak için kullanılabilir. Timeout parametresine verilen değer milisaniye cinsinden süreyi belirtmektedir. Eğer seri haberleşme giriş pini Timeout parametresi ile belirtilen süre kadar boşta kalırsa, program, Label parametresi ile belirtilmiş kısma atlayacaktır.

Öntanımlı olarak seri iletişim veri formatı 8N1, 8 data biti, eşlik (“parity”) yok, 1 bitiş (“stop”) biti, olarak ayarlanmıştır. 7E1, 7 data biti, çift eşlik (“parity”), 1 bitiş (“stop”) biti veya 7O1, 7 data biti, tek eşlik (“parity”), 1 bitiş (“stop”) biti ayarlaması DEFINE kullanılarak yapılabilir.

' Çift eşlik ("parity") isteniyorsa
DEFINE HSER_EVEN 1

' Tek eşlik ("parity") isteniyorsa
DEFINE HSER_ODD 1

HSER içeren, DEFINE ile yapılan tüm tanımlamar, HSERIN ve HSEROUT fonksiyonlarını da etkilemektedir.

Opsiyonal olarak ParityLabel parametresi ile programın içinde bir etiket belirtilebilir. Program, eşlik (“parity”) hatası içeren bir karakter alması durumda belirtilen etiketten devam edecektir. Bu özellik sadece yukarıda verilen iki adet tanımlamanın birinin kullanılması durumunda kullanılmalıdır.

Donanımsal seri port sadece 2 byte büyüklüğünde tampona (“buffer”) sahip olduğundan, gelen karakterlerin yeterli sıklıkta okunmaması durumunda kolaylıkla taşabilmektedir (“overflow”). Böyle bir durumda, USART birimi yeni karakter alımını durdurmaktadır ve USART biriminin sıfırlanması gerekmektedir. Taşma (“overflow”) durumunda sıfırlama işlemi RCSTA yazmacının (“register”) CREN bitininin değeri değiştirilerek (“toggling”) – ? -> 0 -> 1 – yapılabilir. DEFINE ifadesi ile bu hatanın otomatik olarak düzeltilmesi sağlanabilir. Fakat, böyle bir durumda bir hatanın oluşup oluşmadığı ve karakter kayıplarının yaşanıp yaşanmadığı anlaşılamamaktadır. Aşağıdaki ifade, sıfırlama işleminin otomatik olarak yapılmasını sağlar.

DEFINE HSER_ CLROERR 1

Hatayı elle düzeltmek için program içinde aşağıdakiifade kullanılabilir:

RCSTA. 4 = 0
RCSTA. 4 = 1

Seri haberleşme ile bilgi alımı donanımsal olarak yapıldığından, RS-232 sürücüsü (Örn: MAX232) kullanmadan sinyal tipini terslenmiş (“inverted”) şekilde algılamak mümkün değildir. Bundan dolayı HSERIN fonksiyonu kullanıldığında uygun bir sürücü devresi kullanılmalıdır.

2 adet donanımsal seri portu bulunan cihazlarda, PIC17Cxxx serisi gibi, HSERIN fonksiyonu sadece ilk porta ulaşacaktır. İkinci port sadece yazmaçlara (“register”) direkt erişim ile ayarlanıp, okunabilir. Alternatif olarak aşağıdaki DEFINE ifadesi ile HSERIN komutuna birinci port yerine, ikincisini kullanması söylenebilir.

DEFINE HSER_PORT 2

HSERIN fonksiyonu, SERIN2 fonksiyonu ile aynı manipülatörlerin kullanımını desteklemektedir. Konu ile ilgili detaylı bilgi için lütfen SERIN2 fonksiyonun açıklamasına bakınız.

Manipülatör İşem
BIN{1..16} İkilik (“binary”) tabanda okuma yap.
DEC{1..5} Onluk (“decimal”) tabanda okuma yap.
HEX{1..4} Onaltılık (“hexadecimal”) tabanda okuma yap.
SKIP n Alınan n karakteri atla.
STR ArrayVar\n{\c} n karakterden oluşan ya da opsiyonel olarak c karakteriyle biten “string” (katar) tipindeki veriyi al.
WAIT ( ) Belirtilen karakter dizisi gelene kadar bekle.
WAITSTR ArrayVar{\n} Belirtilen “string” (katar) gelene kadar bekle.

Örnek

HSERIN [B0, dec W1]

Bunlara da Bakın

  • SERIN
  • SERIN2
  • SEROUT
  • SEROUT2
  • HSEROUT

Tüm fonksiyonların listesine buradan bakabilirsiniz.

Bu yazı, “İzoelektronik – Atölye” grubu tarafından, 90alper90 ve Hazar kullanıcı adlı grup üyelerinin ortak, aktif çalışması ile hazırlanmıştır.


Yorum yapabilmeniz ya da soru sorabilmeniz için giriş yapmanız gerekmektedir.

Hoşgeldiniz Ziyaretçi. Lütfen giriş yapın veya kayıt olun.
E-posta adresinize aktivasyon iletisi gelmediyse lütfen buraya tıklayın.