Temel Jalv2 Kavramları

Transkript

Temel Jalv2 Kavramları
Temel Jalv2 Kavramları
Buradaki bazı komutlar jalv2 derleyicisinin 2.4o ve sonraki
versiyonları için geçerlidir. Temel programlama ve elektronik bilginizin
olduğu varsayılarak hazırlanmıştır. Bu Doküman Hazırlanırken Jalv2
derleyicisinin Daima son sürümü kullanılmıştır.
Sercan TEK
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
1|Sayfa
İçindekiler
1.1
JAL Dili ve Syntax Düzeni ................................................................................................ 4
1.1.1
Jalv2 derleyicisindeki yenilikler ....................................................................................... 4
1.1.2
Jalv2’in Desteklediği PIC’ler ............................................................................................. 4
1.1.3
Jalv2 Dilindeki Syntax ...................................................................................................... 6
1.2
Jaledit uygulama Geliştirme Ortamı ............................................................................... 6
1.2.1
1.3
Jalv2 Kavramları ve Temel Komutları .............................................................................. 6
1.4
Değişkenler ................................................................................................................... 6
1.4.1
1.4.1.1
1.5
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
Jaledit Programının üstünlükleri...................................................................................... 6
Jalv2’ de Değişken Tanımlama Biçimleri .......................................................................... 7
İstenilen Uzunlukta Değişken Tanımlama ................................................................... 8
Jalv2 Gösterim Şekilleri .................................................................................................. 8
1.5.1
Desimal Sayı Gösterimi .................................................................................................... 8
1.5.2
Heksadesimal Sayı Gösterimi........................................................................................... 8
1.5.3
Octal Sayı Gösterimi ........................................................................................................ 9
1.5.4
Binary Sayı Gösterimi....................................................................................................... 9
1.5.5
ASCI Gösterim .................................................................................................................. 9
1.6
Sabitler.......................................................................................................................... 9
1.7
Dizi Tanımlamaları ....................................................................................................... 10
1.7.1
Değişken Diziler ............................................................................................................. 10
1.7.2
Sabit Diziler .................................................................................................................... 10
1.7.3
Count( ) Fonksiyonu....................................................................................................... 11
1.8
Include Komutu ........................................................................................................... 11
1.9
Açıklama Satırları......................................................................................................... 12
1.10
Takma İsim Kullanımı (Alias) ........................................................................................ 12
1.11
Adres Atama (Location) ............................................................................................... 13
1.12
Operatörler ................................................................................................................. 13
1.12.1
Matematiksel Operatörler ............................................................................................. 14
1.12.2
Mantıksal Operatörler ................................................................................................... 15
1.12.3
Karşılaştırma Operatörleri ............................................................................................. 15
1.13
İstenilen Bitlerin Maskelenmesi (Sıfırlanması) .............................................................. 16
1.14
İstenilen Bitlerin Setlenmesi ( Setlenmesi) .................................................................... 16
1.15
Bitlerin Terslenmesi ..................................................................................................... 17
Sayfa |2
1.15.1
İstenilen Bitlerin Terslenmesi ........................................................................................ 17
1.15.2
Tüm Bitlerin Terslenmesi ............................................................................................... 17
Karar Yapıları, Kod Bloğu ve Record Yapısı .................................................................... 17
1.16.1
Karar Verme Yapıları ...................................................................................................... 17
1.16.1.1
İF… THEN Deyimi ................................................................................................... 18
1.16.1.2
CASE...OF Deyimi .................................................................................................. 19
1.16.2
BLOCK…END BLOCK Deyimi .......................................................................................... 20
1.16.3
RECORD Yapısı ............................................................................................................... 21
1.17
Döngüler ..................................................................................................................... 22
1.17.1
Forever Loop Döngüsü................................................................................................. 22
1.17.2
For… Loop Döngüsü ...................................................................................................... 22
1.17.2.1
Using Komutu ........................................................................................................ 23
1.17.3
While…Loop Döngüsü ................................................................................................... 23
1.17.4
Repeat ... Until Döngüsü ................................................................................................ 24
1.18
ALT PROGRAM TANIMLAMALARI ................................................................................. 25
1.18.1
Procedure Tanımlaması ................................................................................................. 25
1.18.2
Function Tanımlaması ................................................................................................... 26
1.18.3
Pseudo Tipinde Alt Program Tanımlaması..................................................................... 28
1.18.3.1
Pseudo Tipinde Procedure Tanımlama .................................................................. 28
1.18.3.2
Pseudo Tipinde Function Tanımlama .................................................................... 29
1.18.4
Alt Programlarının Global Olarak Kullanımı ................................................................... 29
1.18.5
İç İçe Alt Program Tanımlama........................................................................................ 30
1.19
PIC ASSEMBLER KULLANIMI ......................................................................................... 32
1.19.1
Tek Assembler Komutunun Kullanımı ........................................................................... 32
1.19.2
Assembler Kod Bloğunun Kullanımı (ASSEMBLER…..END ASSEMBLER) ........................ 33
1.20
DAHİLİ FONKSİYONLAR ................................................................................................ 34
1.20.1
Count( ) Fonksiyonu....................................................................................................... 34
1.20.2
Defined( ) Fonksiyonu.................................................................................................... 34
1.20.3
_usec_delay( ) Fonksiyonu........................................................................................... 35
1.20.4
Tipler arası Dönüşüm Fonksiyonları .............................................................................. 35
1.20.4.1
Byte( ) Fonksiyonu ................................................................................................. 36
1.20.4.2
SByte( ) Fonksiyonu ............................................................................................... 36
1.20.4.3
Word( ) Fonksiyonu ............................................................................................... 36
1.20.4.4
Sword ( ) Fonksiyonu ............................................................................................. 36
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
1.16
3|Sayfa
1.21
1.20.4.5
Dword( ) Fonksiyonu ............................................................................................. 37
1.20.4.6
Sdword( ) Fonksiyonu ............................................................................................ 37
PRAGMA KAVRAMI...................................................................................................... 37
1.21.1
Chip Konfigürasyon İfadeleri ......................................................................................... 38
1.21.2
Alt program Optimizasyon İfadeleri .............................................................................. 38
1.21.2.1
FRAME ................................................................................................................... 38
1.21.2.2
INLINE .................................................................................................................... 39
1.21.2.3
INTERRUPT............................................................................................................. 40
1.21.2.4
JUMP_TABLE .......................................................................................................... 41
1.21.2.5
KEEP ....................................................................................................................... 41
1.21.2.6
NOSTACK................................................................................................................ 42
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
1.21.3
1.21.3.1
EXPR_REDUCE........................................................................................................ 42
1.21.3.2
CEXPR_REDUCE ..................................................................................................... 42
1.21.3.3
CONST_DETECT...................................................................................................... 43
1.21.3.4
LOAD_REDUCE ....................................................................................................... 43
1.21.3.5
TEMP_REDUCE ...................................................................................................... 43
1.21.3.6
VARIABLE_FRAME.................................................................................................. 43
1.21.3.7
VARIABLE_RECUDE ................................................................................................ 44
1.21.4
Derleyici Konfigürasyon İfadeleri .................................................................................. 44
1.21.4.1
BOOTLOADER ........................................................................................................ 44
1.21.4.2
CLEAR ..................................................................................................................... 45
1.21.4.3
EEDATA .................................................................................................................. 45
1.21.4.4
FUSE ....................................................................................................................... 46
1.21.4.5
IDDATA................................................................................................................... 46
1.21.5
1.22
Kod Optimizasyon İfadeleri ........................................................................................... 42
MESAJ ÜRETME KOMUTLARI ......................................................................................... 46
1.21.5.1
_DEBUG ................................................................................................................. 47
1.21.5.2
_WARN .................................................................................................................. 47
1.21.5.3
_ERROR .................................................................................................................. 47
KAYNAKÇA .................................................................................................................. 48
Sayfa |4
1.1 JAL Dili ve Syntax Düzeni
JAL, Microchip ve Unicom Firmasının mikro derleyicileri için hazırlanmış olan ücretsiz,
yüksek seviyeli ve açık kaynak kodlu bir derleyicidir. JAL adını "Just Another Language"
Kelimelerinin Baş Harflerinden alır. Wouter van Ooijen tarafından 22 Haziran 1998 yılında ilk
versiyonu çıkmıştır ve şimdi GNU GPL lisanslı olup sourceforge.net tarafından geliştirilmeye
devam etmektedir.
Bir basıc derleyicisi yazan Kyle York adındaki programcı, yazdığı derleyiciye jal’ın
syntax düzenini uyarlayarak jalv2 dilini türetti ve yayımlamaya başladı. Jalv2 dilinde
küçük büyük harf hassasiyeti yoktur. Compiler kodu derlerken assembly çıktısını da
üretmektedir. Kodlama esnasında assembly ifadelerinin veya assembly bloklarının
kullanılmasına izin verir. Tamamen c dili ile geliştirilmiş açık kaynak kodlu olarak
dağıtılmaktadır.
Jalv2 Derleyicisi ve yeniliklerini takip edebileceğiniz Adres:
http://www.casadeyork.com/jalv2/
1) Değişken tipleri geliştirildi ve Daha yüksek bite sahip değişkenler ve dizi değişkenleri
eklendi.
2) Derlendikten sonra Program Dosyasındaki, çalışma sırasında ortaya çıkan hatalarının
giderilmesi sağlandı.
3) Tam kütüphane desteği sağlandı Yani kütüphane dosyası olan her 8-bit PIC serisine
destek sağlandı.
4) Jalv2, sıfırdan yazıldığı için kaynak kodları daha sade hale getirildi ve okunabilirliği
artırıldı. Buda derleyiciyi geliştirmek isteyen programcılar faydalı oldu.
5) Derleme esnasında kullanılmayan değişken ve alt programların, derlenmemesi için
geliştirilmeler yapılarak, çıkan hex dosyasının daha sade ve kısa hal alması sağlandı.
6) Tanımlanan değişkenlerin assembly komutlarında kullanılması sağlandı.
7) Kod Optimizasyonunun en iyi şekilde olması sağlandı.
8) Daha önceden bulunmayan işlevsel komutlar ilave edildi. (record,case,using…)
1.1.2 Jalv2’in Desteklediği PIC’ler
10F200
10F202
10F204
10F206
10F220
10F222
10F320
10F322
10LF320
10LF322
12F1501
16F1936
16F1937
16F1938
16F1939
16F1946
16F1947
16F505
16F506
16F526
16F610
16F616
16F871
16F872
16F873
16F873A
16F874
16F874A
16F876
16F876A
16F877
16F877A
16F88
16LF1939
16LF1946
16LF1947
16LF707
16LF720
16LF721
16LF722
16LF722A
16LF723
16LF723A
16LF724
18F25J10
18F25J11
18F25J50
18F25K20
18F25K22
18F25K80
18F2610
18F2620
18F2680
18F2682
18F2685
18F45J11
18F45J50
18F45K20
18F45K22
18F45K80
18F4610
18F4620
18F4680
18F4682
18F4685
18F46J11
18F66J93
18F66K22
18F66K80
18F66K90
18F6720
18F6722
18F6723
18F67J10
18F67J11
18F67J50
18F67J60
18F8722
18F8723
18F87J10
18F87J11
18F87J50
18F87J60
18F87J72
18F87J90
18F87J93
18F87K22
18F87K90
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
1.1.1 Jalv2 derleyicisindeki yenilikler
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
5|Sayfa
12F1822
12F1840
12F508
12F509
12F510
12F519
12F609
12F615
12F617
12F629
12F635
12F675
12F683
12F752
12HV609
12HV615
12HV752
12LF1501
12LF1822
12LF1840
12LF1840T48A
16F1503
16F1507
16F1508
16F1509
16F1512
16F1513
16F1516
16F1517
16F1518
16F1519
16F1526
16F1527
16F1782
16F1783
16F1823
16F1824
16F1825
16F1826
16F1827
16F1828
16F1829
16F1847
16F1933
16F1934
16F627
16F627A
16F628
16F628A
16F630
16F631
16F636
16F639
16F648A
16F676
16F677
16F684
16F685
16F687
16F688
16F689
16F690
16F707
16F716
16F72
16F720
16F721
16F722
16F722A
16F723
16F723A
16F724
16F726
16F727
16F73
16F737
16F74
16F747
16F76
16F767
16F77
16F777
16F785
16F818
16F819
16F83
16F84
16F84A
16F87
16F870
16F882
16F883
16F884
16F886
16F887
16F913
16F914
16F916
16F917
16F946
16HV610
16HV616
16HV785
16LF1503
16LF1507
16LF1508
16LF1509
16LF1512
16LF1513
16LF1516
16LF1517
16LF1518
16LF1519
16LF1526
16LF1527
16LF1782
16LF1783
16LF1823
16LF1824
16LF1825
16LF1826
16LF1827
16LF1828
16LF1829
16LF1847
16LF1902
16LF1903
16LF1904
16LF1906
16LF1907
16LF1933
16LF1934
16LF1936
16LF1937
16LF1938
16LF726
16LF727
18F1220
18F1230
18F1320
18F1330
18F13K22
18F13K50
18F14K22
18F14K50
18F2220
18F2221
18F2320
18F2321
18F2331
18F23K20
18F23K22
18F2410
18F242
18F2420
18F2423
18F2431
18F2439
18F2450
18F2455
18F2458
18F248
18F2480
18F24J10
18F24J11
18F24J50
18F24K20
18F24K22
18F2510
18F2515
18F252
18F2520
18F2523
18F2525
18F2539
18F2550
18F2553
18F258
18F2580
18F2585
18F26J11
18F26J13
18F26J50
18F26J53
18F26K20
18F26K22
18F26K80
18F27J13
18F27J53
18F4220
18F4221
18F4320
18F4321
18F4331
18F43K20
18F43K22
18F4410
18F442
18F4420
18F4423
18F4431
18F4439
18F4450
18F4455
18F4458
18F448
18F4480
18F44J10
18F44J11
18F44J50
18F44K20
18F44K22
18F4510
18F4515
18F452
18F4520
18F4523
18F4525
18F4539
18F4550
18F4553
18F458
18F4580
18F4585
18F45J10
Toplam Desteklediği Mikroişlemci Sayısı: 448 (Ekim 2012)
18F46J13
18F46J50
18F46J53
18F46K20
18F46K22
18F46K80
18F47J13
18F47J53
18F6310
18F6390
18F6393
18F63J11
18F63J90
18F6410
18F6490
18F6493
18F64J11
18F64J90
18F6520
18F6525
18F6527
18F6585
18F65J10
18F65J11
18F65J15
18F65J50
18F65J90
18F65K22
18F65K80
18F65K90
18F6620
18F6621
18F6622
18F6627
18F6628
18F6680
18F66J10
18F66J11
18F66J15
18F66J16
18F66J50
18F66J55
18F66J60
18F66J65
18F66J90
18F67J90
18F67J93
18F67K22
18F67K90
18F8310
18F8390
18F8393
18F83J11
18F83J90
18F8410
18F8490
18F8493
18F84J11
18F84J90
18F8520
18F8525
18F8527
18F8585
18F85J10
18F85J11
18F85J15
18F85J50
18F85J90
18F85K22
18F85K90
18F8620
18F8621
18F8622
18F8627
18F8628
18F8680
18F86J10
18F86J11
18F86J15
18F86J16
18F86J50
18F86J55
18F86J60
18F86J65
18F86J72
18F86J90
18F86J93
18F86K22
18F86K90
18F8720
18F96J60
18F96J65
18F97J60
18LF13K22
18LF13K50
18LF14K22
18LF14K50
18LF23K22
18LF24J10
18LF24J11
18LF24J50
18LF24K22
18LF25J10
18LF25J11
18LF25J50
18LF25K22
18LF25K80
18LF26J11
18LF26J13
18LF26J50
18LF26J53
18LF26K22
18LF26K80
18LF27J13
18LF27J53
18LF43K22
18LF44J10
18LF44J11
18LF44J50
18LF44K22
18LF45J10
18LF45J11
18LF45J50
18LF45K22
18LF45K80
18LF46J11
18LF46J13
18LF46J50
18LF46J53
18LF46K22
18LF46K80
18LF47J13
18LF47J53
18LF65K80
18LF66K80
Sayfa |6
1.1.3 Jalv2 Dilindeki Syntax
Jalv2 dilinin söz dizilimi, temel olarak Pascal diline daha yakındır. Bazı komutları C diline
çok benzemektedir. Önceden Pascal veya C kullanmış olanlar daha çabuk uyum
sağlayacaklardır. Hiç kullanmayanlar ise daha kısa sürede dilin kolaylılığı yüzünden hemen
alışıp program geliştirebileceklerdir.
1.2 Jaledit uygulama Geliştirme Ortamı
Jalv2 dilinde uygulama geliştirmek için öncelikle bir Editör Programına İhtiyaç
duyulmaktadır. Piyasada birçok editör yer almakla birlikte en iyi ve gelişmiş özelliklere sahip
JALEDİT editörünü kullanmanız işinizi kolaylaştıracaktır. Delphi Dili ile geliştirilmiş olup açık
kaynak kodlu yayımlanmaktadır.
1.2.1 Jaledit Programının üstünlükleri
JALEDİT programını ve gelişmeleri takip edebileceğiniz adres:
http://code.google.com/p/jaledit/downloads/list
1.3 Jalv2 Kavramları ve Temel Komutları
1.4 Değişkenler
Değişkenler her programla dilinin vazgeçilmez unsurlarıdır. Program içerisinde
tanımlanan değişkenler aslında birer hafıza alanından ibarettir. Yani program içerisinde değer
yazıp okuyabileceğimiz ve belirlediğimiz değişken tipine göre hafızada alan kapsayan
bölümlerdir. Değişkenlere defalarda yazılıp okunabilmektedir. Tanımlanan her değişken PIC
entegrenin RAM bellek alanında yer kaplar. Bunun anlamı Elektrik Kesildiğinde değişkene
yüklenmiş olan son değer silinmektedir. Bundan dolayı değişken tanımlandığında başlangıçta
bir işlemde kullanılacak ise değişkene başlangıç değeri aktarılması doğrudur. Değişkenler var
Deyimi ile Tanımlanır.
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
1) İçerisinde mini seri port terminal modülü bulunmaktadır. Böylelikle seri port ile ilgili
uygulamalarda seri port’tan gelen verileri mini terminal ile görebiliriz.
2) Jal syntax renklendirmesi yapmaktadır. Kodların okunabilirliği arttığı gibi kodları takip
etmek daha kolaylaşır.
3) Derleyiciden gelen hata mesajlarını gösterir ve üzerine tıklandığında o satıra yöneltir.
4) Kullanımı basit ve sade bir arayüze sahiptir.
5) Seri port programlayıcılara bağlanarak hex dosyasını pic'e aktarabilir.
6) İçerisinde basit araçlar ile birlikte gelir, program yazılmasını hızlandırır.
7) Derleyici ayarları ve editör ayarları istenildiği gibi değiştirilmesine izin verir.
7|Sayfa
Jalv2 Dilinde Toplam 7 adet değişken tipi vardır. Bunlar Aşağıdaki gibidir:
Değişken Tipi
bit
byte
sbyte
word
sword
dword
sdword
Açıklama
1 bit değer alabilir
8 bit işaretsiz değer alabilir
8 bit işaretli değer alabilir
16 bit işaretsiz değer alabilir
16 bit işaretli değer alabilir
32 bit işaretsiz değer alabilir
32 bit işaretli değer alabilir
Değer Aralığı
0..1
0..255
-128..127
0..65,535
-32,768..32,767
0..4,294,967,296
-2,147,483,648..2,147,483,647
Tabloda Göründüğü gibi değişken tipleri bakımından Jalv2 Zengin bir dil. Ama
Genelde programlarda sadece 3 tip değişken (bit, byte, word) kullanılır.
1.4.1 Jalv2’ de Değişken Tanımlama Biçimleri
Jalv2 Dilinde Değişken Tanımlarken Aşağıdaki Yazı Formatı Kullanılır:
var
Örnek:
<değişken tipi>
var bit deger
<değişken adı>
 Burada deger adında bit tipinde değişken
