PIc Basic Pro ile Programlama

'Programlama' forumunda sha. tarafından 10 Eki 2009 tarihinde açılan konu

Konu etiketleri:
  1. sha.

    sha. <b>..daha çirkin, daha huysuz</b>

    1.1. Pic Basic Pro Hakkinda : Pic Basic Pro programlama dili mikrochip firmasinin ürettigi mikrodenetleyicileri programlamada kullanilan daha çabuk ve kolay bir dildir. Pic Basic Pro programlama dili ile 8 ile 84 pin arasindaki degisik özelliklerdeki mikrodenetleyiciler için program yazilabilir. Üst seviyeli programlama dilleri sayesinde çok daha rahat ve hizli bir sekilde programlama yapilabilmektedir. Ancak bu programlar çok karmasik sistemlerin çözümünde yetersiz kalabilmektedir.Yüksek seviyeli bu programlama dilleri assembly dili komutlari ile birlikte kullanilabilmektedir. Bu durumda yüksek seviyeli bir pic programlama dili ve PIC assembly dili birlikte kullanildiginda bu sorun ortadan kalkmaktadir.

    1.2. Pic Basic Pro Komut Seti : Pic Basic Pro’nun komut seti basic programlama diline çok benzemektedir. Basic programlama dilinde olmayan komutlar da mevcuttur. Çizelge 15’de Pic Basic Pro komutlari görülmektedir.

    PIC BASIC PRO programlama dilinin tüm yönleriyle açiklanmasi bir kitap konusu olacagindan burada sadece bu çalisma için gerekli olan komutlar ve bunlarin özelliklerinden bahsedilmistir.

    1.2.1. Degiskenler ( Variables ) : PICBASIC programlama dilinde üç tip degisken tipi kullanilmaktadir. Degiskenler BIT, BYTE veya WORD büyüklügünde olabilirler. Örnegin: k VAR byte (byte büyüklügünde K degiskeni)

    [​IMG]

    1.2.2. Etiketler ( Labels ) : Etiketler GOTO veya GOSUB gibi komutlara referans teskil ederler. Bu komutlarin icrasindan sonra program etiketle belirtilen satira dallandirilir. Etiketler herhangi bir kelime olabilir ve sonuna iki nokta üst üste ( : ) konur.


    Örnegin: Etiket: HIGH PORTB.4
     
  2. sha.

    sha. <b>..daha çirkin, daha huysuz</b>

    1.2.3. Nümerik sabitler ( Numeric constants ) : Nümerik sabitler üçsekilde tanimlanirlar. Bunlar decimal, binary ve hexadecimal‘dir. Binary deger tanimlanirken degerin basina ‘%’ ve hexadecimal degerinbasina ‘$’isareti konulur. Decimal deger tanimlanirken herhangi bir isaret kullanilmaz. Örnegin:

    100‘decimal deger .

    %100 ‘decimal 4 için binary deger.

    $100 ‘decimal 256 için hexadecimal deger.

    1.2.4. Portlar : PIC’in herhangi bir portunun istenilen pini giris yada çikis olarak tanimlanabilir. Daha sonra istenilen deger ilgili porta yüklenir. Degerin porta yüklenmesi için farkli yollar vardir.

    Örnegin:

    TRISB = 0 ‘Portb’nin tüm pinlerini çikis olarak tanimlamada kullanilir’

    TRISA=1 ‘Portb’nin tüm pinlerini giris olarak tanimlamada kullanilir’

    TRISC = %11110000 ‘Portb’nin ilk dört biti çikis,son dört biti giris olarak tanimlamada kullanilir’

    Yönlendirilen port pinlerine bilgilerin gönderilmesi için birkaç yol vardir. Örnegin:

    PORTB = %11110000 : ‘Portb’nin ilk dört pinine lojik-0 , son dört pinine ise lojik-1degeri gönderilmede kullanilir .’

    PORTB = 1 ‘Portb’nin bütün pinlerine lojik-1 degeri gönderilmede kullanilir.’

    HIGH PORTB.4 ‘PORTB’nin dördücü pinine lojik-1 degeri gönderilmede kullanilir .’

    LOW PORTB.6 ‘PORTB’nin altinci pininelojik-0 degeri gönderilmede kullanilir.’

    1.2.5. Zaman gecikmesi ( Pause ) : Pause programi istenilen bir süre beklemeye alir. En fazla 61.535 milisaniyelik bir gecikme saglanabilir. Bu da bir dakikanin biraz üstünde bir degerdir. Pause komutundaki deger milisaniye büyüklügündedir. Örnegin, PAUSE 49000 (49 saniyelik gecikme). Pause komutu bu çalismada komut yazimi anlaminda programi basitlestirmistir. Eger 49 saniyelik gecikmeyi assembly kodunda yazmak gerekseydi, su sekilde yazilmalidir.


    LIST = P16F877

    INCLUDE “P16F877.INC”

    SAYI :2'> EQU H’20’

    SAYI1 EQU H’21’

    SAYI2 EQU H’22’

    GECIKME

    MOVLW H’FF’

    MOVWF SAYI

    DONGU

    MOVLW H’FF’

    MOVWF SAYI1

    DONGU1

    MOVLW H’FF’

    MOVWF SAYI2

    DONGU2

    DECFSZSAYI2,F

    GOTO DONGU2

    DECFSZ SAYI1,F

    GOTO DONGU1

    DECFSZ SAYI

    GOTO DONGU

    RETURN


    Oysa bu programi PIC BASIC PRO programlama dilinde PAUSE 49000 seklinde tek satirda gerçeklestirmek mümkün olmaktadir. Görüldügü üzere PIC BASIC PRO ile program yazmak hem çok rahat hem de çok basit olmaktadir.
     
  3. sha.

    sha. <b>..daha çirkin, daha huysuz</b>

    1.2.6. Döngü düzenlemek ( For…Next ) : Bazi islemlerin önceden belirlenen sayida tekrarlanmasi gerekmektedir. PICBASIC programlama dilinde bu isi FOR…NEXT döngüsü bir sayaç gibi çalisarak gerçeklestirmektedir. FOR komutundan sonra bir degiskene ilk deger atanip, bu degiskenin sayacagi son deger de belirtilir. Ayrica degiskenin kaçar kaçar artacagi STEP komutuyla kontrol edilebilmektedir. Son olarak NEXT döngüsüne gelen program eger son degere ulasilmamis ise bir sonraki deger için ayni isi yapacaktir. Örnegin:

    For k=2 TO 10 step 2

    Pause1000

    Next

    Burada k degiskeni 2’den 10’a kadar ikiser ikiser saymaktadir. Her bir döngüde bir saniyelik bir gecikme saglamaktadir. Döngü toplam bes tur atacagindan 5 saniyelik bir gecikme saglanmis olacaktir.

    1.2.7. Kontrol yapmak (IF…Then) : Bazi islemlerde bir durumun kontrol edilmesi gerekebilir. Picbasic programlama dilinde bu isi IF…THEN komutu saglamaktadir. Bu kontrol deyimi bir veya birden çok karsilastirmayi icra edebilir. IF…THEN kontrolörü bir durumun dogru (true) veya yanlis (false) olmasini karsilastirarak degerlendirir. Eger degerlendirme dogru iseTHEN komutundan sonraki komut icra edilmektedir. Eger degerlendirme yanlis ise program bir sonraki satira geçmektedir. Örnegin:

    IF portb.2 = 0 then high porta.1

    Else high portb.3

    Bu program parçasinda eger portb’nin ikinci pinine lojik-0 gelmisse porta’nin birinci pinine lojik-1gönderilir aksi taktirde portb’nin üçüncü pinine lojik-1 gönderilecektir.


    1.3. Kesmeler : Bir Pic mikrodenetleyicisinde kesmelerin nasil oldugundan 3. bölümde bahsedilmistir. Burada sadece Pic Basic Pro dilinde kesmelerin nasil yapildigindan biraz bahsedilecektir.

    Bir kesme programi yazmak için en kolay yol ON INTERRUPT yazmakla baslar. Bu komut Pic Basic Pro programinin dahili kesmeleri aktif etmesini ve kesme geldigi anda mümkün olan en kisa zamanda kesme alt programina dallanmasi gerektigini bildirir. ON INTERRUPT kullanilirsa, bir kesme olustugu anda program bulundugu yerden alt programa dallanmakta ve kesme alt programini icra ettikten sonra kaldigi yere geri dönmektedir. Fakat bu islem assembly dilindeki kadar hizli olmamaktadir. Ilk olarak kesme geldigi andaki komutun icrasi tamamlanmakta ve ardindan kesme islemi gerçeklestirilmektedir. Eger PAUSE 10000 gibi bir komut icra edilirken kesme gelmisse bu komutun icrasi bitene kadar (10 saniye) kesme islemi gerçeklesmeyecektir ve program istenilen amacin disinda çalisacaktir. Bu da Pic Basic Pro’nun dezavantajlarindan biridir.

    Kesme isleminin yapilabilmesi için öncelikle ilgili registerlerin ayarlanmasi gerekmektedir ve dikkat edilmesi gereken bir hususta kesme altprograminin programda dogru yerlere yazilmasidir. Örnek bir kesme alt programi asagidaki gibidir.


    ‘ Port ayarlamalari yapilir

    ….

    ON INTERRUPT GOTO OKUMA

    INTCON = %10100000 ‘ Tmr0 kesmesini ayarlamak için

    STATUS = %00000111 ‘ Prescaler degeri için

    ENABLE INTERRUPT

    ‘ Ana program bu kisima yazilir

    ……..

    ……

    …..

    ….

    ...

    DISABLE INTERRUPT

    ASM

    MOVF TMR0,W ‘ Assembly komutlari kollanilmistir.

    MOVWF PORTD

    NOP

    BCF TMR0,2

    ENDASM

    RESUME

    ENABLE INTERRUPT

    END
     
  4. sha.

    sha. <b>..daha çirkin, daha huysuz</b>

    1.4. Pic Basic Pro Komutlari

    @ : : Assembly kodu (tek satirlik) eklemek için kullanilir.

    ASM . . ENDASM : Assembly dili kodlarini eklemek için kullanilmaktadir.

    BRANCH : Programin baska bir yere dallanmasini saglamaktadir ( = ON..GOTO )

    BRANCHL : Programin degisken içerikli bir konuma dallanmasini saglamaktadir.

    BUTTON : Pine bagli bir anahtardaki siçramalari düzenlemektedir.

    CALL : Assembly dilinde yazilmis alt programi çagirmaktadir.

    CLEAR : Tüm degiskenleri sifirlamaktadir.

    CLEARWDT : Watchdog timeri silmektedir.

    COUNT : Bir pindeki darbeleri saymaktadir.

    DATA : Eepromun ilk içerigini belirlemede kullanilmaktadir.

    DEBUG : Uygun pinden ve hizda (baud) asenkron seri çikis

    DEBUGIN : Uygun pinden ve hizda (baud) asenkron seri giris

    DISABLE : Debug yada Interrupt komutlarinin icrasini durdurmaktadir. (pasif etme)

    DTMFOUT : Istenilen pinden touch tonlar üretir.

    EEPROM : Eepromun ilk içerigini belirlemede kullanilmaktadir.

    ENABLE : Debug yada Interrupt komutlarinin icrasini aktif etmektedir.

    END : Islemleri durdurur ve düsük güç moduna geçmektedir.

    FOR… NEXT : Islemlerin tekrarinda kullanilmaktadir.

    FREQOUT : Bir pinde ikiden fazla frekans saglamaktadir.

    GOSUB : Belirlenen adresteki BASIC altprogramini çagirmaktadir.

    GOTO : Programinin icrasini belirlenen adrese götürmektedir.

    HIGH : : Pini aktif yapmaktadir. (lojik-1)

    HPWM : Programdan bagimsiz PWM sinyal üretmektedir.(sadece belirli Pic’erde)

    HSERIN : Programdan bagisiz asenkron seri giris.

    HSEROUT : Programdan bagisiz asenkron seri çikis.

    I2CREAD : I²C aygitlardan okumada kullanilir.

    I2CWRITE : I²c aygitlara yazmada kullanilir.

    INPUT : Pini giris yapmaktadir.

    LCDIN : Lcd hafizasindan (RAM) okumada kullanilir.

    LCDOUT : Karakterleri lcdde göstermektedir.

    LOOKDOWN : Degisken için sabit tablosunu arastirmaktadir.

    LOOKDOWN2 : Degisken için sabit-degisken tablosunu arastirmaktadir.

    LOOKUP : Tablodan sabit degeri almaktadir.

    LOW :2'> : Pini sifira çekmektedir.(lojik sifir)

    NAP : Geçici bir süre islemcinin enerjisini kesmektedir.

    OWIN : Tek kablo giris.

    OWOUT :: Tek kablo çikis.

    OUTPUT : Pini çikis yapmaktadir.

    PAUSE : Gecikme saglamaktadir. (ms)

    PAUSEUS : Gecikme saglamaktadir. (µs)

    PEEK : Registerden Byte’i okumada kullanilir.

    POKE : Registere Byte’i yazmada kullanilir.

    POT : Belirlenen pindeki potansiyometrenin degerini okumaktadir.

    PULSIN :: Bir pindeki darbe genisligini okumaktadir.

    PULSOUT : Pinde darbe üretmektedir.

    PWM : Pinde PWM sinyal üretmektedir.

    RCTIME : Pindeki darbe genisligini ölçmektedir.

    READ : Eepromdan Byte’i okumaktadir.

    READCODE : Kod hafizasindan kelime okumaktadir.

    RESUME : Kesmeden sonra programi kaldigi yere göndermektedir.

    RETURN : GOSUB komutuyla dallanilan alt programdan kaldigi yere geri döndermektedir.

    REVERSE : Pinin konumunu degistirmektedir.(girisse çikis çikissa giris yapar)

    SELECT CASE : Bir degiskeni farkli degerlerle karsilastirmaktadir.

    SERIN : Asenkron seri giris.

    SEROUT : Asenkron seri çikis.

    SHIFTIN : Senkron seri giris.

    SHIFTOUT : Senkron seri çikis.

    SLEEP : Belli bir süre için islemcinin enerjisini kesmektedir.

    SOUND : Belirlenen pinde ton yada beyaz gürültü olusturmaktadir.

    STOP : Programin icrasini durdurmaktadir.

    SWAP : Iki degiskenin degerini degistirmektedir.

    TOGGLE : Pini toggle durumuna almada kullanilir..

    USBIN : USB giris.

    USBINIT : USB ayarlama.

    USBOUT : USB çikis.

    WHILE… WEND : Sart dogru olana kadar programin (durumun) icrasini sürdürmede kullanilir.

    WRITE : Eeproma byte’i yazmada kullanilir.

    WRITECODE : Kod hafizasina kelime yazmada kullanilir.

    XIN : X-10 giris.

    XOUT : X-10 çikis.

    konunun tamamı alıntıdır...
     
  5. anibus_rocker

    anibus_rocker New Member

    Bunlar pic16F84 için değilmi?
     
  6. sha.

    sha. <b>..daha çirkin, daha huysuz</b>

    Sanırsam :)
     
  7. anibus_rocker

    anibus_rocker New Member

    programlama güzel ama bunun progranabilme devresinide eklersen daha güzel olur.
     

Bu Sayfayı Paylaş