proton basic fonksyon ve sub rutine alt yapisi

Başlatan Tarik konca, 18 Mart 2019, 21:11:38

Tarik konca

uzun suredir proton basicin yeni surumu varmi varsa neler var diye bakmiyordum

dun baktim

sub rutin yapisini parametresiz olarak eklemisler  sub()  end sub olarak

sacma olmus parametre yoksa ne ise yarayacakki label olusturur gosub yazip gonderirsin olur biter

parametreli sub rutin yapisi kullanmak istiyorsaniz fonksiyon alt yapisini kullanmaniz gerekiyor

oda eskiden 24 serisi islemciler icin vardi artik 8 bit islemciler icin de kullanilabilir olmus

proc endproc seklinde 12 adete kadar parametre tanimlayabiliyor sunuz fonksiyon oldugu icin geriye degerde dondurebiliyor

gerekli bilgiler son versiyonun servis manuelinde var fakat kotu haber

fonksiyon altyapisi sadece 18f25k22 icin bedava kullanilabiliyor diger 8 bit islemciler icin kullanmak istiyorsaniz galiba para

istiyor yanlis anlamadiysam  23 subatta eklenmis manueldeki ingilizce aciklama altta:

Additions and Fixes made in version 3.7.0.3 of the Proton Compiler and version 1.0.5.4 of the Proton24 Compiler. (23rd February 2019)

Proton Additions

Added procedures to the 8-bit Proton compiler. These can be activated by donating for an upgrade file via a Paypal account.

Please contact StoryPainter@hotmail.com for details of the upgrade donation.

The purchase of the procedures upgrade will help maintain the compilers so that new features can be added and new devices added.



-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

daha once konu alttaki linkdeki mesajimda aciklanmisdi siz para vermeden kullanmak isterseniz fonksiyon alt yapisini alttaki linkdeki konuyu   
                                                                                                                                                                                                                               
okuyun                                                                                                                                                                                                                   
                                                                                                                                                                                                                             
bedavayada yapilabiliyor  makro olarak tanimlarsaniz fonksiyon ve makro konusuyla ilgili anlamadigiz yer olursa yazin buralardayim

onceki mesaj link:

https://etepic.com/index.php/topic,3843.0.html
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Tek Care Format C:

Hattuşa

açıkcası protonda macro kullanımını yeterince anlamadım.zaten bahsettiğiniz yerde de bu konuda aynı soruyu sormuştum

Maxim


ete

#3
Macro denilen şey Proton da olmayan Procedur uygulamasını dolaylı yoldan yapmaya yarar.
Başka bir deyiş ile GOSUB XXXX demek  yerine bir makro yapıyorsun parametre veriyorsun program o makroya ait alt programa gidip parametreye değer yükleyip dönüyor.
Örnekle açıklamak gerekirse,
Bir ADC okuma alt programımız olsun. Bu alt programda ADC-0 kanalından bilgi okuyup o bilgiyi kullanarak Volt değeri okuyoruz. Programda GOSUB ADC_OKU demiyoruz da ADC_OKU(VOLT) denildiği zaman program otomatikman macroya gidip Volt değerini alıp geliyor. Tabiiki önceden şunları O macro  içinde yapmak gerekiyor.
ADCIN 0,HAM
Volt=HAM*/235 ' formülü rastgele örnek verdim
Kısaca macro Volt değerini hesaplayıp dönüyor sende Gosub RETURN gibi fuzuli işlerle uğraşmamış oluyorsun O işi program yapıyor.
Buna bazı program dillerinde fonksiyon deniliyor kiminde SUB Procedur deniliyor derleyici haricinde yapınca da MAcro oluyor adı.
Çok parametreli makrolar yada procedurlar yapılması mümkün.
Ete


Tarik konca

tek mesajda butun kullanim bicimlerini anlattigim icin galiba karisiklik oldu

bu linkdeki https://etepic.com/index.php/topic,3843.0.html  mesajiniza cevap yazmamisim cok uzun zaman olmus ozur dilerim unutmusum

butun kullanim bicimlerini ayri ayri mesajlarda anlatim

bu sekilde daha sade anlasilir progragramlar yazabilirsiniz makrolarinizi ornegin

proje klasorunuze kutuphane.inc isimli bir dosya acin ve o dosyaya yazin daha sonra proje dosyaniza islemci tanimindan ve sigorta

ayarlarindan sonra olan satira include komutu ile ekleyin bu sekilde main dosya daha sade ve anlasilir olur


kutuphane.inc dosyanizin icergi alttaki anlatimdaki gibi olmalidir sorun cikartmamasi icin

'kutuphane.inc dosyasi baslangici

'degiskenler

'symboller

'makrolar

goto kutuphane_cikis

'varsa gosub ile yonlendirmeniz gereken alt programlar

'veya varsa fonksiyon alt yapisinda olan makrolar icin gosub ile yonlendirmeniz gereken alt programlar


kutuphane_cikis:

'kutuphane.inc dosyasi sonu




artik bu sekilde kullanabilirsiniz


device=18f452

'sigorta ayarlari

'degisken tanimlamalari

include "kutuphane.inc"


main:

'komutlar


stop
Tek Care Format C:

Tarik konca

Device =18F452

$define led_yak TRISB.0=0:PORTB.0=1

main:

led_yak

stop


'bu sekilde kullanirsaniz programda her led_yak komutunu kullandiginiz da