tanımlaması yapılmıştır.
Eğer değişkenimize Başlangıç Değeri Aktarmak İstiyor isek o zaman şu şekilde olmalıdır:
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
var <değişken tipi> <değişken adı> = <Başlangıç değeri>
Örnek:
var byte deger = 250
 Byte Tipinde Tanımlanan değer adındaki değişkene
başlangıç değeri olarak ‘250’ sayısı aktarılmıştır.
Değişken Tanımlama Örnekleri
Değişken Tipi
Bit
Byte
sByte
Word
Sword
Dword
Sdword
Örnek Tanımlama
Var
Var
Var
Var
Var
Var
Var
Var
Var
Var
Var
Var
Var
Var
bit deger
bit deger = 1
byte dd
byte dd = 23
sbyte deneme
sbyte deneme = -100
word ornek
word ornek = 11991
sword cok
sword cok = -11991
dword cokdeger
dword cokdeger = 4000000000
sdword cokcokdeger
sdword cokcokdeger = -1147483648
Değişkenler araya ,(virgül) koyulmak şartı ile yan yana da tanımlanabilirler.
Sayfa |8
Örnek: var byte saat,masa,sandalye,lcd
 Burada saat,masa,sandalye,lcd isimli
değişkenler byte tipinde tanımlanmıştır.
1.4.1.1 İstenilen Uzunlukta Değişken Tanımlama
Jalv2 derleyicisi tanımlı olduğu değişkenler dışında özel olarak bit uzunluklarını
kendimizin belirlediği tipte değişkenlerde tanınmasına izin vermektedir. Örneğin Word
tipindeki değişken 16 bitliktir. Yani 2 adet Byte tipi değişkene eşittir.
Değişken tanımlarken aşağıdaki şekilde bir tanımlama yaparsak istenilen bit sayısında
değişken tanımlamış oluruz.
var
<değişken tipi> * <bit uzunluğu>
<değişken adı>
Örnek olarak 24 bitlik bir değişken tanımlaması yapacak olursak şu şekilde oalcaktır.
Var byte*3 v_24_bit
1 Byte 8 bit olduğuna göre tanımlanan değişken 8*3 = 24 bitlik bir değişken olacaktır.
Aynı yöntemi bit tipinde kullanmak istediğimizde bit*8 ‘ e kadar problem çıkmazken
bit*9 dediğimizde problem çıkmaktadır. Bit tipinde 8 den fazla tanımlama yapılamaz. Ama
bit*5 gibi 8 den küçük bitlerde kullanılabilir.
1.5 Jalv2 Gösterim Şekilleri
1.5.1 Desimal Sayı Gösterimi
Başında veya sonunda herhangi ek bir işaret olmaksızın sadece sayının yazılması şeklindeki
gösterim şeklidir.
Örnek: var byte ornekdec = 65
 Burada ornekdec isimli değişkene Desimal 65
sayısı atanmıştır.
1.5.2 Heksadesimal Sayı Gösterimi
Heksadesimal sayı gösteriminde sayının başına “0x” Koyulur.
Örnek: var byte ornekhex = 0x41  Burada ornekhex isimli değişkene Heksadesimal 41
sayısı atanmıştır. (0x41 = 65)
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
Eğer bit*5 gibi bir tanımlama yapılırsa 5 biti geçmeyecek büyüklükteki bir sayı direkt
olarak atanabilir. Yada 0b_11001 gibi yöntemle sayı aktarılabilir.
9|Sayfa
1.5.3 Octal Sayı Gösterimi
Octal sayı gösteriminde sayının başına “0q” Koyulur.
Örnek: var byte ornekoct = 0q12  Burada ornekoct isimli değişkene Octal Tabanda
12 sayısı atanmıştır.
1.5.4 Binary Sayı Gösterimi
Binary sayı gösteriminde sayının başına “0b” Koyulur.
Örnek: var byte ornekbin = 0b01000001 
Burada ornekbin isimli değişkene binary
01000001 sayısı atanmıştır.
(0b01000001 = 0x41 = 65)
Not: Binary Sayı Gösteriminde aşağıdaki Formatta Kullanılabilir:
Örnek: var byte ornekbin = 0b01000001
Yazılabileceği gibi aşağıdaki şekilde yazılabilir.
var byte ornekbin = 0b_0100_0001
Burada aralara konan “_” işareti önemsizdir. Göz karışıklığını önlemek için konulmuştur.
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
1.5.5 ASCI Gösterim
ASCI rakam, harf ve bazı özel işaretlerden oluşan karakterlerin sayısal karşılıklarının
standardına verilen isimdir. Bilgisayar ortamında tüm her şey sayılar ile saklanmaktadır.
Örneğin ab = “A” tanımlaması yapıldığında ab değişkenine A ‘ nın ASCI karşılığı
yüklenmektedir.
Örnek:
var byte ab = “A”
 Burada ab isimli değişkene A Harfinin ASCI
Karşılığı Yüklenmiştir.
1.6 Sabitler
Sabitler Program Çalışırken Sadece Okunabilen Hafıza alanları Olarak
Nitelendirilebilirler. Değişkenlerden Farklı olarak Tanımlandıkları esnada içerisine değer
aktarılır ve bu değer sadece okunabilir. Değişiklik Yapılamaz.
Jalv2 Dilinde Sabit Tanımlama Formatı Aşağıdaki Gibidir:
Const <Sabitin Tipi> <sabitin adı> = <aktarılacak değer>
S a y f a | 10
Örnek:
Const
Const
Const
Const
Const
Const
Const
bit
byte
sbyte
word
sword
dword
sdword
led
deg
ges
dk
sn
snn
san







= 0
= 100
= -100
= 5000
= -5000
= 4000000000
= -1147483648
bit
Tipinde Sabit
byte Tipinde Sabit
sbyte Tipinde Sabit
word Tipinde Sabit
sword Tipinde Sabit
dword Tipinde Sabit
sdword Tipinde Sabit
Bu tanımlamaların yanında sabitlerde ekstradan üniversal tip tanımlamada
mevcuttur. Genellikle PIC ’in çalışma frekansı gibi tanımlamalarda kullanılırlar. Herhangi bir
tipleri bulunmamaktadır. Derleyici sadece derleme esnasında bu üniversal tipi kullanır ve
derlendikten sonra ulaşma imkânı yoktur.
Örnek:
Const devir = 600
 Üniversal Tip Sabit Tanımlaması
