-- ------------------------------------------------------------ -- Programın Adı : Temel Takometre Uygulaması -- Programcı : SsEeRrCcAaNn -- Sercan TEK -- -- Tarih : 16.11.2011 -- Kütüphaneler : 16F877 -- Compiler : Jalv2 2.4o -- ------------------------------------------------------------ include 16f877Apragma target clock 4_000_000pragma target OSC HSpragma target WDT disabledpragma target LVP disabledenable_digital_io()include delayinclude printconst serial_hw_baudrate = 9_600 -- Seri İletişim Hızıinclude serial_hardwareserial_hw_init() -- Seri iletişimi Hazırlavar word pals = 0var byte sayac,kesme_adetivar byte s1[] = " Saniyede "var byte s2[] = " Devir - "var byte s3[] = " Rpm"_usec_Delay(150000) -- Stabil Çalışması için Gecikme 150ms---------------------------------------------------------------------------------- Kristal Değerine Göre Tmr0 Kesme Ayarı--------------------------------------------------------------------------------if target_clock == 4_000_000 Then -- 4 Mhz Kristal için Gerekli Ayarlar kesme_adeti = 61 -- 1sn için olması Gereken Kesme Adeti OPTION_REG = 0b_0000_0101 -- Bölme Oranı 64end ifif target_clock == 20_000_000 Then -- 20 Mhz Kristal için Gerekli Ayarlar kesme_adeti = 76 -- 1sn için olması Gereken Kesme Adeti OPTION_REG = 0b_0000_0111 -- Bölme Oranı 256end if--------------------------------------------------------------------------------INTCON_TMR0IE = true -- TMR0 Kesmesi AktifINTCON_INTE = true -- RB0 Kesmesi AktifINTCON_GIE = true -- Tüm Kesmeler Aktifprocedure Takometre is pragma interrupt -- Kesme Alt Programları if (INTCON_TMR0IF) then -- TMR0 Kesmesi İse sayac = sayac + 1 -- Sayacı Arttır if sayac == kesme_adeti then -- Kesme adetine Ulaştı mı ? sayac = 0 -- Ulaştı İse 1 sn geçti Demektir print_string(serial_hw_Data,s1) print_word_dec(serial_hw_data,pals) print_string(serial_hw_Data,s2) print_word_dec(serial_hw_Data,pals*60) print_string(serial_hw_Data,s3) print_crlf(serial_hw_Data) pals = 0 -- pals Değerini Sıfırla end if INTCON_TMR0IF = false -- TMR0 Kesmesinin Bayrağını end if -- sıfırla if (INTCON_INTF) Then -- RB0 Kesmesi İse pals = pals + 1 -- Pals değerini Arttır INTCON_INTF = low -- RB0 Kesmesinin Bayrağını Sıfırla end if end procedureforever loop -- TMR0 olduğu için sonsuz döngüye sokuldu. uyku moduna geçince TMR0 saymıyor. -- pals Değişkeni saniyedeki devir sayısını verir -- pals*60 ise dakikadaki devir sayısını verirend loop
include 16f628a -- target PICmicropragma target clock 4_000_000 -- oscillator frequencypragma target OSC HS -- HS crystal or resonatorpragma target WDT disabled -- no watchdogpragma target LVP disabled -- no Low Voltage Programmingenable_digital_io() -- make all pins digital I/Oconst byte LCD_ROWS = 2 -- LCD with 2 linesconst byte LCD_CHARS = 16 -- and 16 characters per linealias lcd_en is pin_b2 -- data triggeralias lcd_rs is pin_b3 -- command/data select.pin_b2_direction = outputpin_b3_direction = outputalias lcd_d4 is pin_b4alias lcd_d5 is pin_b5alias lcd_d6 is pin_b6alias lcd_d7 is pin_b7pin_b4_direction = outputpin_b5_direction = outputpin_b6_direction = outputpin_b7_direction = outputinclude delayinclude printinclude lcd_hd44780_4 -- LCD library with 4 data lineslcd_init()pin_b0_direction = inputpin_b1_direction = inputvar sdword sonuc ,s1 = 1 ,c = 0 ,sayi =0INTCON_TMR0IE = trueOPTION_REG = 0b_0000_0000 -- 1/2 procedure say is -- 1 us'lik gecikmetmr0 = 0while tmr0 < 250 loop sayi = (sayi + 1) end loopend procedureprocedure yaz is -- Tıklandığı anda saymayı keser sayaç sıfırlanır bekler.if pin_b1 == high thensonuc = 600000/sayiprint_sdword_dec(lcd,sonuc)lcd_cursor_position(2,5)sayi = 0s1 = s1 + 1while s1 > c loopif pin_b1 == low thenlcd_clear_screen()s1=s1-1end ifend loopend ifend procedureforever loopsayyazif pin_b0 == high thenprint_sdword_dec(lcd , sayi) - isis de 950 salise ye gelince butonu aktif edin ve lcd den asıl sayma oranına bakınlcd_cursor_position(2,0)end ifend loop
define lcd_dreg portbdefine lcd_dbit 4define lcd_bits 4define lcd_rsreg portbdefine lcd_rsbit 2define lcd_ereg portbdefine lcd_ebit 3define lcd_lines 2define lcd_commandus 2000define lcd_dataus 40a var wordson_deger var worddeger var wordhiz var wordhiz_dev var worddevir_sayisi var wordinput porta.0input porta.1 '***********************ANA PROGRM*******************************PAUSE 100son_deger = 0main:count porta.0,1000,degerson_deger = son_deger + degerdevir_sayisi = son_degerhiz = deger * 60 if porta.1=0 then son_deger=0lcdout $fe,1lcdout $fe,2lcdout, "hiz:",dec hizlcdout $fe,136," dev/dk"lcdout $fe,$c0,"dev say:",dec devir_sayisi GoTo main
merhaba arkadaşlar basic te yazılmış bu programı Jalv2 de nasıl yazarız yine takometre yapımı için?Kod: [Seç]define lcd_dreg portbdefine lcd_dbit 4define lcd_bits 4define lcd_rsreg portbdefine lcd_rsbit 2define lcd_ereg portbdefine lcd_ebit 3define lcd_lines 2define lcd_commandus 2000define lcd_dataus 40a var wordson_deger var worddeger var wordhiz var wordhiz_dev var worddevir_sayisi var wordinput porta.0input porta.1 '***********************ANA PROGRM*******************************PAUSE 100son_deger = 0main:count porta.0,1000,degerson_deger = son_deger + degerdevir_sayisi = son_degerhiz = deger * 60 if porta.1=0 then son_deger=0lcdout $fe,1lcdout $fe,2lcdout, "hiz:",dec hizlcdout $fe,136," dev/dk"lcdout $fe,$c0,"dev say:",dec devir_sayisi GoTo main
peki lcd ye nasıl göndeririz bu veriyi?
print_string(serial_hw_Data,s1) print_word_dec(serial_hw_data,pals) print_string(serial_hw_Data,s2) print_word_dec(serial_hw_Data,pals*60) print_string(serial_hw_Data,s3) print_crlf(serial_hw_Data)