JAL
Yazarımız Emre Öz, Microchip Firmasının PIC mikrodenetliyicileri için hazırlanmış olan yüksek seviyeli bir programlama dilini , JAL'ı açıklıyor.
JAL Nedir ?
Jal, Microchip firmasının PIC mikro denetleyicileri için hazırlanmış yüksek seviyeli bir programlama dilidir.Yapı olarak pascal'a benzemektedir. Wouter van Ooijen tarafından 22 Haziran 1998 yılında ilk versiyonu çıkmıştır ve şimdi gnu GPL lisanslı olup http://jal.sourceforge.net sitesinde geliştirilmektedir.
Kısaca JAL Komutları :
Açıklama :
Program yazımında takibi kolaylaştırmak, geriye dönük yazılımı hatırlamak ya da başka birinin yazılımı geliştirebilmesine yardımcı olmak için programa açıklamalar yazmak gerekebilir. Jal da bu işlem ard arda gelen iki eksi işaretiyle "–" yapılır. "–" işaretinin ardından gelen metin, satır sonuna kadar Jal tarafından dikkate alınmaz.
Kitaplık kullanmak :
Bazı program parçaları farklı farklı yazılımlarda kullanılır. Bu tür program parçaları bir dosya olarak kaydedilir ve hazırlanan programa include komutu ile dahil edebilir.
include jlib — şeklinde kullanılır.
Değişkenler ve Kullanımı:
Değer tutan ve bildiren değişkenler :
Bit :
Sadece iki değer alabilir bunlar on(true,high) ya da off(false,low) değerleridir.
Örnek :
var bit a
var byte x
a = high
a = x 5
pin_a0 = high
Byte :
Byte değişkeni 8 bitlik değer alır. En fazla 255 sayısına eşit olabilir.
Örnek :
var byte n
n = 15
n = 0x10
n = 0b_0000_1011
Constant :
Programda kullanılacak sabit değerleri tutar.Derleme anında kullanılır ve 32bit değer alabilir.
Örnek :
const xtal = 10_000_000
Adres bildiren değişkenler :
Önceden tanımlanmış olan yazmaç adreslerini tutan değişkenlerin değerlerini değiştirmek için kullanılır.
var byte volatile port_b at 0x06var bit volatile status_z at 3 : 2
Volatile değişkenler :
Yazmaç adreslerini tanımlayan değişkenlerdir.
var volatile byte FSR at 4
var volatile byte INDF at 0
Başka bir değişkene işaret olan değişkenler (Alias) :
Bazı çalışmalarınızda program aynı olsa da kullanılan adres yazmaçlarının donanım nedeniyle değişmesi gerekebilir.Bu tür durumlara karşı yazmaç değişkeni olarak alias kullanmak daha uygundur.
var byte volatile i2c_clock is pin_a3
var byte volatile i2c_data_in is pin_a4
Deyimler :
Operator | Öncelik | Açıklama | Sol parametre | Sağ Parametre | Sonuç |
! | 5 | Bit | Bit | ||
! | 5 | Byte | Byte | ||
+ | 5 | Byte | Byte | ||
– | 5 | Byte | Byte | ||
* | 4 | Çarpma | Byte | Byte | Byte |
/ | 4 | Bölme | Byte | Byte | Byte |
% | 4 | Mod | Byte | Byte | Byte |
+ | 3 | Toplama | Byte | Byte | Byte |
– | 3 | Çıkarma | Byte | Byte | Byte |
<< | 2 | Sola Kaydırma | Byte | Byte | Byte |
>> | 2 | Sağa Kaydırma | Byte | Byte | Byte |
> | 2 | Büyük | Byte | Byte | Bit |
< | 2 | Küçük | Byte | Byte | Bit |
>= | 2 | Büyük Eşit | Byte | Byte | Bit |
<= | 2 | KüçükEşit | Byte | Byte | Bit |
== | 2 | Eşit | Byte | Byte | Bit |
!= | 2 | Eşit Değil | Byte | Byte | Bit |
& | 1 | Ve | Bit | Bit | Bit |
& | 1 | Ve | Byte | Byte | Byte |
! | 1 | ya da | Bit | Bit | Bit |
! | 1 | ya da | Byte | Byte | Byte |
^ | 1 | Xor | Bit | Bit | Bit |
^ | 1 | Xor | Byte | Byte | Byte |
Koşul Tanımlama :
Jal'da koşul if koşul then program end if blok yapısıyla tanımlanır.
If a > 5 then
pin_a1 = high – Eğer a, beşten büyük ise pin_a1'den çıkış ver.
end if
If a > 5 then
pin_a1 = high – Eğer a, beşten büyük ise pin_a1'den çıkış ver.
Else
pin_b1 = high – Eğer a, beşten büyük değilse pin_b1'den çıkış ver.
end if
If a > 5 then
pin_a1 = high – Eğer a, beşten büyük ise pin_a1'den çıkış ver.
Elsif a == 5 then pin_c1 = high – Eğer a, beş ise pin_c1'den çıkış ver.
Else
pin_b1 = high – Eğer a, hem beşe eşit değil hemde beşten küçük ise pin_b1'den çıkış ver.
end if
Döngüler :
While Döngüsü :
Koşulun doğruluğu geçerli olduğu sürece işlemi tekrarlayan döngülerdir.
while a > 5 loop
a = a + 1
end loop
For Döngüsü :
İşlemi belli bir tekrarda yapmanız gereken yerler için kullanılır.
for 100 loop
pin_a0 = high
delay_1S
pin_a0 = low
delay_1S
end for
Sonsuz Döngü :
Her hangi bir koşul gereketirmeyen sınırsız bir döngüdür.Hazırladığınız programın sadece açılışta değil devamlı çalışmasını istiyorsanız bu tür döngüler kullanmanız gerekir.
forever loop
pin_b1 = high
delay_1ms(10)
pin_b1 = low
delay_1ms(10)
end loop
Alt Program İşlemleri :
Procedure Çağırmak :
Procedure,
procedure procedure_adi(girilen değişkenler) is
program kodu …
end procedure
bloğu ile tanımlanır ve program içinde procedure verilen ad ile çağrılır.
procedure bekle (byte in saniye) is
delay_1S(saniye)
end procedure
pin_a0 = high
bekle(1)
pin_a0 = low
bekle(5)
pin_a0 = high
bekle(10)
pin_a0 = low
bekle(15)
Return :
Değer döndüren alt programlarda çıkış değerini bildirip alt programdan çıkmak için kullanılır.
function root (byte in x) return byte is
var byte n = 15
forever loop
if n * n <= x then
return x
end if
n = n – 1
end loop
end function
Assembler :
Jal içinde assembler komutlarını iki şekilde kullanabilirsiniz. Bunlardan ilki asm komutudur. Tek satırdan oluşan assembler komutları içindir.
asm clrwdt
İkincisi ise assembler / end assembler bloğudur. Bu bloklar içinde Jal komutları değil assembler komutları geçerlidir.
assembler
movlw H'FF'
movwf H'00D'
end assembler
Procedure :
Programda tekrarlanan yazılım parçaları içindir ve procedure / end procedure şeklinde kullanılır.
procedure port_ayarla is
portb = 0b_0000_1111
portc = 0b_1111_0000
end procedure
Function :
Function da procedure gibi program parçacıklarıdır ama procedure'den farklı olarak size bir sonuç gönderir.
function port_a_yuksek_mi return byte is
if port_a == 0b_1111_1111 then return = true else return = false
end function
Pseudo-variable :
Yazacak olduğunuz program kullanacağınız yere göre hem çıkış veren hemde bilgi girişi alabilen programlar olabilir. Bu tür programlar için pseudo-variable kullanılır ve procedure çağırmak için kullanılan procedure adina 'put ve 'get ekleri eklenir.
procedure async'put (byte in x) is …
procedure async'get return byte is …
forever loop
byte gelen = async
if (gelen > 1) & (gelen < 5) then
gelen = 10
end if
async = gelen
end loop
Port Tanımlama :
JAL'da port tanımlamak için ;
port_a_direction, port_b_direction, port_c_direction, port_a_low_direction, port_a_high_direction, port_b_low_direction, port_b_high_direction,port_c_low_direction, port_c_high_direction değişkenleri all_input ya da all_output değerleri alırlar.
port_a_direction = all_output
Pin tanımlamak içinse ;
pin_a0_direction .. pin_a4_direction, pin_b0_direction .. pin_b7_direction,pin_c0_direction .. pin_c7_direction değişkenleri input ya da output değerleri alır.
Portlar kullanılan PIC'e göre artar ya da azalır.
pin_a0 = input
Port değişkenleri(porta,portb,portc … ) pseudo-variable değişkenlerdir.
Kitaplıklar:
Jpic: PIC'lerin tanımlandığı kitaplıktır.Yazmaç adresleri,portlar bu kitaplığa kayıt edilir.
Jascii: Ascii değişkenlerinin kayıt edildiği kitaplıktır.
Jdelay: Programda beklemeler sağlamakiçin yazılan alt programları bulundurur.
Jseven: Seven segment display kullanımını kolaylaştırır.
Internal: Kesmeler için kullanılan alt programları barındırır.
Serial: RS232 formatında seri haberleşmeyi sağlayan alt programlar bulundurur.
Random3: Rastgele sayı üretmeyi sağlayan bir kitaplıktır.
HD447804,HD447808: HD44780 tipi LCD ekranları kontrol etmek için kullanılır. HD447804 dört bit ,HD447808 sekiz bit data yolu kullanılan donanımlar içindir.
I2C: i2c haberleşme formatında bilgi gönderip almayı sağlayan alt programlar bulunur.
LM75: LM75 sıcaklık entegeresini kullanabilmek için gerekli olan kitaplıktır.
Emre ÖZ
emreoz@omak.com.tr
Özgür Doanım ve Yazılım Geliştirme Portalı
www.boreas.gen.tr