'sanki siz yazmissiniz gibi $define led_yak tan sonra olan satirlari ilave eder en garanti yontem

'budur ozellikle fazla gosub kullaniyorsaniz boyle kullanin fakat fazla kod uretir

'windows not detferi uygulamasindaki degistir komutu gibi her led_yak kelimesi

'gordugu yere $define led_yak tan sonra yazdiginiz komutlari yazar

'tabi bu isleri asembler uretirken yapar sizin yazdiginiz yerleri degistirmez

'parametresiz makronun avantajlari bir komut yazarak bir cok komut yazmis olursunuz

'$define ile tanimlama yaparken yazdiginiz her yeni komutun arasina iki nokta ust uste isaretini ilave ediniz

Tek Care Format C:

Tarik konca

Device =18F452

$define led_bilink TRISB.0=0'
                   PORTB.0=0'
                   DelayMS 500'
                   PORTB.0=1'
                   DelayMS 500'

main:

led_bilink

stop


                   
'bu sekildede kullanabilrsiniz macro rutini bittiginde bir adet bos satir

'bosluk verin macronun bittigini isaret eder bir ust mesajdaki aciklamalar yine gecerli
Tek Care Format C:

Tarik konca

device=18f452

$define led_bilink(zaman) While 1=1'
                           TRISB.0=0'
                           PORTB.0=0'
                           DelayMS zaman'
                           PORTB.0=1'
                           DelayMS zaman'
                           Wend'
                           
main:

led_bilink(1000)

stop



'bu sekilde paramertreli macroda kullanabilirsiniz macro parmetresi cok adetli olabilir

'en fazla kac adet parametre tanimlanabilecegini test etmedim fakat sanki sayi siniri yok gibi

'olsun yinede parametre sayisini cokta abartmamak gerekli sonucta proton basic compiler kullaniyoruz

'ne olur ne olmaz sonra cok karisik bir makro icinde hata aramakta var isin icinde

'makroyu yazip parametresine deger atadiginizda parametre degerini makro icinde kullandiginiz yerler de kullanir

've sizin gonderdiginiz degere gore boyut alir gozukur fakat ne yazarsaniz macroda

'kullandiginiz yerde aynisini yazar  bir baska degiskene esitleyebilrsiniz

'ust mesajlardaki aciklamalar yine gecerli
Tek Care Format C:

Tarik konca

device=18f452

$define led_bilink(zaman,deger) While 1=1'
                           TRISB.0=0'
                           PORTB.0=deger'
                           DelayMS zaman'
                           PORTB.0=0'
                           DelayMS zaman'
                           Wend'
                           


main:

led_bilink(1000,85)

stop

'buda cok parametre icin bir ornek

'ust mesajlardaki aciklamalar yine gecerli
Tek Care Format C:

Tarik konca

device=18f452

$define led_bilink(zaman) zaman_degisken=zaman:GoSub alt_delay


main:

led_bilink(100)

While 1=1
Wend

alt_delay:
TRISB.0=0
PORTB.0=0
DelayMS zaman_degisken
PORTB.0=1
DelayMS zaman_degisken
Return

stop


'bu sekilde kullanirsaniz daha az kod uretir fakat yaptiginiz gosub lari iyi sayin

'yaptiginiz gosub adedi stack level i asarsa islemci surekli reset atar

'yada bir yerde kilitlenir kalir unutmayin proton basic in hazir komutlarida

'kendi icinde gosub komutunu kullanir
Tek Care Format C:

Tarik konca

device=18f452

$define SD_oku SD
Dim SD_Byte_RW As Byte
Dim deger As Byte

GoTo main

SD Macro   
GoSub SDSub
Byte_Byte SD_Byte_RW, Return_Var   
Endm

SDSub:
SD_Byte_RW=SD_Byte_RW+1
Return         

Main:

TRISC=0

While 1=1
PORTC=SD_oku
DelayMS 1000
Wend

stop


'bu sekilde kullanirsaniz gonderdiginiz macrodan deger dondurur

'ayni c deki fonksiyon gibi geri donen deger byte word sanirm float da olabilir

'aslinda proton basici ustteki anlatimlardaki gibi kullanirsaniz cok daha karisik

'islerden basit programlar la cikabilirsiniz c compiler lara gerek duymazsiniz

'yinede bu dunyada program cilik gecerli dilinin c veya c++ oldugu gercegini

'degistirmez diger c versiyonlari c++ dan sonra degistirilerek sanki uretimis
Tek Care Format C:

Tarik konca

proton basic komutlarini ozellestirme  (sadelestirme)



birde proton basicin kendi komutlari yine bu yontemle ozellestirilebiliyor

alttaki ornek de serout komutunu ozellestirdim zaman zaman lazim oluyor

daha sade programlar yazmak icin

$define ozel_serout SerOut PORTA.0, 16780,

bunu yazar programda herhangi bir yerde bir alttaki komutu kullanirsaniz

sorunsuz calisir ben cok kullaniyorum programi rahat anlayabilmem icin

ozel_serout[66]


ornek:

device=18f452

$define ozel_serout SerOut PORTA.0, 16780,


main:

ozel_serout[66]

stop



aklima gelenler bunlar sanirim bu yontemle daha bir cok sekillendirmeler

yapilabilir kendinize ozel bir proton basic olur

proton basici tercih etmemin en buyuk sebebi bu komuttur

sorulariniz olursa buralardayim                                   


Tek Care Format C:

Powered by EzPortal