Jalv2 ile Virgüllü sayı tanımlama ve Kullanma

Başlatan 3L3CTRO, 07 Temmuz 2013, 10:13:42

3L3CTRO

Jalv2 Dili gün geçtikçe geliştirilen Genelde hobi amaçlar için kullanılan yüksek seviyeli bir PIC programlama dili olduğunu hepimiz biliyoruz. Gerek Kütüphanesi ve Gerek kod kolaylığı bakımında zevkli bir dil. Bugüne kadar bir çok yazılım geliştirdim ve üzerine çalışmalar yaptım. Geliştirilme konusunda tam umudumu yitirmiş iken geliştirici süpriz yaptı ve Jalv2 diline yeni özellikler eklemeye başladı. Benim gözümde en sıkıntılı eksiği virgüllü sayıları desteklememesiydi. Hatta geliştiricisine mail attığımda bana çok yer kapladığı için gerek görmediğini söylemişti. Herhalde talep fazla olunca bu özelliği ekledi.

Artık aşağıdaki adresten indireceğiniz \"Jalv24q-beta\" derleyicisi ile Jalv2 de virgüllü sayılarla işlem yapılabilecek. Float tipinde değişkende tanımlanacağı gibi kod yazarken direkt virgüllü sayıyı yazıpta gerekli işlemleride yapabileceğiz. Henüz float tipi için bazı fonksiyonlar yazılmadığı için ekrana basma gibi işlemleri kod yazarak çözmekteyiz. Fakat ileriki günlerde uygun print,format libleri yayımlanacaktır.

http://www.casadeyork.com/jalv2/archive/20130608-jalv24q-beta.zip

Diğer yenilikler aşağıdaki gibidir.

History
=======
2.4q  -- ? ??? ????
         * don\'t allow bit offset placement to non-bit variables
           (var BYTE x at y:2)
         * allow `VAR xx AT rec[\'.\'member][\'[\'subscript\']\']...\' 
         * allow non-bit variables to declare byte offets
           (VAR BYTE x AT y + 2)
         * fixed and returned an optimization that reduces code size
           when an empty if block is found:
             IF cond THEN
             END IF
           (thanks Albert!)
         * minor optimization. In this sequence: `movwf val; movf val,w\'
           remove the second as redundant. This happens with the `pass
           result in w\' and `return result in w\' code.
         * an inline assembly move to a constant location did not set
           the data bits correctly (movwf 0x90).
         * assign from constant was completely munged in most cases
         * fixed documentation errors (thanks Rob!)
         * expanded documentation for records
         * minor code generation optimization in equality operators
         * beginning of floating point support
         * fixed an error that caused false positives with branch errors
         * clear out last multiply/divide values when branching
         * always inline some multiplies on the 16 bit cores
         * fixed a problem in binary AND and binary OR when val1 is shared
           and val2 is not *or* dst is in a different bank than val2
         * parsed assignment within a procedure definition (default parameter)
           but default parameters are not allowed. (Rob)
         * re-ordered some optimizations for tigher code (Michael) 
         * detect if a function is declared but not defined
         * when assigning from a pointer of smaller type, the calle to
           extend the sign was missing (Michael)
         * variables manually placed in shared regions must have the SHARED
           flag set
         * fixed variable allocator 
         * fixed SHARED testing in the event that part, but not all of a
           variable is shared
         * cleaned up new warning from gcc 4.7.2
         * fixed string constant initialization when the string contains an
           embedded \'\\0\'
         * 16 bit inline multiply did not setup indirection correctly 
         * added `asm reset\'

Örnek bir program yaptım ve gayet güzel oldu.



include 16F877a

pragma target clock       20_000_000       -- Kristal 20 MHZ
pragma target osc         hs
pragma target WDT         DISABLED        -- WDT Kapalı
pragma target PWRTE       ENABLED         -- power up timer Açık
pragma target LVP         DISABLED        -- Düşük Voltajlı Programalama Kapalı

enable_digital_io()

alias lcd_rs           is pin_b0              -- LCD command/data select.
alias lcd_rs_direction is pin_b0_direction
alias lcd_en           is pin_b1              -- LCD data trigger
alias lcd_en_direction is pin_b1_direction

alias lcd_dataport is portb_high            -- LCD data  port
alias lcd_dataport_direction is portb_high_direction

const byte LCD_ROWS     = 2                     -- 2 lines
const byte LCD_CHARS    = 16                    -- 16 chars per line

lcd_rs_direction        = output
lcd_en_direction        = output
lcd_dataport_direction  = output

const bit ADC_HIGH_RESOLUTION = high
const byte ADC_NCHANNEL = 1
const byte ADC_NVREF = ADC_NO_EXT_VREF
include adc
adc_init()


include lcd_hd44780_4
lcd_init()

include print

var float okunan_Dec  -- Burada Float tipi Değişken tanımlanıyor.

const byte Str1[]   = \"  Virgullu Sayi \"
const byte Str2[]   = \"    Kullanimi   \"
const byte Str3[]   = \" Okunan Sicaklik\"

lcd_cursor_position(0,0)
print_string(lcd, str1)
lcd_cursor_position(1,0)
print_string(lcd, str2)

_usec_delay(500000)

lcd_clear_screen()
lcd_cursor_position(0,0)
print_string(lcd, str3)

forever loop

lcd_cursor_position(1,7)
okunan_Dec =(0.48828125*ADC_Read(0)) -- sabit virgüllü sayı ile işlem yapılıyor.
print_dword_dec(lcd,okunan_Dec)

end loop


Dosyaları buradan indirebilirsiniz.

http://yadi.sk/d/UNBq8iw_6YnXl

Hızlı Yanıt

Not: Bu konu bir moderatör tarafından onaylanmadan görüntülenmeyecektir.

Adı:
E-Posta:
Doğrulama:
Lütfen bu kutuyu boş bırakın:
IRFP250 Nedir:
kısayollar: göndermek için alt+s veya önizleme yapmak için alt+p'ye basın