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ı
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 ...