Proton+ macro uygulama ve örnekleri

Başlatan Maxim, 15 Şubat 2018, 09:16:25

Maxim

başlığı ben açtım ama pek bilgim yok
bilenler burada paylaşım yaparlarsa herkes bu güzel özelliği öğrenecektir
selamlar

Hattuşa

arkadaşlar yokmu bu konu hakkında fikri olanlar. açıkcası macro konusunu bende merak ediyorum.
symbol ile tanımlanan bir değişkenin macro ile yapılması farkı nedir ki. yada gosub ile yapılanla farkı nedir

onurinci

Rahmetli Darrel Taylor'un yazdığı bir sürü Macro vardı önce onları okumak gerekir galiba..

Hattuşa

Alıntı yapılan: pro-TR - 17 Şubat 2018, 12:36:45
arkadaşlar yokmu bu konu hakkında fikri olanlar. açıkcası macro konusunu bende merak ediyorum.
symbol ile tanımlanan bir değişkenin macro ile yapılması farkı nedir ki. yada gosub ile yapılanla farkı nedir


ustam macro nedir? ne işe yarar, bahsettiğim gibi symbol veya gosubtan farkı nedir sorusunun cevabını bilsek bir şekilde öğrenirdik

Maxim

Başka bir başlıkta @devre nikli arkadaş proton macro konusunda birkaç açıklamada bulunmuştu
yazısını izninizle buraya taşıyorum.


Device =18F452
Dim zaman_degisken As Word

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

'bu sekilde kullanirsaniz programda her led_yak komutunu kullandiginiz da
'sanki siz yazmissiniz gibi ustteki satirlari ilave eder en garanti yontem
'budur ozellikle fazla gosub kullaniyorsaniz boyle kullanin fakat fazla kod uretir

$define led_bilink TRISB.0=0'
                   PORTB.0=0'
                   DelayMS 500'
                   PORTB.0=1'
                   DelayMS 500'
                   
'bu sekildede kullanabilrsiniz macro rutini bittiginde bir adet bos satir
'bosluk verin macronun bittigini isaret eder yukardaki aciklamalar yine gecerli

$define led_bilink2(zaman) While 1=1'
                           TRISB.0=0'
                           PORTB.0=0'
                           DelayMS zaman'
                           PORTB.0=1'
                           DelayMS zaman'
                           Wend'
                           
'bu sekilde paramertreli macroda kullanabilrsiniz macro parmetresi cok adetli olabilir
've sizin gonderdiginiz degere gore boyut alir gozukur fakat ne yazarsaniz macroda
'kullandiginiz yerde aynisini yazar  bir baska degiskene esitleyebilrsiniz
'ustteki iki aciklamalar yine gecerli
                           
$define led_bilink3(zaman) zaman_degisken=zaman:GoSub alt_delay

'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

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

SD Macro   
GoSub SDSub
Byte_Byte SD_Byte_RW, Return_Var   
Endm
SDSub:
SD_Byte_RW=SD_Byte_RW+1
Return         
OverLibCode:

'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

TRISC=0

Main_Prog:

While 1=1
PORTC=SD_oku
DelayMS 1000
Wend


'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]

'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                                   

main:
led_bilink3(100)

While 1=1
Wend

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

Powered by EzPortal