• Sonuç bulunamadı

JAL, Wouter Van Ooijen tarafından 16F84, 16C84, 16F877, Scenix SX18 ve SX28 gibi mikrokontroler leri programlamak için geli tirmi yüksek seviyeli bir programlama dilidir.

Bilinen bilgisayar komutları ile kolayca mikrokontroller programlanmasını sa layan bu programlama dili derleyicisini ve kütüphane dosyalarını internetten bedava temin edebilir. Ayrıca programlama yaparken assembler komutlarını da kullanabilir.

4.1. Jal ile Programlama

Alıcı ile PC arasında seri ileti imi kurmak, alınan bilgiyi ekranda görmek ve bilgi kayıdını yapmak için gerekli olan yazılımda JAL programı kullanılmı tır. JAL dilinde yazılım yapabilmek için gerekli olan komutların bilinmesi gerekmektedir.

4.1.1. Register tanımlama

Jal ile mikrokontroller içerisinde mevcut olan registerları bit veya byte eklinde istedi imiz isimle tanımlayabiliriz.

Örnek: var byte, alınan_data

Yukarıdaki komutta program kullanılmayan registerlardan birini alınan_data eklinde isimlendirir.

Yukarı da yazılan komut satırı ile bir a biti tanımlanmı ve ba langıç de eri olarak lojik 1 atanmı tır. Byte içinde aynı komut satırı kullanılabilir ve 0’dan 255’e kadar bir ba langıç de eri atanabilir.

var byte n = 1, m = 257

Aynı anda birden fazla bit veya byte tanımlanabilir.

const byte, sabit_sayi = 125

Bu komut satırı ile de program içinde kullanılacak sabit bit veya byte’lar tanımlanabilir.

4.1.2. Port tanımlama

Kullanılan porttaki pin sayısı kadar I/O (gir -çıkı ) tanımlanabilir. Örne in 16f84 için 13 tane I/O kullana biliriz. Aksi takdir de derleyici hata verir ve derleme i lemini durdurur.

Örnek :

pin_a0_direction = input....A portunun sıfırıncı pinini input (giri ) yapar. port_b_direction = all_output ...B portunun tamamını output (çıkı ) yapar.

Buraya kadar anlatılanlardan bir örnek yapacak olursak ;

Örnek: Port b’yi kullanarak bir yürüyen ı ık programı yazalım.

*** yürüyen ı ık programı ****

include 16f84_4 -- Programı hangi mikrodenetleyici için yazıyorsak onun için gerekli derleme ayarlarını içerir.

include jlib -- Kullandı ımız komutları içeren lib dosyalarını içerir.

var byte bekleme_suresi – Bekleme süresi isminde bir byte’lık register tanımlanır.

port_b_direction = all_output -- b portunun tamamını çıkı yapılır.

bekleme_suresi = 25 -- 1 ile 255 arası de er vererekten ı ı ın kayma zamanını ayarlayabiliriz -- Burada 25 alınmı tır, de i tirebilir.

port_b = 0b_0000_0001 -- Birinci ı ık yanıyor.

delay_10ms(bekleme_suresi) -- 250 msn bekliyor (10msn*25=250 msn) port_b = 0b_0000_0010 -- Birinci sönüyor, ikinci yanıyor.

delay_10ms(bekleme_suresi) – Bekleme yapılıyor.

port_b = 0b_0000_0100 -- kinci sönüyor, üçüncü yanıyor. delay_10ms(bekleme_suresi) port_b = 0b_0000_1000 delay_10ms(bekleme_suresi) port_b = 0b_0001_0000 delay_10ms(bekleme_suresi) port_b = 0b_0010_0000 delay_10ms( bekleme_suresi) port_b = 0b_0100_0000 delay_10ms(bekleme_suresi) port_b = 0b_1000_0000 delay_1ms(bekleme_suresi) 4.1.3. De er tipleri

Programlama esnasında kullanılan sayılar binary, hexedecimal, decimal veya ascıı eklinde de erler alabilirler.

Örnek :

Gidecek_data = 0b_0101_0101 –- binary Gidecek_data = 0x_55 –- hexedecimal

Gidecek_data = 85 -- now decimal Gidecek_data = “a” – ascıı

4.1.4. Kullanılan operatörler

JAL dilinde programlama yapılırken kullanılacak operatörler Tablo 4.1 de verilmektedir.

Tablo 4.1. Programla yaparken kullanılacak operatörler

operator Priority interpretation left argument right argument result