1.7 Dizi Tanımlamaları
Dizi tanımlamaları tek türde birçok elemanı bünyesine alabilen tanımlamalardır.
Tanımlama esnasında dizinin sayısı belli ise bu dizelere statik diziler, dizi sayısı belli değil ise
bu dizilere ise dinamik dizeler denir. Diziler hem değişken diziler hem de sabit diziler olarak
tanımlanabilir. Dizilerin ilk Elemanları daima 0(sıfır)’dan başlamaktadır.
Var byte dizi[3] = {245,123,253}
 statik dizi
Yukarıdaki örnekte dizi elemanları “değişken” olan statik bir dizi tanımlaması yapılmıştır.
Burada dizi[0] = 245 , dizi[1] = 123 , dizi[2] = 253 olmaktadır. Aynı dizi
dinamik olarak tanımlanmış olsaydı o zaman şu şekilde yazılması gerekmektedir.
Var byte dizi[] = {245,123,253}
Var byte dizi[] = {“S”,2,1,”V”}
1.7.2
 dinamik dizi
 dinamik dizi
Sabit Diziler
Const byte mesaj[] = “SsEeRrCcAaNn”
 dinamik dizi
Yukarıdaki örnekte dizi elemanları “sabit” olan dinamik bir dizi tanımlanmıştır. Burada
diziye yüklenen ASCI değer sayısı kadar bir dizi oluşmaktadır. Aynı Diziyi birde statik olarak
tanımlarsak aşağıdaki gibi yazılması gerekmektedir.
Const byte mesaj[12] = “SsEeRrCcAaNn”

statik dizi
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
1.7.1 Değişken Diziler
11 | S a y f a
Dizi Tanımlamalarında; eğer dizi değişken olarak tanımlandı ise o zaman dizi
elemanları sonradan değiştirilebilir ama sabit olarak tanımlandı ise daha sonra bir değişiklik
yapılamaz. Ayrıca bit tipinde dizi tanımlaması yapılmamaktadır.
1.7.3 Count( ) Fonksiyonu
Tanımlanan dizilerin eleman sayılarını bulmak için Kullanılan Fonksiyondur. Genellikle
dinamik dizilerin eleman sayılarını bulmak amacı ile kullanılır. Eleman Sayısını bir değişkene
aktararak ya da direkt bu fonksiyon üzerinden kullanılarak gerekli işlemler yapılabilir.
Kullanım Formatı :
Count(dizi_adi)
<degisken> = Count(dizi_adi)
 Fonksiyon Üzerinden Kullanılması
 Değişkene aktarılması
1.8 Include Komutu
Jalv2 dili kütüphanelere dayalı bir dildir. Tüm her şey kütüphaneler üzerinden
yönetilir. Projenize başlarken bile öncelikle kullanmanız gereken PIC entegresini tanıtmanız
gerekmektedir. Bunu yapabilmek için ise kullanılacak entegrenin adreslerinin tanımlı olduğu
kütüphane dosyasını projenize dâhil etmeniz gerekmektedir. Bunun haricinde özel bir
kütüphane dosyasını projenize dâhil etmek için kullanılmaktadır.
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
Yazım Formatı: include
Örnek: include
<Dâhil Edilecek Kütüphane Dosyasının adı >
16F628A
Jalv2 derleyicisi derleme yaparken kütüphane dosyalarını sadece bir dizinde
aramaktadır. Genellikle derleyicinin bulunduğu dizinde “lib” klasörü kullanılmaktadır. Bu
yüzden özel bir kütüphane kullanmak istiyorsanız, kütüphane dosyasını “lib” klasörü
içerisine kopyalamanız gerekmektedir. Yada Jaledit programının bize sunmuş olduğu özelliği
kullanarak Harici kütüphane dosyalarının da program dosyasının yanında olması yeterlidir.
Bu özelliği açmak için Jaledit programının “Tools” menüsünden “Environment Options”
Seçilir. Açılan Pencereden “General” Sekmesinde bulunan “include Source Folder as First item in
Library Search Path” Seçeneğinin başındaki kutu işaretlenir.
Compiler C sürücüsünde olduğu varsayılır ise;
C:\compiler\jalv2.exe
C:\Lib
 Derleyici
 Kütüphane Klasörü