! 5 monadic not Bit bit

! 5 monadic not Byte byte

+ 5 monadic plus Byte byte

- 5 monadic minus Byte byte

* 4 Multiplication byte Byte byte

/ 4 Division byte Byte byte

% 4 Modulo byte Byte byte

+ 3 Plus byte Byte byte

- 3 Minus byte Byte byte

<< 2 shift left byte Byte byte >> 2 shift right byte Byte byte

> 2 larger than byte Byte bit

< 2 less than byte Byte bit

>= 2 larger than or equal byte Byte bit < = 2 less than or equal byte Byte bit

== 2 Equal byte Byte bit

!= 2 not equal byte Byte bit

& 1 And bit Bit bit

& 1 And byte Byte byte

| 1 Or bit Bit bit

| 1 Or byte Byte byte

^ 1 Xor bit Bit bit

Örnek :

If gelen_data == 5 then pin_a0 = low end if sayici = sayici + 1

4.1.5. Döngü komutlar

Programlama dillerinin hepsinde kullanılan döngü komutları JAL dilinde de kullanılmaktadır. JAL dilinde döngü komutları ko ulsuz döngüler ve daimi döngüler (forever loop) olmak üzere ikiye ayrılırlar. Programlamada daimi döngü gerekli oldu u zaman kullanılır.

Örnek : Sürekli pin_a0’ı kontrol eden pin_a0’ın durumuna göre pin_a1’i lojik 1 veya 0 yapan mikrokontrollır programı :

include 16f84_4 include jlib

pin_a0_direction = input pin_a1_direction = output

pin_a1 = low --- pin a1’in ba langıç de eri forever loop

if pin_a0 == high then pin_a1 = high else pin_a1 = low end if end loop • Ko ullu döngü

Örnek :

while r > y loop d = d + 1 r = r - y end loop

For: Bir de ere kadar döngü yapmak istedi imizde kullanılır.

Örnek :

for 100 loop a = a + 1 end for

art Komutu (If)): Programlamada bazı arlar sa landı ında olması gereken olayları gerçekle tirmek için kullanılır.

Örnek : if a > b then x = a else x = b end if

4.1.6. Procedure ve function tanımlama

Programlamada yapılacak i lemleri yerine getiren alt programlardır ve programlarda kalıplar halinde kullanılırlar. Bu kalıp örnekte verilen kalıptır ve her procedure veya function bir isimle adlandırılmalıdır. Procedure veya function ça rılırken bu verilen isimler kullanılır.

Örnek :

Proceudre tanım örne i:

procedure zero( byte out x ) is begin x = 0

end procedure

Function tanım örne i :

function reverse( byte in x ) return byte is byte y for 8 loop asm rrf x, f asm rlf y, f end loop return y end function

Return Komutu: Alt programlardan geri ana programa dönmek için kullanılır.

Örnek :

function root( byte in x ) return byte is var byte n = 15

forever loop

if n * n <= x then return n end if n = n - 1

end loop end function

4.1.7. Asembler komutları kullanma

Örnek :

procedure first_set( byte in x, byte out n ) is assembler -- assembler block

local loop, done clrf n loop : btfsc x, 0 goto done incfsz n, f rrf x goto loop done : end assembler end procedure

4.1.8. Aritmetik ve lojik i lem komutları

Lojik i lemler: JAL içerisinde lojik i lemcileri gerçekle tirebilmek için Tablo 4.2 den yararlanılabilir. E er data bit tanımlı ise yalnızca and, or ve xor i lemlerine tabi tutulabilir.

Tablo 4.2. Lojik i lemler

Operator Priority Interpretation Left Argument Right Argument Result

<< 2 shift left Byte Byte byte

>> 2 shift right Byte Byte byte

& 1 And Bit Bit bit

& 1 And Byte Byte byte

| 1 Or Bit Bit bit

| 1 Or Byte Byte byte

^ 1 Xor Bit Bit bit

Örnek :

d = d | 1 -- d datasını 1 ile or lojik i lemine tabi tutar

e er d = 0b_0000_1100 sa i lem sonunda d = 0b_0000_1101 olur. d << d -- d datasını sola kaydırır. Mesela d = 0b_0001_0001 ise i lem sonunda d = 0b_0010_0010 olacaktır.

Aritmetik i lemler: Jal ile Tablo 4.3’de gösterilen aritmetik i lemler kullanılabilir. Ayrıca tabloda belirtilmeyen ve jal’e sonradan ilave edilmi math kütüphanesi sayesinde JAL ile 24 byte çarpma, toplama, çıkarma ve bölme i lemleri yapılabilmektedir. Bu i lemlerden yalnızca bölme i lemi tam olarak düzgün çalı mamaktadır. stenildi i takdirde kullanıcı kendi kütüphanesinde yazarak yapmak istedi i i lemleri yerine getirebilir. 16FXXX serilerinde kayan nokta i lemleri yapılamamaktadır. Bu yüzden sonuçlar tam sayıdır.

Byte ile toplama ve çıkarma i lemleri yaparken dikkat etmemiz gereken bazı hususlar unlardır.

• Toplama sonuçları i lemcinin 8 bit olmasından dolayı mod 256 eklindedir. Mesela d = 255 ise d = d + 1 i leminin sonucunda d = 0 olur.

E er toplama sonuçlarımızın 255 de erini a ma durumları olursa yeni algoritmalar oluturmamız veya math kütüphanesini kullanmamız gerekmektedir.

• Çıkarma i lemi i aretsiz sayılar için kullanılmalıdır.

• Çıkarma i lemi yapılacak sayı çıkan sayıdan küçükse sonuç 0’dan çıkarılarak bulunur ve pozitiftir. Bunu bilmemiz i lemlerin do rulu u açısından önemlidir. Mesela d=0b_0000_0000 ise d = d - 1 i leminin sonucu d=0b_1111_1111 olur. Sonuçu 0’dan çıkarırsak d=1 olur. Böylece sonuçun mutlak de erini elde etmi oluruz.

Tablo 4.3. Aritmetik i lemler

Operator Priority Interpretation Left Argument Right Argument Result

* 4 Multiplication byte Byte byte

/ 4 Division byte Byte byte

+ 3 Plus byte Byte byte

- 3 Minus byte Byte byte

4.1.9. Kütüphane dosyaları

JAL derleyicisi ile birlikte a a ıda belirtilen kütüphane dosyalarıda gelmektedir. Bu dosyalar lib dosyası içerisinde saklanmaktadır. Bir sonraki yazımızda lib dosyası olu turmayı alnatmayı dü ünüyorum. Bu sayede jal’e yeni komutlar ekleyebiliriz.

• Jlib(jpic, jascii, jdelay, jseven) • Interval • Hd447804, Hd447808 • I2c • Lm75 • Serial • Random3

Jlip kütüphanesi: Bu kütüphane dosyası jpic, jascii, jdelay, jseven dosyalarını içermektedir. Bu dosyaların görevleri:

• jpic: Kullanılan pic’e ayit bilgilerin bulundu u dosyadır. Portlarla, hafıza ve registerlarla ilgili komutlar bu dosyada saklanır.

• jascii: Programlama yaparken de er olarak ascii karakterleri kullanmamızı sa layan dosyadır.

• jdelay: Zaman gecikmesi sa lamak için kullanılan komutları içermektedir.

Bunlar: delay_1us( byte in x = 1 ) delay_2us( byte in x = 1 ) delay_5us( byte in x = 1 ) delay_10us( byte in x = 1 ) delay_20us( byte in x = 1 ) delay_50us( byte in x = 1 ) delay_100us( byte in x = 1 ) delay_200us( byte in x = 1 ) delay_500us( byte in x = 1 ) delay_1ms( byte in x = 1 ) delay_2ms( byte in x = 1 ) delay_5ms( byte in x = 1 ) delay_10ms( byte in x = 1 ) delay_20ms( byte in x = 1 ) delay_50ms( byte in x = 1 ) delay_100ms( byte in x = 1 ) delay_200ms( byte in x = 1 ) delay_500ms( byte in x = 1 ) delay_1s( byte in x = 1 ) delay_2s( byte in x = 1 )

delay_5s( byte in x = 1 ) komutlarıdır.

• jseven: Seven segment display kullanmamızı sa layan komutları içerir. Interval: Timer kesmesi kullanarak zaman gecikmesi sa layan komutları içerir.

Hd447804, Hd447808: Hd447804 ve Hd447808 tipi lcd ekranlara yazı yazmak için gerekli komutları içerir.

I2c: I2c formatlı data almak ve göndermek için gerekli komutları içerir. Lm75: Lm75 entegresinde sıcaklık de eri almak için gerekli komutları içerir. Serial: RS232 formatlı data almak ve göndermek için gerekli komutları içerir. Random3: Random sayı üretmek için gerekli komutları içerir.

Benzer Belgeler