S a y f a | 12
1.9 Açıklama Satırları
Jalv2 Dilinde Açıklamalar iki işaret ile gerçekleşir. Bunlar:
1) “-- “ Yan Yana iki adet eksi işareti ile
2) “;” Noktalı Virgül ile
Derleyici bu işaretlerin sağında kalan kısımları derlemez ve göz ardı eder. Açıklama
satırlarının kullanım amacı yazılan programda hatırlatıcı veya bilgilendirici yazılar yazmaktır.
Programda istenmeyen bir kod olduğunda deneme amaçlı o kodu pasif hale getirmek için bu
işaretlerde kullanılabilir.
Açıklama sadece tek satır için geçerlidir. Çoklu satır açıklama yazmak istenirse her
satırın başına bu işaretlerden konulması gerekmektedir.
Örnek:
; ----------------------------------------------------- Programın Adı : Açıklama Satırı Örnek Kod
-- Yazan
: SsEeRrCcAaNn
-Tarih
: 25.10.2012
; ---------------------------------------------------include 16F628A
1.10
Takma İsim Kullanımı (Alias)
Takma isimler daha önce tanımlanmış bir değişkene akılda kalıcı bir isim vermek için
kullanılmaktadır. Derleme esnasında hafızada yer kaplamazlar. Kullanımı derleme sonrası
çıkan hex kodunda herhangi bir değişiklik yaratmaz.
Kullanım Formatı:
Var volatile <Ası l Değiş keni n tipi> <Verilecek Takma isim> is <Asıl Değişken>
Örnek:
var byte Sercan = 250
var volatile byte Seco is Sercan
Bu örnekte byte tipinde tanımlanmış olan
“Seco” takma adı kullanılabilmektedir.
“Sercan” isimli değişken yerine artık
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
Yukarıdaki örnekte açıklama satırı program hakkında bilgi vermek için yazılmıştır.
Burada başında “--” ve “;” olan satırlar dikkate alınmayacak ve derlenmeyecektir.
13 | S a y f a
1.11 Adres Atama (Location)
Jalv2 dilinde adres atama sayesinde kullanılacak olan PIC mikrodenetleyicisinde
bulunan adresler, değişkenlere aktarılabilmektedir. Bu sayede değişkenler aracılığı ile PIC
mikrodenetleyicisinin kaydedicilerine ve kullanıcı RAM’ına ulaşılabilinir.
Adres atamada iki tip kullanılmaktadır:
1) - byte tipi
2) - bit tipi
Kullanım Formatı:
var volatile byte <adrese verilecek isim>
var volatile bit <adrese verilecek isim>
at
at
<adres>
<adres>
Örnek:
var volatile byte portb at 0x86
Yukarıdaki örnekte program içerisinde PIC’in 0x86 adresine artık “portb” olarak
erişilebilinecektir.
var byte sayi = 0b_1111_1010
var volatile bit sayi_bit at sayi: 3
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
Burada sayi değişkeninin 3.bitini sayi_bit değişkenine aktarmaktadır.
Aynı görevi gören başka bir kod yazarsak şu şekilde olacaktır:
var byte sayi = 0b_1111_1010
var bit sayi_bit at sayi: 3
Böylelikle istenilen değişkenin istenilen biti aktarılabilir. Bazı uygulamalarda seri veri
gönderme işlemlerinde en yüksek veya en düşük biti göndermek gerektiğinde bu yöntem
kullanılır.
1.12 Operatörler
Operatörler programlama dillerindeki çeşitli matematiksel, mantıksal ve karşılaştırma
işleri yapmakta olan özel karakterlerdir. Jalv2 dili operatör yapısını C dilinden almıştır.
Operatörler yan yana yazıldıklarında işlem önceliğine göre hesaplanırlar. Aşağıdaki tabloda
operatörler, önceliği yüksek olandan başlayarak listelenmiştir. En yüksek öncelik 1 iken en
düşük öncelik 5 olarak belirtilmiştir.
S a y f a | 14
Operatör
Öncelik
Açıklama
Kullanıldığı Tipler
Türü
( )
!
*
/
%
+
<<
>>
<
<=
>
>=
!=
==
&
|
^
1
1
2
2
2
2
3
3
4
4
4
4
4
4
4
4
5
5
5
Gruplama
Negatif Sayı İşareti
Değil (Not)
Çarpma
Bölme
Mod alma
Toplama
Çıkartma
Sola Kaydırma
Sağa Kaydırma
Küçüktür
Küçük Eşittirtir
Büyüktür
Büyük Eşittir
Eşit Değil
Eşit
Ve
Veya
Xor
Genel Tipler
Sbyte,Sword,Sdword
Genel Tipler
Genel Tipler
Genel Tipler
Genel Tipler
Genel Tipler
Genel Tipler
Bit Harici Diğer Tipler
Bit Harici Diğer Tipler
Genel Tipler
Genel Tipler
Genel Tipler
Genel Tipler
Genel Tipler
Genel Tipler
Genel Tipler
Genel Tipler
Genel Tipler
Matematiksel
Mantıksal
Matematiksel
Matematiksel
Matematiksel
Matematiksel
Matematiksel
Matematiksel
Matematiksel
Karşılaştırma
Karşılaştırma
Karşılaştırma
Karşılaştırma
Karşılaştırma
Karşılaştırma
Mantıksal
Mantıksal
Mantıksal
Jalv2 işlemleri Tanımlanan Değişkene göre yapar. Çıkan işlem sonucu, aktarılacak
değişkenin maksimum değerini geçerse o değişkenin maksimum sonucuna göre modu alınır.
Örneğin 8 bitlik bir değişkene sonucu 255’ten büyük olan bir işlem aktarılmak istenirse sonuc
mod 256 olarak atanacaktır.
Toplama İşlemi(+),Çıkartma İşlemi (-),Çarpma bişlemi (*), Bölme İşlemi (/) : 4 Temel
İşlemin Yapıldığı Operatörlerdir.
Mod Alma İşlemi(%): Bölme İşlemi Yapıldığında kalanı elde etmek için kullanılan
operatördür. Genellikle bir sayının belirli bir aralıkta kalması istenildiği durumlarda kullanılır.
Örnek : sayi = (sayi + 1) % 15
Yukarıda sayı değişkeni 1 arttırılıyor. Bunu bir döngü aracılığı ile yaparsak sürekli
artacak ve 15 ‘e kadar gelecektir. 15’te mod 15 alındığında sonuç tekrar 0 olacaktır.
Böylelikle sayi değişkeni sürekli 0..14 arasında değer almış olacaktır.
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
1.12.1 Matematiksel Operatörler
15 | S a y f a
Sola kaydırma(<<) ve Sağ Kaydırma(>>) operatörleri: Bir sayıyı istediğimiz basamak kadar
sağ veya sola kaydırmak için kullanılan operatörlerdir.
Örnek : var
byte sayi = 0b_1111_0101
Sayi = sayi >> 2
Yukarıdaki örnekte sayi değişkeni tanımlanıp binary 0b_1111_0101 sayısı aktarılıyor.
Daha sonra tekrar sayi değişkenine, sayi değişkeni 2 sağ kaydırıp aktarılıyor. Sonuç olarak
sayi değişkeninin son hali aşağıdaki gibi olur:
Sayi = 0b_0011_1101
Eğer sayi = sayi << 2 olsaydı o zamanda;
sayi = 0b_1101_0100
olurdur.
1.12.2 Mantıksal Operatörler
Mantıksal operatörler Ve(And), Veya(Or), Değil(Not), özel Veya(Xor)
Operatörlerinde Oluşmaktadır. Mantıksal İşlemlerin Yanında aynı Zamanda Bitlerin
maskelenmesi, setlenmesi ve terslenmesi gibi durumlarda kullanılmaktadır.
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
Ve(And) : Boolean matematiğine göre verilen, en az iki sayının çarpma işlemini yapar.
Operatör olarak “&” Sembolünü Kullanmaktadır. Örneğin: En az iki veya daha fazla buton
olduğunda, hangilerinin aynı anda basılı olup olmadığını anlamak için genellikle “&”(ve)
operatörü kullanılır.
Veya(Or) : Boolean matematiğine göre verilen, en az iki sayının toplama işlemini yapar.
Operatör olarak “|” sembolünü kullanmaktadır. Örneğin: iki butondan sadece birinin
basıldığını diğerinin ise basılmadığını anlamak için “|” operatörü kullanılmaktadır.
Özel-Veya(Xor) : Boolean matematiğine göre en az iki sayının özel toplama işlemi yapan ve
binary sayı formatına göre aynı durumlarda “0” farklı durumlarda ise “1” olarak sonuç alan
işlemdir. Operatör olarak “^” sembolünü Kullanmaktadır. Genellikle bir sayıda istenilen
bitlerin terslenmesi amacı ile kullanılmaktadır.
Değil(Not) : Boolean matematiğinde bir sayının binary formatına göre tersini alma işlemini
yapar. Yani “1” ler “0” , “0” lar “1” olur. Operatör olarak “!” sembolünü kullanır. Genellikle
sayıları terslemek için kullanılır.
1.12.3 Karşılaştırma Operatörleri
En az iki değerin karşılaştırılması için kullanılan operatörlerdir. Karşılaştırma
operatörleri şunlardır;
S a y f a | 16
Eşit (==)
: İki değerin eşit olup olmadığını anlamak için kullanılır.
Eşit Değil (!=) : Verilen ilk değerin, ikinci değere eşit olmadığını anlamak için kullanır.
Büyük (>)
: Verilen değerin, ikinci değerden büyük olup olmadığını anlamak için kullanır.
Küçük (<)
: Verilen değerin, ikinci değerden küçük olup olmadığını anlamak için kullanır.
Büyük Eşit(>=) : Verilen değerin, ikinci değerden Büyük veya eşit olup olmadığını anlamak
için kullanır.
Küçük Eşit (<=): Verilen değerin, ikinci değerden küçük veya eşit olup olmadığını anlamak için
kullanır.
1.13 İstenilen Bitlerin Maskelenmesi (Sıfırlanması)
Programlama esnasında bazı durumlarda değişken veya bir register içerisinde bulunan
bazı bitler binary olarak sıfırlanması gerekir. Bu işlemi yapmak için değişken “&” operatörü
ile maskelenmelidir. Boolean matematiğine göre 0 ile AND işlemine tabi tutulan değerin
sonucu 0’dır. 1 ile AND işlemine tabi tutulursa sonucu kendisine eşittir. Buna göre
maskelemek istediğimiz bitleri 0, değerinin değişmesini istemediğimiz bitleri ise 1 ile AND
işlemine tabi tutmamız gerekmektedir.
Örnek: Verilen 0b_1010_1110 binary değerinin 2. ve 3. bitlerini maskeleyiniz.
var byte deger = 0b_1010_1110
deger = deger & 0b_1111_0011
değişkeninin içeriği: 0b_1010_0010 olacaktır.
Yukarıda verilen değerin 2. ve 3. bitleri 0 ile and işlemine tabi tutulmaktadır. Ve diğer
bitlere 1 ile and işlemi uygulanmaktadır. Böylece 2. ve 3. bitler maskelenmiş diğer bitler
değiştirilmemiştir.
1.14 İstenilen Bitlerin Setlenmesi ( Setlenmesi)
Programlama esnasında bazı durumlarda değişken veya bir register içerisinde bulunan
bazı bitler binary olarak birlenmesi gerekir. Bu işlemi yapmak için “|” operatörü kullanılır.
Boolean matematiğine göre 1 ile OR işlemine tabi tutulan değerin sonucu 1, 0 ile OR işlemine
tabi tutulursa sonucu kendisine eşittir. Buna göre setlemek istediğimiz bitleri 1, değerinin
değişmemesini istediğimiz bitleri ise 0 ile OR işlemine tabi tutmamız gerekmektedir.
Örnek: Verilen 0b_1010_1110 binary değerinin 0. ve 6. bitlerini maskeleyiniz.
var byte deger = 0b_1010_1110
deger = deger | 0b_0100_0001
deger
değişkeninin içeriği: 0b_1110_1111
Yukarıda verilen değerin 0. Ve 6. Bitleri 1 ile OR işlemine tabi tutulmaktadır. Ve diğer
bitlere 0 ile OR işlemi uygulanmaktadır. Böylece 0. Ve 6. Bitler setlenmiş diğer bitler
değiştirilmemiştir.
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
deger
17 | S a y f a
1.15 Bitlerin Terslenmesi
Bazı durumlarda bitlerin tamamının terslenmesi ya da istenilen bitlerin terslenmesi
gerekebilmektedir. Böyle durumlarda XOR ve NOT kapıları kullanılmaktadır.
1.15.1 İstenilen Bitlerin Terslenmesi
İstenilen bitleri terslemek için “^” operatörü kullanılmaktadır. Boolean matematiğine
göre bir değer 1 ile XOR işlemine tabi tutulursa sonuç tersi, 0 ile XOR işlemine tabi tutulursa
sonuç kendisine eşittir.
Örnek: Verilen 0b_1010_1110 binary değerinin 1,2,3,5,6. bitlerini tersleyiniz.
var byte deger = 0b_1010_1110
deger = deger ^ 0b_0110_1110
deger değişkeninin içeriği: 0b_1110_0000
Yukarıda verilen değerin 1,2,3.5,6. bitleri 1 ile XOR işlemine tabi tutulmaktadır. Ve
diğer bitlere 0 ile XOR işlemi uygulanmaktadır. Böylece 1,2,3,5,6. bitler terslenmiş diğer
bitler değiştirilmemiştir.
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
1.15.2 Tüm Bitlerin Terslenmesi
Tüm bitleri Terslemek için “!” operatörü kullanılır. Bir değer NOT işlemine tabi tutulur
ise bitlerin tersi alınır.
Örnek: Verilen 0b_1010_1110 binary değerinin tüm bitlerini tersleyiniz.
var byte deger = 0b_1010_1110
deger = !deger
deger değişkeninin içeriği: 0b_0101_0001
Yukarıda verilen değer not işlemine tabi tutulmuştur ve sonuç tüm bitlerin tersi
olmuştur.
1.16 Karar Yapıları, Kod Bloğu ve Record Yapısı
1.16.1 Karar Verme Yapıları
Karar verme yapıları bir programlama dilinin temel yapılarıdır. Programın gidişatına
yön vermek için bazı değerlere göre karar vermek gereklidir. Bu yapılar sayesinde karar
verme işlemleri uygulanır.
S a y f a | 18
1.16.1.1
İF… THEN Deyimi
IF…Then deyimi tüm programlama dillerinde bulunmaktadır. Jalv2 dilindeki
görevi ise diğer programlama dillerinde olduğu gibi karşılaştırma işlemi yapmaktır. İF…
THEN ile başlayarak End if komutu ile biter.
Değişik Formatlarda Kullanılabilir:
1)- Tek şart için kullanım Formatı:
if <şart> then
-- Şart Gerçekleşir ise bu satır işler.
<işletilecek komut veya komutlar>
end if
2)- İki Şart için kullanım Formatı:
3)- Çoklu şartlar için kullanım formatı:
if <şart> then -- 1.Şart
-- 1.Şart Gerçekleşirse bu satır işler.
<işletilecek komut veya komutlar>
elsif <şart> then -- 2.Şart
-- 2.şart gerçekleşirse bu satır işler.
<işletilecek komut veya komutlar>
elsif <şart> then -- 3.Şart
-- 3.şart gerçekleşirse bu satır işler.
<işletilecek komut veya komutlar>
elsif <şart> then -- 4.Şart
-- 4.şart gerçekleşirse bu satır işler.
<işletilecek komut veya komutlar>
elsif <şart> then -- 5.Şart
-- 5.şart gerçekleşirse bu satır işler.
<işletilecek komut veya komutlar>
.
.
.
.
end if
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
if <şart> then
-- Şart Gerçekleşir ise bu satır işler.
<işletilecek komut veya komutlar>
else
-- Şart Gerçekleşmez ise bu satır iş ler.
<işletilecek komut veya komutlar>.
end if
19 | S a y f a
3)- Aynı anda birden fazla şart için Kullanım Formatı:
if
(<şart>) <operatör> (<şart) <operatör> ...... then
<işletilecek komut veya komutlar>
End if
İF…THEN deyimi kullanılırken şartlar arasında operatörler kullanılmaktadır. Tüm
operatörlerin yazım biçimi aynı iken sadece, eşittir operatörü (=) yerine iki adet eşittir (==)
operatörü kullanılmaktadır.
Eğer birden Fazla Şart aynı anda kullanılacak ise o zaman şartlar ayrı ayrı parantez
içine alınmalıdır. Ve her şart And(&) , OR(|) operatörleri ile bağlanmalıdır.
Karşılaştırma işlemi sırasında şart sağlandığında ilk komutlar bloğu işler. Eğer şart
sağlanmaz ise ikinci kod bloğu işler.
if <şart> <mantıksal Operatör> <şart> then
<işletilecek komut veya komutlar> -- Şart doğru İse
else
<işletilecek komut veya komutlar> -- Şart Yanlış İse
end if
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
Örnek : deger1 değişkeninin değeri 20’den küçük ve deger2 değişkeninin değeri 10’a eşit
ise sonuc değişkenine 100 değerini her iki şart sağlanmıyor ise 50 değerini aktarınız.
var byte deger1,deger2,sonuc
if (deger1>20) & (deger2==10) Then
Sonuc = 100
Else
Sonuc = 50
end if
1.16.1.2
CASE...OF Deyimi
deyimi; çok fazla şart olduğunda, çok sayıda İF..THEN deyimi
kullanmak gerektiğinde kullanılır. CASE..OF yapısını kullanırken dikkat edilecek husus
şartlar daima sabit bir değer olması gerektiğidir. Şartlar Operatör veya herhangi bir işleme
şeklinde yazılamaz.
CASE..OF
deyimi sayesinde çok fazla kod karışıklığı olamaz. Her şarttan sonra
sadece bir komut yazılır. Eğer birden fazla komut yazılması gerekirse o zaman
BLOCK..END BLOCK deyimi ile kod Bloğu oluşturmak Gereklidir.
CASE..OF
Aşağıda CASE…OF deyiminin genel kullanım şekli görülmektedir.
Kullanımı ve Formatı :
S a y f a | 20
Case <deger> Of
<Şart Değeri>
<Şart Değeri>
<Şart Değeri>
<Şart Değeri>
<Şart Değeri>
<Şart Değeri>
<Şart Değeri>
otherwise
<Komut>
End Case
:
:
:
:
:
:
:
<Komut>
<Komut>
<Komut>
<Komut>
<Komut>
<Komut>
<Komut>
Yukarıda da görüldüğü gibi deger değişkeni CASE..OF deyimi arasına alınmaktadır.
Hangi şart değeri, deger değişkenine eşit ise onu takip eden komut işleyecektir. Eğer Verilen
Şart değerleri dışında başka bir değere eşit ise o zaman otherwise komutundan sonraki
komut işleyecektir. Kullanım formatından da anlaşılacağı gibi sadece şartı takip eden tek bir
komut işletilmektedir. Bunun önüne geçilmek için Block..end block deyimi
oluşturulmuştur.
1.16.2 BLOCK…END BLOCK Deyimi
deyimi kod bloğu oluşturmak için kullanılmaktadır. Oluşturulan
blok içerisinde tanımlanan değişkenler ve sabitler sadece blok içerisinde kullanılabilir.
Genellikle CASE..OF deyiminde çoklu komut bloğu işletmek için kullanılmaktadır.
Block…End Block
Block
<komut veya komutlar>
End Block
CASE…OF deyimi ile Kullanım Formatı :
Case <deger> Of
<Şart Değeri> : Block
<komut veya
<komut veya
End block
<Şart Değeri> : Block
<komut veya
<komut veya
End block
Otherwise
Block
<komut veya
<komut veya
End block
End case
komutlar>
komutlar>
komutlar>
komutlar>
komutlar>
komutlar>
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
Genel Formatı :
21 | S a y f a
Yukarıdaki kullanım şeklinde gördüğünüz gibi CASE..OF deyiminde şart değerini
takip eden yerde BLOCK…END BLOCK deyimi kullanılmıştır. Böylelikle birden fazla komut ve
kod parçası işletilebilir kod bloğu oluşturulmuştur.
1.16.3 RECORD Yapısı
Farklı veri özelliklerini tek bir tipte toplamak için kullanılır. Programlama esnasında
kodlamayı kolaylaştırır. Tanımlanan özelliği göstermek için araya nokta ”.” koyulmaktadır.
(Jalv2 derleyicisinin 2.4o sürümü veya üst sürümlerinde kullanılabilir.)
Record Yapısının Genel Formatı :
Record <tanımlayıcı> is
<tip> ozellik1
<tip> ozellik2
.
.
End Record
Var <tanımlayıcı> <degiskenadi>
-- Record tipteki değişken
atanıyor
<degiskenadi>.ozellik1
<degiskenadi>.ozellik2
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
Örnek :
Record Boyut is
Byte En
word Boy
End Record
-- “Boyut” adında record tanımlanıyor
-- “En” adında özellik byte tipinde tanımlanıyor
-- “Boy” adında özellik word tipinde tanımlanıyor
var Boyut dortgen
-- Tanımlanan record, dortgen değişkenine
aktarılıyor
dortgen.en
-- “dortgen” değişkeninin “en” özelliğine “50”
aktarılıyor
-- “dortgen” değişkeninin “boy” özelliğine
“100” aktarılıyor
= 50
dortgen.boy = 1000
Yukarıdaki örnek kod bloğunda “boyut” isimli “en”
record yapısı tanımlanmaktadır. “boyut” record yapısı ile
değişkeni, “en” ve “boy” özelliklerini kullanabilmektedir.
değişkeninden sonra nokta konularak ilgili özellik yazılır.
değiştirilebilindiği gibi değeri de okunabilir.
ve “boy” özelliklerine sahip
tanımlanmış olan “dortgen”
Kullanılması için “dortgen”
Tanımlanan özelliğin değeri
S a y f a | 22
1.17 Döngüler
1.17.1 Forever Loop Döngüsü
Ana programda sonsuz döngü kurmak amacı ile kullanılır. Sonsuz döngü sayesinde
yazılan program kodları sürekli çalışmaktadır. Program kodları yazılırken genel olarak sonsuz
döngü deyimi ana programı teşkil edecek şekilde bir defa yazılmaktadır. Forever Loop
Deyimi her zaman programın kodunun en altında yer almak zorundadır. Bir defa çalışmasını
istediğimiz kodları ve diğer alt program kodları daima Forever Loop deyiminin üst
kısmında yer alır. Alt kısma yazılacak olan kodlar Exit Loop ile sonsuz döngüden
çıkılmadığı sürece kesinlikle işletilmeyecektir. Forever Loop deyimi içerisinden diğer alt
programlar çağırıldığında çalışmasını bitiren alt program tekrar Forever Loop içerisine
geri döner. Döngünün sonunu End Loop ile bitmektedir. Eğer kasıtlı olarak döngüden
çıkılmak istenirse Exit Loop kodu kullanılır.
Forever Loop Döngüsünün Genel Formatı :
Forever Loop
<Komut veya Komutlar>
End Loop
Genel olarak for döngüsü tüm programlama dillerinde kullanılmaktadır. Tekrar sayısı
önceden bilinen sınırlı döngü oluşturmak için kullanılır. Tekrar sayısı; sabit, değişken veya
herhangi bir formatta sayı olarak verilebildiği gibi matematiksel işlem olarak da verilebilir.
Tekrar sayısı byte olarak tanımlandığı zaman en yüksek 255 olarak verilebilmektedir. Word
tipinde tanımlandığında ise en yüksek 65535 olarak verilmektedir. Daha fazla tekrar sayısı
elde edebilmek için iç içe for döngüsü kullanılmalıdır. Eğer kasıtlı olarak döngüden çıkılmak
istenirse EXİT LOOP kodu kullanılır.
For Döngüsünün Genel Formatı :
For <Tekrar adeti> Loop
<Komut veya Komutlar>
End Loop
Örnek : 5 sayısının 3 üssünü hesaplayarak sonucu, sonuc değişkenine aktaran program
kodunu yazınız.
var byte ussu = 3
var byte deger = 5
var word sonuc = deger
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
1.17.2 For… Loop Döngüsü
23 | S a y f a
-- Sonuc Değişkeni deger değişkenine eşit olduğu için tekrar sayısı
ussu-1 olmalıdır
for ussu-1 loop
sonuc = sonuc * deger
end loop
1.17.2.1
Using Komutu
Bazı durumlarda FOR..LOOP döngüsü işler iken o anki tekrar sayısının ne olduğunu
bilmek gerekebilir. Böyle durumlarda USİNG komutu kullanılmaktadır. USING komutu
önceden tanımlanmış bir değişkene o anki döngü değerinin 1 eksiğini aktarmaktadır. USING
komutu kullanırken dikkat edilecek en önemli husus, tekrar sayısı değil, tekrar sayısının 1
eksiğini aktarmasıdır. Bunun nedeni dijital sayıların 0’dan başlamasıdır. Aynı dizelerde olduğu
gibi FOR döngüsünün de başlangıç sayısı 0 olarak atanmaktadır. Tekrar sayısı 5 verildiği
zaman 5 kez tekrar eder ama tekrar sayıları adım adım alındığı zaman 0-1-2-3-4 şeklinde
gözükmektedir.
Örnek : 7 faktöriyeli hesaplayan Kod bloğunu For Döngüsü ve Using Komutunu Kullanarak
Yazınız.
var word sonuc = 1
var byte dongu
-- sonuc değişkeni başlangıcı atandı
-- Tekrar sayısı atanacak değişken
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
for 7 using dongu loop
-- Tekrar sayısı dongu değişkenine atandı
sonuc = sonuc * (dongu+1) -- İşlem Yapılıyor
end loop
-- Sonuc Değişkenin içeriği 5040 olmaktadır.
1.17.3 While…Loop Döngüsü
döngüsü genel olarak tüm programlama dillerinde bulunmaktadır. Önceden
tekrar sayısı bilinmeyen işlemlerde bir veya birden fazla şarta bağlı olarak devam eden
döngüdür. Şart sağlandığı, yani şart sonucu lojik 1 olduğu sürece çalışmasına devam eder.
Lakin şart sonucu lojik 0 olursa döngüden çıkar ve sonraki kod blokları işletilir. Eğer kasıtlı
olarak döngüden çıkılmak istenirse exit loop kodu kullanılır. Yapısı gereği önce şartı veya
şartları kontrol eder. Duruma göre kod bloğunu işletir veya döngüden çıkar.
While
While..Loop döngüsünün genel yazım formatı :
While <Şart veya Şartlar> Loop
<Komut veya Komutlar>
End Loop
Eğer Birden Fazla Şartta Bağlanacak ise şartlar Parantez içinde yazılarak Or(|) veya
And (&) operatörleri ile Bağlanmalıdır.
S a y f a | 24
Örnek : İsim değişkenin değeri 10 ‘ dan küçük , esya değişkenin değeri ise 20 ‘ den büyük
iken sonuc değişkenine 30 , her iki değişkeninde değeri değişip şartı karşılamadığı zaman ise
sonuc değişkeninin değerine 10 aktaran program kodunu yazınız.
Var byte isim
= 9, esya
Forever Loop
While (isim < 10)
Sonuc = 30
End loop
Sonuc = 10
End Loop
&
= 30, sonuc
(esya > 20) loop
1.17.4 Repeat ... Until Döngüsü
döngüsü genelde tüm programlama dillerinde kullanılmaktadır.
Until ’den sonra yazılacak olan şart veya şartlar sağlanana kadar sürekli çalışmaktadır.
Çalışma mantığı olarak while..loop döngüsüne benzemektedir. Birbirlerinden tamamen
farklı yapılara sahiptir. Repeat..until döngüsünde; önce komutlar işlenir ve daha sonra
şart veya şartlara bakılmaktadır. Kasıtlı olarak döngüden çıkmak için exit loop komutu
kullanılmaktadır.
Repeat…until
Repeat
<Komut veya Komutlar>
Until <şart veya Şartlar>
Eğer Birden Fazla Şartta Bağlanacak ise şartlar Parantez içinde yazılarak Or(|) veya
And (&)operatörleri ile Bağlanmalıdır.
Örnek : 7 faktöriyeli hesaplayan Kod bloğunu Repeat .. Until Döngüsü Kullanarak
Yazınız.
var word sonuc = 1
var byte dongu = 0
-- Değişkenler ve başlangıç değerleri
repeat
dongu = dongu + 1
-- Döngü adetini Bulma
sonuc = sonuc * (dongu) -- İşlem Sonucu Sonuc Değişkenine
aktarılacak
until (dongu == 7)
-- Faktöriyeli alınacak Sayı
-- Sonuc Değişkenin içeriği 5040 olmaktadır.
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
Repeat .. Until Döngüsünüm Genel Yazım Formatı :
25 | S a y f a
1.18 ALT PROGRAM TANIMLAMALARI
Jalv2 dilinin yapısı Pascal diline benzemektedir. Pascal dilindeki procedure ve function
alt programları jalv2 dilinde de kullanılmaktadır. Yazılan programlar uzadıkça programı takip
etmek ve hata ayıklamak oldukça zahmetli bir iştir. Bu yüzden alt programlar sayesinde
Kodlar modüller halinde sade ve anlaşılır olarak yazılmaktadır. Yazılan bir alt program farklı
programlarda rahatlıkla defalarca kez kullanabilinmektedir.
Alt programlar parametreli olduğu gibi parametresizde yazılabilmektedir. Bu sayede
amaca uygun ister parametreli, isterse parametresiz alt programlar oluşturulabilmektedir.
Jalv2 dili iki alt Program (Procedure - Function) Kullanımına izin vermektedir. Bununla
beraber Pseudo Tipinde tanımlama sayesinde, alt programların isimleri ile hem değer
alınabilinmekte hem de değer verilebilmektedir. Giriş Parametresi daha önce tanımlanmış bir
dizede olabilir.
1.18.1 Procedure Tanımlaması
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
Procedure tanımlaması geriye değer döndürmeyen alt programlardır. Parametreli
tanımlandıklarında geriye değer döndürmezler ama tanımlanan parametreye değer
aktarabilmektedirler. Parametresiz tanımlanan bir procedure alt programını kullanmak için
sadece ismini yazmak yeterlidir. Ama parametreli bir procedure alt programı kullanıldığı
zaman isim ile beraber parantez içerisinde sırası ile parametreleri belirtmek zorunludur.
Procedure alt programının içerisinde diğer tüm komutlar, deyimler, değişkenler ve
sabitler kullanılmaktadır. Fakat tanımlanan sabitler ve değişkenler yerel olacakları için
procedure dışından ulaşılamazlar.
Parametresiz Procedure Alt Programı Tanımlamasının Genel Formatı :
Procedure <procedure ismi> is
<Yerel tanımlanacak değişkenler v eya sabitler>
<Komut veya Komutlar>
<Deyimler veya döngüler>
end procedure
Parametreli Procedure Alt Programı Tanımlamasının Genel Formatı :
Procedure <procedure ismi>(<parametre>,<parametre>)
<Yerel tanımlanacak değişkenler veya sabitler>
<Komut veya Komutlar>
<Deyimler veya döngüler>
end procedure
Parametre Tanımlaması
Giriş Parametresi
Çıkış Parametresi
Giriş ve çıkış Parametresi
Giriş Parametresi Dize ise
Genel Formatı
<tipi> in <ismi>
<tipi> out <ismi>
<tipi> in out <ismi>
<tipi> in <dizi adı>* +
is
Örnek
byte
byte
byte
byte
in v_deger
out v_deger
in out v_deger
in v_dizi[ ]
S a y f a | 26
Parametreli procedure tanımlamasında procedure isminden sonra parantez
içerisinde tipleri, giriş mi çıkış mı oldukları ve isimleri aralara virgül konularak yazılmalıdır.
Eğer parametre giriş parametresi ise “in” , çıkış parametresi ise “out”, Hem giriş hem de çıkış
parametresi ise “in out” komutları değişken tipinden sonra yazılmalıdır. Çıkış olarak tanımlı
parametrelerde ve hem çıkış hem de giriş olarak tanımlı parametrelerde, parametre
muhakkak bir değişken olarak gösterilmelidir. Aksi takdirde derleme esnasında derleyici hata
verecektir.
Parametreli bir Alt Program Tanımlama ve Kullanma :
procedure deger_aktar( b yte in veri1 ,byte out veri2,byte in out veri3 ) is
for veri1 loop
veri2 = veri1 + 3
end loop
if veri2 < 25 then veri3 = veri3*veri2 else veri3 = 100 end if
end procedure
var byte v_deger = 20, v_sonuc = 15
Forever loop
Deger_aktar(10,v_deger,v_sonuc)
End Loop
Parametresiz bir Alt Program Tanımlama ve Kullanma :
procedure islem_yap is
v_sonuc = v_deger1 * v_deger2
End procedure
Forever loop
islem_yap
End loop
1.18.2 Function Tanımlaması
Function alt programları procedure alt programlarının tüm özelliklerini taşımakla
birlikte geriye değer döndürebilmektedirler. Function alt programların isimleri birer
değişken gibi görülmektedir. Parametreli ve parametresiz olarak tanımlama
yapılabilmektedir. Matematiksel işlemlerde function ismi direkt kullanılabilmektedir.
Procedure tanımlamalarında olduğu gibi parametrelerinin giriş mi çıkış mı olacağı “in” ve
“out” komutları ile belirtilmektedir. Aynı zamanda geri dönüş tipinin tanımlanması
gerekmektedir. Geri dönüş tipi mevcut değişken tipleri olarak tanımlanmalıdır. Geri dönüş
değeri return komutu ile aktarılmaktadır.
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
var byte v_deger1 = 20,v_deger2 = 10,v_sonuc
27 | S a y f a
Parametresiz Function Alt Programı, Tanımlamasının Genel Formatı:
Function <Function İsmi> return <Geri Dönüş Tipi> is
<Yerel tanımlanacak değişkenler veya sabitler>
<Komut veya Komutlar>
<Deyimler veya döngüler>
Return <Geri Dönüş Değeri>
end function
Parametreli Function Alt Programı, Tanımlamasının Genel Formatı:
Function <procedure ismi>(<parametreler>……) return <geri Dönüş tipi> is
<Yerel tanımlanacak değişkenler veya sabitler>
<Komut veya Komutlar>
<Deyimler veya döngüler>
Return <Geri Dönüş Değeri>
end function
Parametre Tanımlaması
Giriş Parametresi
Çıkış Parametresi
Giriş ve çıkış Parametresi
Giriş Parametresi Dize ise
Genel Formatı
<tipi> in <ismi>
<tipi> out <ismi>
<tipi> in out <ismi>
<tipi> in <dizi adı>* +
Örnek
byte
byte
byte
byte
in v_deger
out v_deger
in out v_deger
in v_dizi[ ]
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
Örnek : Parametresiz bir Function Alt programı Tanımlama
Var byte carpim = 10,carpan = 5 ,sonuc
Function hesapla return byte is
Return carpim*carpan
End function
Forever loop
Sonuc = hesapla
End loop
Örnek : Yukarıdaki Örnek Kodu Parametreli bir function tanımlaması ile yapınız
Var byte sonuc
Function hesapla(byte in carpan,byte in carpim) return byte is
Return carpim*carpan
End function
Forever loop
Sonuc = hesapla(10,5)
End loop
S a y f a | 28
1.18.3 Pseudo Tipinde Alt Program Tanımlaması
Pseudo tipi tanımlama Jal/Jalv2 diline has bir biçimdir. Türkçe olarak Sözde
tanımlama olarak çevrilebilir. Tanımlanan Alt Programın ismi ile hem değer almak hem de
değer vermek için kullanılmasına olanak tanır. Yani Tanımlanan Alt Program function ise
kendi ismi ile dışarıya değer aktarabilir. Procedure ise kendi ismi ile alt program içerisine
değer alabilmektedir.
1.18.3.1
Pseudo Tipinde Procedure Tanımlama
Procedure <ismi>’put (<parametre>,<parametre>) is
<Komut veya Komutlar>
end procedure
Procedure için Pseudo tanımlamada isminden sonra ‘put ifadesi yer almaktadır.
Burada Dikkat edilecek husus tanımlı olan parametresinin daima giriş olması ve tanımlı olan
parametrenin 1 veya 2 adet olmasıdır. Eğer parametre 1 tane ise Pseudo tanımlamada
procedure ismine direkt değer eşitlendiğinde aslında değer parametreye gitmektedir. Ama 2
adet parametre varsa dizi tanımlamasında olduğu gibi “*“ “+” köşeli parantez ile ilk
parametre verilirken, direkt procedure ismine olan eşitlemede değer 2. parametreye
gitmektedir.
Örnek : 1 parametreli Pseudo tanımlama
Procedure hesaplama’put(byte in yy) is
xx = yy + 5
End procedure
Forever loop
Hesaplama = 25
End loop
Örnekten de anlaşılacağı gibi Pseudo tanımlama sayesinde yy giriş parametresine
direkt procedure ismi ile ulaşılabilmektedir.
Örnek : 2 parametreli Pseudo tanımlama
Var byte xx
Procedure hesaplama’put(byte in yy,byte in cc) is
xx = yy * 2 + cc
End procedure
Forever loop
Hesaplama[10] = 25
End loop
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
Var byte xx
29 | S a y f a
Procedure alt programında, ilk parametreyi köşeli parantez ile ulaşırken, ikinci
parametreye direkt eşitleme ile ulaşılabilmektedir. Bu sayede bit dizisi oluşturma gibi
işlemlerde Pseudo tanımlama çok işe yaramaktadır. İleriki Bölümlerde Pseudo tanımlama
kullanılarak çeşitli algoritmalar gösterilecektir.
1.18.3.2
Pseudo Tipinde Function Tanımlama
Function <ismi>’get return <geri dönüş tipi> is
<Komut veya Komutlar>
end function
Pseudo tipinde Function tanımlaması yaparken function isminden sonra ’get ifadesi
yer almaktadır. Burada Dikkat edilecek Husus tanımlanan function alt programının giriş
parametresinin olmamasıdır. Pseudo tipindeki Procedure tanımlaması giriş parametresi
olabilirken function tanımlama almamaktadır. Alt programda işletilen komutlar sonucu geri
dönen değer Pseudo tipindeki function tanımlamanın ismi ile dönmektedir.
Örnek : Pseudo Tipinde Function Tanımlaması
Var byte sonuc
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
Function hesapla'get return byte is
return 10 * 2
End function
Forever loop
Sonuc = hesapla – 5
End loop
1.18.4
-- sonuc değişkeninin değeri 15 olur
Alt Programlarının Global Olarak Kullanımı
Jalv2 dili yapı bakımından Pascal programlama diline benzediği daha önceden söz
edilmişti. Pascal Dilinde olduğu gibi alt programlar yazıldığında, önce tanımlanan alt program
kendisinden sonra tanımlanan alt programlara ulaşamazlar. Bunun önüne geçilmek için
kodlarımızı yazarken tüm alt programları global olarak tanımlarsak; Program içerisinde
herhangi bir yerde global olarak tanımlanan alt programları çağırabiliriz.
Örnek :
var word islem_sonucu
function faktoriyel(word in faktoriyeli) return word
function karesi(word in deger) return word
procedure hesaplama(word in deger)
procedure hesaplama(word in deger) is
islem_sonucu = faktoriyel(deger) + karesi(deger)
end procedure
S a y f a | 30
function karesi(word in deger) return word is
return deger*deger
end function
function faktoriyel(word in faktoriyeli) return word is
var word sonuc = 1
var byte dongu = 0
repeat
dongu = dongu + 1
sonuc = sonuc * (dongu)
until (dongu == faktoriyeli)
return sonuc
end function
forever loop
hesaplama(7)
end loop
-- islem_sonucu değişkenin içeriği 5089 olacaktır
Alt programlar yukarıdaki gibi bir tanımlama yapıldığında programın herhangi bir
yerinden çağırılabilmektedirler. Dikkat edilecek husus tüm alt programların isimlerinin
sonlarda bulunan “is” ifadesi, global tanımlama yapıldığında kullanılmaması gerektiğidir. Eğer
yukarıdaki programda global tanımlama yapılmamış olsaydı o zaman hesapla alt programı,
karesi ve faktöriyel alt programlarına ulaşamazdı.
Bazı Durumlarda Tanımlanan Bir Alt Program sadece başka bir alt program tarafından
kullanılır. Diğer alt programlar tarafından erişilmesi istenmez. Yerel Değişken tanımlamasında
olduğu gibi alt program, hangi alt programın içerisinde tanımlandı ise sadece orada
kullanılmaktadır.
Genel Kullanım Formatı :
Procedure içerisinde Function Tanımlama:
Procedure <procedure İsmi> is
Function <Function İsmi> return <Geri Dönüş Tipi> is
<Yerel tanımlanacak değişkenler veya sabitler>
<Komut veya Komutlar>
<Deyimler veya döngüler>
Return <Geri Dönüş Değeri>
end function
<Komut veya Komutlar>
<Komut veya Komutlar>
.
.
end procedure
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
1.18.5 İç İçe Alt Program Tanımlama
31 | S a y f a
Yukarıda görüldüğü gibi procedure içerisinde function tanımlanmıştır. Tanımlanan
Function sadece Procedure içerisinde kullanılmaktadır. İç içe tanımlamalarda iç içe istenildiği
kadar tanımlama yapılabilmektedir.
Function içerisinde Procedure Tanımlama:
Function
<Function İsmi> return <Geri Dönüş Tipi> is
Procedure <procedure İsmi> is
<Yerel tanımlanacak değişkenler veya sabitler>
<Komut veya Komutlar>
<Deyimler veya döngüler>
end procedure
<Komut veya Komutlar>
<Komut veya Komutlar>
.
.
Return <Geri Dönüş Değeri>
end function
Procedure içerisinde Function, Function içerisinde procedure tanımlaması
yapılabildiği gibi Function içerisinde function, procedure içerisinde procedure tanımlaması da
yapılmaktadır.
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
Function içerisinde Function Tanımlaması:
Function
<Function İsmi> return <Geri Dönüş Tipi> is
Function <Function İsmi> return <Geri Dönüş Tipi> is
<Yerel tanımlanacak değişkenler veya sabitler>
<Komut veya Komutlar>
<Deyimler veya döngüler>
Return <Geri Dönüş Değeri>
end function
<Komut veya Komutlar>
<Komut veya Komutlar>
.
.
.
.
.
Return <Geri Dönüş Değeri>
end function
S a y f a | 32
Proceudre içerisinde Procedure Tanımlaması:
Procedure <procedure İsmi> is
Procedure <procedure İsmi> is
<Yerel tanımlanacak değişkenler veya sabitler>
<Komut veya Komutlar>
<Deyimler veya döngüler>
end procedure
<Komut veya Komutlar>
<Komut veya Komutlar>
.
.
.
end procedure
1.19 PIC ASSEMBLER KULLANIMI
1.19.1 Tek Assembler Komutunun Kullanımı
Jalv2 dilinde tek Assembler komutu kullanmak için komutun önüne “asm”
ifadesi eklenmelidir.
Genel Formatı :
Asm <Assembler komutu>
Örnek : 1 komut işleme süresi kadar gecikme süresini Assembler komutu kullanarak yapınız.
Procedure mikrosaniye is
Asm nop
-- 1 mikrosaniye gecikme yapan Assembler komutu (nop)
End procedure
Forever loop
mikrosaniye
End loop
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
Gelişmiş uygulamalar yazarken jalv2 komutlarının yanı sıra hassas ölçüm ve çok küçük
bekleme süreleri gibi işlemlerde pic assembler komutları kullanmak gerekebilmektedir. Jalv2
derleyicisi, içerisinde assembler komutlarının kullanımına izin veren bir yapıda yazılmıştır.
Tek komut kullanımının yanı sıra assembler kod blokları da kullanılabilmektedir. Kullanılan
Assembler komutlarında program içerisinde tanımlanan değişkenler veya sabitler direkt
kullanılabilmektedir.
33 | S a y f a
1.19.2
Assembler Kod Bloğunun Kullanımı (ASSEMBLER…..END ASSEMBLER)
Bazı Durumlarda birden fazla Assembler komutu veya Assembler kod bloğu kullanmak
gerekebilmektedir. Böyle durumlarda Assembler komutları Assembler…end Assembler
bloğu arasına yazılmalıdır.
Genel Format :
Assembler
<Assembler komutları>
<Assembler komutları>
<Assembler komutları>
.
.
End Assembler
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
Örnek : Assembler kod bloğu kullanımı
Procedure asm_blok (byte in veri) is
Var byte say = 10
Assembler
Local basla , devam
Basla :
btfsc
port_a,0
Goto
Basla
Movfw
0x25
Movwf
veri
Devam :
Decfsz
say, f
Goto
Devam
End Assembler
End procedure
Forever loop
Asm_blok(50)
End loop
Yukarıdaki örnekte görüldüğü gibi bir Assembler kod bloğu direkt jalv2 komutları
arasında kullanılmıştır. Yazılan Assembler komutlarındaki etiketler öncelikle Local deyimi ile
Assembler komutları yazılmadan önce tanımlanmıştır. Böylece goto - call Komutları ile
program istenilen etikete dallandırılabilmektedir.
Jalv2 derleyici tarafından desteklenen asm komutları şunlardır :
Aşağıdaki kodlarda kullanılan kısaltmaların anlamları :
B – Bit tipinde deger (0 <= b <= 7)
D – Hedef (’f’ veya ’w’)
F – File register veya Değişken
N – Gerçek Değer, 0 <= n <= 255 (Aksi Belirtilmediği Sürece)
K – Etiket veya Sabit
S a y f a | 34
Aşağıda verilecek olan Jalv2 derleyicisi tarafından desteklenen komutların bazı
işlemciler tarafından destenmediğini unutmayın. Derleyici, kodu derlerken bunu göz önünde
bulundurmaktadır. Tam olarak öğrenmek istiyorsanız işlemcinin Datasheet’ini kontrol
edebilirsiniz.
ADDWF F,D
ADDWFC F,D
ANDWF F,D
CLRF
F
CLRW
COMF
F,D
DECF
F,D
DECFSZ F,D
INCF
F,D
INCFSZ F,D
IORWF F,D
MOVF F,D
MOVW FF
NOP
RLF
F,D
RLCF F,D
RLNCF F,D
RRF F,D
RRCF F,D
RRNCF F,D
SUBWF F,D
SWAPF F,D
XORWF F,D
BCF F,B
BSF F,B
BTFSC F,B
BTFSS F,B
ADDLW N
ANDLW N
CALL K
CLRWDT
GOTO
K
IORLW
N
MOVLW N
RETFİE
RETLW
N
RETURN
SLEEP
SUBLW
N
XORLW
N
TBLRD { * | *+ | *- | +* }
TBLWT { * | *+ | *- | +* }
RESET
OPTION
TRIS N (5 <= N <= 9)
1.20.1 Count( ) Fonksiyonu
Count Fonksiyonu, tanımlanan sabit veya değişken dizilerin eleman sayılarını
veren fonksiyondur. (Bknz : 1.7.3 Count( ) Fonksiyonu)
1.20.2 Defined( ) Fonksiyonu
Bir değişken ya da sabitin daha önceden tanımlanıp tanımlanmadığını kontrol eden
fonksiyondur. Eğer tanımlanmış ise geriye “true” eğer tanımlanmamış ise geriye “false”
değeri döndürür.
Genel Kullanım Formatı :
Defined (<sabit yada değişken adı>)
Örnek Kullanım :
Var byte sonuc
function hesapla return byte is
if defined(sutun) == false then
-- sutun değişkeni var mı ?
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
1.20 DAHİLİ FONKSİYONLAR
35 | S a y f a
var byte sutun = 253
end if
return sutun*5
end function
-- Yok ise sutun değişkeni tanımla
Forever loop
Sonuc = hesapla
End loop
1.20.3 _usec_delay( ) Fonksiyonu
Genellikle küçük zaman gecikmesi sağlamak için kullanılan fonksiyondur. Verilen sayı
Kadar 1us cinsinden kesin olarak bir gecikme yaratır. Örneğin _usec_delay(500) olarak
kullanılırsa 500 us zaman gecikmesi oluşturmaktadır. Gecikme verilen sayıya göre bir veya
daha fazla döngü ve “nop” komutu kullanılarak oluşturulmaktadır. Kullanılacak döngü ve nop
komutunun adeti tanımlanan kristal frekansına göre derleyici tarafından hesaplanmaktadır.
_usec_delay() fonksiyonu en az 1us, en fazla ise 4.294.967.295 saniye (~71.5 dk)
gecikme üretebilmektedir. Ama büyük boyutlu gecikmelerde kullanılması pek tavsiye
Edilmemektedir. Daha çok küçük gecikmelerde (10us – 100 us gibi..) kullanılmaktadır. Büyük
gecikme yapılması isteniyorsa delay.jal kütüphanesi kullanılabilir.
Genel Kullanım Formatı
_usec_delay(<gecikme sayısı>)
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
Örnek : 253 milisaniye gecikme yapınız.(1s = 1000ms = 1000000us)
_usec_delay(253000) -- 253000 sayısı verilirse 253 milisaniye
gecikme üretecektir.
1.20.4 Tipler arası Dönüşüm Fonksiyonları
Farklı veri tiplerinde tanımlanan değişkenleri birbirlerine aktarmak istediğimiz zaman
derleyici bize aşağıdaki gibi uyarı mesajları verecektir.
Yüksek bitli bir değeri Düşük bitli bir değere aktarıldığındaki verilen uyarı Şu şekildedir:
warning: assignment to smaller type; truncation possible
İşaret farkından dolayı verilen uyarı ise şu şekildedir.
warning: signed/unsigned mismatch
Bunun önüne geçmek için aşağıdaki fonksiyonlar kullanılmaktadır. Bazı karışık ve
uzun hesaplamalarda kullanılmazsa derleyici değişken kapasitesini aşan bir değeri değişkene
aktardığında yanlış sonuç alınabilir.
S a y f a | 36
1.20.4.1
Byte( ) Fonksiyonu
Byte tipinden farklı bir değişkeni ya da sabit değeri, byte tipine aktarılmak
istenildiğinde kullanılan fonksiyondur. Normalde böyle bir işlemde derleyici sadece uyarı
mesajı verecektir. Byte fonksiyonu kullanıldığında ise uyarı mesajı vermeyecektir. Böyle bir
atamada word değişkeninin ilk sekiz biti byte değişkenine aktarılmaktadır.
Örnek :
var word xx
var byte yy
yy = Byte(xx)
1.20.4.2
SByte( ) Fonksiyonu
Sbyte tipinde tanımlanan bir değişken -128…127 arası değer alabilmektedir. Diğer
tiplerde tanımlı olan bir değişkeni sbyte tipindeki bir değişkene aktarılması gerekirse sbyte()
fonksiyonu kullanılmaktadır. Kullanılmadığı takdirde tip uyumsuzluğu veya işaret farkı ile
ilgili uyarı mesajı verecektir.
Örnek :
var sbyte xx
var byte yy
1.20.4.3
Word( ) Fonksiyonu
Word tipinden büyük bir değerden veya işareti farklı olan bir değer, word tipine
aktarılmak istenilirse ya da işlem sonucu word tipinden büyük olup word tipine aktarılmak
istenirse kullanılan fonksiyondur.
Örnek :
var sdword xx
var word
yy
yy = word(xx*xx)
1.20.4.4
Sword ( ) Fonksiyonu
Sword tipi işaretli değer alabilen tiptir. Bu nedenle değer aktarıldığında işaret sorunu
ve daha büyük bir değer aktarıldığında ise tip sorunu oluşması istenmeyen durumlarda
sword fonksiyonu kullanılır.
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
xx = sByte(yy)
37 | S a y f a
Örnek :
var sword xx
var word yy
xx = sword(yy)
1.20.4.5
Dword( ) Fonksiyonu
Dword tipi 32 bit işaretsiz değer alabilen en büyük tiptir. Bu nedenle daha yüksek bir
değer olmadığından dolayı dword tipine daha büyük değer aktarılamaz. Dword
fonksiyonunun oluşturulma sebebi sadece sdword tipindeki işaretli bir değeri dword
tipindeki bir değere işaretsiz olarak aktarmaktır.
Örnek :
var sdword xx
var dword yy
yy = dword(xx*xx)
1.20.4.6
Sdword( ) Fonksiyonu
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
Sdword tipi 32 bit işaretli değer alabilen tiptir. Sdword tipine İşaretli değer
aktarıldığından dolayı sdword fonksiyonu kullanılır. Bu sayede derleyici uyarı mesajı vermez.
Örnek :
var sdword xx
var dword yy
xx = sdword(yy)
1.21 PRAGMA KAVRAMI
Pragma kavramı komut veya deyim olmayıp derleyiciye direktif vermek amacı ile
kullanılan ifadedir. Bazı kütüphane dosyalarında ve ileri düzey uygulamalarda
kullanılmaktadır.
Pragma kavramı ileri düzel uygulamalarda kullanıldığı gibi her program başında da
kullanılacak mikrodenetleyiciye ait gerekli sigorta ayarlarını belirtmek içinde kullanılır. Aynı
zamanda kesme kullanılacaksa bunu derleyiciye bildirmede kullanılır.
S a y f a | 38
1.21.1 Chip Konfigürasyon İfadeleri
Pragma İfadesi
Target
Target Chip
Target Clock
Target Fuses
Target Page
Target Bank
Target CPU
Code
Stack
fuse_def
ID Chip’in
Shared
Eeprom
Açıklama
Bu ifade kullanılacak chip’i temsil etmektedir.
Kullanılacak Chip’in adını belirler
-
Sonradan Erişim Adı
Kristal Frekansını belirler
target_clock
Sigorta ayarlarını belirler
Kod sayfalarının uzunluğunu belirler
Ram’in Bank uzunluğunu belirler
Chip’in ailesini belirler(Pic_14, Pic_12..)
Word tipinde en çok alabileceği kod uzunluğu
Donanım Yığının seviyesini belirler
Sembolik sigorta tanımlamalarını belirler
ID adresini ve uzunluğunu belirler
Değişkenlere verilen alanı belirler
Chip’in Eeprom adresini Belirler
target_page_size
target_chip
target_bank_size
target_cpu
-
Tabloda verilen pragma ifadelerinin bazıları normal program geliştiren kişilerin gerek
duymayacağı ifadelerdir. Genellikle bir PIC için geliştirilen aygıt kütüphanesi yazılırken
kullanılmaktadır.
1.21.2 Alt program Optimizasyon İfadeleri
1.21.2.1
FRAME
Procedure ve Fonksiyon alt programlarında kullanılmaktadır. Derleme yapılırken alt
programlarda tanımlanan değişkenleri RAM’in bir alanda toplamaktadır. Derleyici derleme
işlemini gerçekleştirir iken değişkenleri RAM’in en düşük adresinden itibaren yerleştirmeye
başlamaktadır. Bu ifade kullanılırsa derleyici bu sefer yerel değişkenleri ayrı bir ram bank’ına
ya da farklı alanlara tahsis etmektedir. Basit uygulamalarda kullanılması hiçbir anlam ifade
etmemektedir.
Örnek Kullanım :
Procedure <procedure İsmi> is
Pragma Frame
<Yerel tanımlanacak değişkenler veya sabitler>
<Komut veya Komutlar>
<Deyimler veya döngüler>
end procedure
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
Alt program Optimizasyon ifadeleri; genellikle ileri düzey programlar yazılırken veya
kesme ya da sıralı liste oluştururken kullanılmaktadırlar.
39 | S a y f a
1.21.2.2
INLINE
Jalv2 derleyicisi derleme işlemi yapıldığında hex kodunun hemen yanında assembly
kodunu da üretmektedir. Tanımlanan alt programların hepsi derlenirken asm kodunda da
görüldüğü gibi etiket haline getirilir ve alt program çağırıldığında program akışı o etikete
yönlendirilir. Ama bazı durumlarda alt program içeriği birkaç satır olduğunda alt programa
INLINE ifadesi eklenirse derleme esnasında o alt program için etiket oluşturulmaz ve
çağırıldığı yere komple alt programın içeriği eklenmektedir.
Örnek Kullanım :
var byte deger = 0
procedure hesaplama(byte in out islem) is
islem = ( 2+2*2 + 4 /5) + islem
end procedure
forever loop
hesaplama(deger)
end loop
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
Asm Çıktısı :
l_hesaplama –- hesaplama alt programı
movwf
v___islem_1
movlw
6
addwf
v___islem_1,f
movf
v___islem_1,w
return
l__l440 -- Forever Loop
movf
v_deger,w
call
l_hesaplama
datalo_clr v_deger
movwf
v_deger
goto
l__l440
end
Eğer Alt programdan sonra INLINE ifadesi kullanılsaydı O zaman yukarıdaki asm
koduda daha az olacaktı. Aşağıda INLINE ifadesinin kullanılmış Hali yer almaktadır.
var byte deger = 0
procedure hesaplama(byte in out islem) is
pragma inline
islem = ( 2+2*2 + 4 /5) + isl em
end procedure
forever loop
hesaplama(deger)
end loop
S a y f a | 40
INLINE ifadesi Kullandıktan sonra, Asm kodu aşağıdaki gibi olacaktır.
l__l440
movlw
addwf
goto
end
6 -- hesaplama(deger)
v_deger,f
l__l440
Görüldüğü gibi INLINE ifadesi eklendiğinde kodun asm çıktısı daha azalmış oldu. Aynı
şekilde de hex kodu azalmış olacaktır. INLINE ifadesinin kodu azalttığı söylenebilir ama sık sık
kullanılan alt programlarda INLINE ifadesi kullanılırsa ASM kodu azaltmaktan ziyade daha
arttıracaktır. Bu yüzden INLINE ifadesini kullanırken mutlaka bunu göz önünde
bulundurmanız gerekmektedir. Bir veya iki kez kullanılacak olan alt programlarda
kullanmanız daha doğru olacaktır.
1.21.2.3
INTERRUPT
Hazırlanan alt programın, kesme alt programı olduğunu mikrodenetleyiciye bildirmek
için kullanılmaktadır. INTERRUPT ifadesi yer alan alt programın adresi, derleyici tarafından
PIC’in kesme vektörü olan adresine yazılmaktadır. İleriki Bölümlerde Kesme oluşturma ve
kullanma ile ilgili bilgiler verilecektir.
Procedure <Kesme Alt programının İsmi> is
Pragma INTERRUPT
<Yerel tanımlanacak değişkenler veya sabitler>
<Komut veya Komutlar>
<Deyimler veya döngüler>
<Hangi kesme kullanıldı ise Bayrağını sıfırlanması>
end procedure
INTERRUPT ifadesi kullanırken aynı zamanda iki adette parametre alabilmektedir.
INTERRUPT ifadesinden sonra yazılan bu parametreler kesme oluştuğunda PIC ’in nasıl tepki
vereceğini ayarlamaktadır.
NORMAL: Parametre Belirtilmez ise Normal parametresi geçerlidir. Normal parametresinde
PIC kesme oluştuğu anda aşağıdaki işlemleri sırası ile yapmaktadır:
1) Kesme işlemi gerçekleştiğinde işlemekte olan komut işletilir.
2) Sonraki komutun adresi yığın saklayıcıya yazılır.
3) Kesme Alt programı çalıştırılır.
4) Kesme Alt programının sonuna gelince yığın saklayıcıdan adres alınır ve program akışı o
adrese yönlendirilir.
INTERRUPT ifadesinin Normal parametresi ile kullanımı:
Pragma INTERRUPT NORMAL
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
Genel Kullanım Formatı :
41 | S a y f a
FAST: Basit programlarda yani sadece tek kesme oluştuğunda çalışan uygulamalarda
kullanılmaktadır. Normal parametresinde olduğu gibi kesme oluştuğunda işletilmesi gereken
adımları es geçerek direkt kesmeye yönelmektedir. İleri düzey uygulamalarda kullanılması
önerilmemektedir.
INTERRUPT ifadesinin Fast parametresi ile kullanımı:
Pragma INTERRUPT FAST
Eğer Hiç parametre kullanılmıyor ise derleyici normal parametresini baz almaktadır.
1.21.2.4
JUMP_TABLE
Tanımlanan alt programın sıralı liste olacağını belirten ifadedir. Ama jalv2
derleyicisinde programa hiçbir katkısı yoktur. Geriye uyumluluk için kullanılmaktadır.
Kullanıldığında aşağıdaki gibi bir uyarı oluşturmaktadır.
Pragma jump_table
warning : pragma jump_table has no effect. Use lookup tables instead.
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
1.21.2.5
KEEP
Eğer Alt programın tamamı assembly komutlarından oluşuyorsa; Bank sayfasını veya
Page Sayfasının değiştirilmesini engeller ve o sayfada kalmasını sağlar. Page istenilen etiket
atanabildiği gibi Bank’ta istenilen Bankta kalması sağlanabilir. Pek kullanılan bir ifade değildir.
Örnek Kullanım :
Procedure ornek_altprogram is
Pragma KEEP BANK,PAGE
-- bank ve page sabitleneceği bildiriliyor
Assembler
local bekle1,bekle2,basla
page basla
bank 1
goto basla
bekle1:
return
bekle2:
return
basla:
call bekle1
call bekle2
End assembler
end procedure
-- page basla etiketi olacak
-- bank 1 de kalacak
S a y f a | 42
1.21.2.6
NOSTACK
Kullanıldığı takdirde alt programlar normal çağırma yönergesince çağırılmazlar. Onun
yerine kullanılan yerel değişkenler ve alt programların adresleri yığın üzerinden işletilir.
Genellikle kullanılan bir ifade değildir.
Genel Kullanım Formatı :
Procedure <procedure İsmi> is
Pragma Nostack
<Yerel tanımlanacak değişkenler veya sabitler>
<Komut veya Komutla r>
<Deyimler veya döngüler>
end procedure
1.21.3 Kod Optimizasyon İfadeleri
Yazılan kodların optimizasyon ayarlarının yapıldığı ifadelerdir. Kod optimizasyon
ifadelerin aynı zamanda YES ya da NO parametrelerini almaktadırlar. Bu ifadeleri
kullanmasak bile derleyici varsayılan parametre ile derleme esnasında kod optimizasyon
ifadelerini kullanmaktadır.
Not: Varsayılan parametrenin yanına “ * ” işareti koyulacaktır.
EXPR_REDUCE
EXPR_REDUCE ifadesi yazılan matematiksel ya da mantıksal ifadelerde sadeleştirme
yapmaktadır. Örneğin “y * 1” gibi bir ifade yer aldığında derleyici onu “y” şekline
getirmektedir.
Kullanım Formatı :
PRAGMA OPT EXPR_REDUCE <parametre>
*YES : İfade Sadeleştirme Açık
NO : İfade Sadeleştirme Kapalı
1.21.3.2
--PRAGMA OPT EXPR_REDUCE YES
--PRAGMA OPT EXPR_REDUCE NO
CEXPR_REDUCE
CEXPR_REDUCE ifadesi yazılan sabit değerli ifadelerde azaltma yapmaktadır. Buda
derleme esnasında hem zaman kazandırır hem de hafıza için verimli olmaktadır.
Kullanım Formatı :
PRAGMA OPT CEXPR_REDUCE <parametre>
*YES : Sa bit ifad e S adele ştir mesi Açık
NO : Sa bit ifad e S adele ştir me Kapalı
--PRAGMA OPT CEXPR_REDUCE YES
--PRAGMA OPT CEXPR_REDUCE NO
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
1.21.3.1
43 | S a y f a
1.21.3.3
CONST_DETECT
CONST_DETECT ifadesi kodlama esnasında değişkenleri tarayarak değeri değişmeyen
değişkenleri sabit ifadeye dönüştürmektedir. Kullanılması pek tavsiye edilmez.
Kullanım Formatı :
PRAGMA OPT CONST_DETECT <parametre>
YES
*NO
: Sabit tespiti Açık
: Sabit tespiti Kapalı
1.21.3.4
-- PRAGMA OPT CONST_DETECT YES
-- PRAGMA OPT CONST_DETECT NO
LOAD_REDUCE
LOAD_REDUCE ifadesi w registeri üzerindeki yükü azaltmak için kullanılmaktadır.
Karmaşık uygulamalarda kullanıldığında kodlar üzerinde kısaltma yapmaktadır. Ama
genellikle kullanılmamakla birlikte derleyici varsayılan olarak kullanmamaktadır.
Kullanım Formatı :
PRAGMA OPT LOAD_REDUCE
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
YES
*NO
<parametre>
: Yük azaltma işlemi devrede
-- PRAGMA OPT LOAD_REDUCE YES
: Yük azaltma İşlemi Devre Dışı -- PRAGMA OPT LOAD_REDUCE NO
1.21.3.5
TEMP_REDUCE
Derleyici derleme esnasında kodları daha hızlı ve kolay bir biçimde derlemek için
geçici değişken kullanabilmektedir. TEMP_REDUCE ifadesi kullanıldığında derleyici geçici
değişkenleri olabildiğince az kullanmaktadır.
Örneğin :
a = b + c * d + e matematik işlemi, derlenirken üç adet geçici değişken
kullanmaktadır. TEMP_REDUCE ifadesi kullanıldığında ise bir adet geçici değişken kullanır.
Kullanım Formatı :
PRAGMA OPT TEMP_REDUCE
<parametre>
YES : Geçici değişken sadeleştirme devrede
- - PRAGMA OPT TEMP_REDUCE YES
*NO : Geçici değişken sadeleştirme devre dışı - - PRAGMA OPT TEMP_REDUCE NO
1.21.3.6
VARIABLE_FRAME
Normalde Değişkenler ram alanına ayrı ayrı tahsis edilmektedir. Buda ram’i optimum
kullanılmasını sağlamaktadır. VARIABLE_FRAME ifadesi kullanılırsa değişkenler tek bir ram
bank’ında olacaktır.
S a y f a | 44
Kullanım Formatı :
PRAGMA OPT VARIBLE_FRAME
YES
*NO
<parametre>
:Değişken Tahsisi devrede
-- PRAGMA OPT VARIBLE_FRAME
:Değişken Tahsisi devre dışı -- PRAGMA OPT VARIBLE_FRAME
1.21.3.7
YES
NO
VARIABLE_RECUDE
VARIABLE_RECUDE ifadesi kullanıldığı zaman tanımlanan ancak kullanılmayan
değişkenler derlenmemektedir. Derleyici varsayılan olarak YES parametresini kullanmaktadır.
Kullanım Formatı :
PRAGMA OPT VARIBLE_RECUDE
<parametre>
*YES:Değişken Sadeleştirme devrede
-- PRAGMA OPT VARIBLE_RECUDE YES
NO :Değişken Sadeleştirme devre dışı -- PRAGMA OPT VARIBLE_RECUDE NO
1.21.4 Derleyici Konfigürasyon İfadeleri
1.21.4.1
BOOTLOADER
Yazılan Programın PIC ’e Bootloader(Önyükleyici) aracılığı ile yükleneceğini
Bildiren İfadedir. Kullanılacak Bootloader tipine göre 4 adet parametre almaktadır.
1.21.4.1.1
BLOADER
Screammer/Bloader PIC Bootloader kullanılacağını Bildirmektedir.
PRAGMA BOOTLOADER BLOADER
1.21.4.1.2 LOADER18
Özel tasarlanmış bir Bootloader kullanılacaksa; 18F serisi(16Bit Core) Chip’lerde
Başlangıç adresini manual olarak belirlemek için kullanılmaktadır.
PRAGMA BOOTLOADER LOADER <adres>
Örnek: PRAGMA BOOTLOADER LOADER 25
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
Derleyici kod üretme ayarlarını değiştirme imkânı tanımaktadır. Derleyici
Konfigürasyon ifadelerinin bazılarını derleyiciye parametre olarak verebileceğimiz gibi
yazdığımız kodlar aracılığı ile de direktif şeklinde verebiliriz.
45 | S a y f a
1.21.4.1.3 LONG_START
Derlenecek kod Bloğuna aşağıdaki asm kodunu ilave ederek derler.
ORG 0x0000
BSF/BCF _pclath, 4
BSF/BCF _pclath, 3
GOTO _pic_pre_user
NOP
1.21.4.1.4 RICKPIC
Rick Farmer Bootloader kullanılacağını belirtir ve kodu ona göre derler.
PRAGMA BOOTLOADER RICKPIC
Örnek : PRAGMA BOOTLOADER RICKPIC
1.21.4.2
CLEAR
Kullanıcı veri seti oluşturur. Bu ifadenin kullanılması derlendikten sonra ortaya çıkan
hex kodunun boyutunu arttırır. Varsayılan olarak kullanılmaz.
Kullanım Formatı :
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
PRAGMA CLEAR
YES
*NO
<parametre>
: Kullanıcı veri seti oluştur
: Kullanıcı veri seti oluşturma
1.21.4.3
-- PRAGMA CLEAR YES
-- PRAGMA CLEAR NO
EEDATA
PIC programlanırken PIC ’in dâhili Eeprom’una veri yazmak amacı ile kullanılır.
Başlangıç ayarı olarak Eeprom’a yazılacak verileri Pic’i programlama esnasında yazması
gerektiği durumlarda kullanımı uygundur. Yazılacak bilgi Eeprom’un 0. adresinden
başlayarak yazmaya başlar. Aralara virgüller koymak şartı ile sayı veya çift tırnak içinde
ascii ifadeler yan yana yazılabilir.
Kullanım Formatı :
PRAGMA EEDATA <veri>, <veri2> .. .. .. ..
Örnek : “JALv2” Kelimesini dâhili Eeprom’a pragma ifadesini kullanarak yazınız.
PRAGMA EEDATA "J","A","L","v","2"
S a y f a | 46
1.21.4.4
FUSE
Kodlama esnasında yapılan sigorta ayarlarının(fuse config) geçerli olup olmadığını
belirten ifadedir. Varsayılan olarak YES parametresindedir.
Kullanım Formatı :
PRAGMA FUSE
*YES
NO
<parametre>
: Yapılan sigorta ayarları geçerli
: Yapılan sigorta ayarları geçersiz
1.21.4.5
--PRAGMA FUSE YES
--PRAGMA FUSE NO
IDDATA
Aygıt Kütüphanesi yazılırken belirtilen ID adresine, belirtilen uzunluk kadar ID veri
yazmak için kullanılır. 16F877A mikrodenetleyicisinin aygıt kütüphanesini incelediğimizde
şöyle bir ifade yer almaktadır :
Pragma ID 0x2000,4
Burada ifade edilen; ID alanı 0x2000 adresinden başlayacağı ve uzunluğunun 4
olacağıdır. Eğer biz 4 ten büyük bir ID yazarsak o zaman derleyici aşağıdaki gibi bir hata
mesajı verecektir.
id0 is full
Kullanım Formatı :
PRAGMA IDDATA <veri>, <veri2> .. .. .. ..
Örnek
: PRAGMA iddata “1”,”B”,”3”,”A”
1.21.5 MESAJ ÜRETME KOMUTLARI
Bazen derleyici ile programcıya mesaj iletmek gerekebilir. Örneğin bir sabite yanlış
değer verildiği bir durumda bunun yanlış olduğunun belirtilmesi ya da bilgilendirmek amacı
ile bilgi mesajı iletilmesi gerekebilir. Böyle durumlarda jalv2 derleyicisinin 3 adet mesaj
üreten komutu bulunmaktadır.
Bu komutları kullanırken dikkat edilmesi gereken bazı noktalar mevcuttur.
1) Bu komutlar derlenmez. Sadece derleme aşamasında kullanılır. Bu yüzden değişkenler gibi
içeriği değişen değerleri denetleyip duruma göre bu tür mesajlar kullanılamaz.
2) Bu mesajlar sabit değerlerin derleme esnasındaki durumları baz alınarak kullanılması için
yapılmıştır.
3) İletilecek mesajlar yazılırken Türkçe Karakter kullanılmamalıdır.
4) Mesaj Komutu yazıldıktan sonra iletilecek mesaj çift tırnak içerisinde yazılmalıdır.
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
Error :
47 | S a y f a
1.21.5.1
_DEBUG
Eğer derleyici derleme esnasında –debug parametresi ile başlatıldı ise _DEBUG ile
belirttiğimiz mesajlar derleme esnasında gözükür. Genellikle Hata ayıklama işleminde bilgi
vermek için kullanılmaktadır.
Genel Kullanım Formatı :
_DEBUG “<iletilecek Mesaj>”
Örnek Kod : _DEBUG “Hata Ayiklama islemi Baslatildi ”
1.21.5.2
_WARN
Kodlama esnasında programcıya uyarıları iletmek için kullanılmaktadır. Uyarılar
sadece derleme esnasında gözükmektedir. Derlemeye herhangi bir etkileri olmaz.
Genel Kullanım Formatı :
_WARN “<iletilecek Mesaj>”
Örnek Kod : _WARN “Sabitin degeri 100 oldugu icin hiz dusuk olacak. ”
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
1.21.5.3
_ERROR
Kodlama esnasında programcıya hata mesajlarını iletmek için kullanılmaktadır. Hata
mesajları derleme esnasında derleme işlemini keserek derleyici tarafından hatanın olduğu
satıra yönlendirilir.
Genel Kullanım Formatı :
_ERROR “<iletilecek Mesaj>”
Örnek Kod : _ERROR “Sabitin degeri 50 olmalidir.”
S a y f a | 48
1.22 KAYNAKÇA
AYYILDIZ Serkan(2006), Jal ile PIC Programlama
AYYILDIZ Serkan(2009), Kendi Robotunu Kendin Yap
ALTINBAŞAK Orhan(2009), PicBasic Pro ile PIC Programlama
ÇİÇEK Serdar(2009), CCS C ile PIC Programlama
WEB KAYNAKLARI
http://www.casadeyork.com/jalv2/ - Jalv2 Compiler web sitesi
http://code.google.com/p/jallib/ - Jallib web sitesi
http://jallib.blogspot.com/ - Jallib Blog
http://www.casadeyork.com/jalv2/jalv2/jalv2.pdf- Jalv2 Language Reference
http://www.casadeyork.com/jalv2/jalv2opt/jalv2opt.pdf - Jalv2 Compiler Options
http://www.casadeyork.com/jalv2/jalv2pragma/jalv2pragma.pdf - Jalv2 Pragma’s
http://sourceforge.net/projects/jalturk/ - JALTURK Help Dosyası
LİNKLER
http://320volt.com/
http://www.picproje.org
http://www.elektrobilim.org
http://www.kontrolkalemi.com
http://www.teknomerkez.net/sayfa.php?git=jal
http://www.robolojik.com/kitaplar.html
http://arectron.com/
http://www.etepic.com/
http://code.google.com/p/jalv2-kaynak/
Sercan TEK
[email protected]
www.sercantek.com
Revizyon Tarihi : Ekim 2012 Rev.1
Temel Jalv2 Kavramları – Ekim 2012 Rev.1
http://code.google.com/p/jallib/downloads/detail?name=Tutorial_Book_0.4.pdf– Tutorial Book

Benzer belgeler

Temel JALv2 Kavramları

Temel JALv2 Kavramları 1.1 JAL Dili ve Syntax Düzeni JAL, Microchip ve Unicom Firmasının mikro derleyicileri için hazırlanmış olan ücretsiz, yüksek seviyeli ve açık kaynak kodlu bir derleyicidir..JAL adını "Just Another ...

Detaylı