Makaleler / Elektronik / Programlar / Pic Basic


Yazar: Durmuş Gökçebay
Gönderen: Elektro   Tarih: 09-03-2002 13:16
Yorumlar: (0)   Oylar:

PIC BASIC PRO İLE PROGRAMLAMA

1.1. Pic Basic Pro Hakkında

 

Pic Basic programlama dili mikrochip firmasının ürettiği mikrodenetleyicileri programlamada kullanılan daha çabuk ve kolay bir dildir(www.rentron.com). Pic Basic Pro programlama dili ile 8 ile 84 pin arasındaki değişik özelliklerdeki mikrodenetleyiciler için program yazılabilir. Üst seviyeli programlama dilleri sayesinde çok daha rahat ve hızlı bir şekilde programlama yapılabilmektedir. Ancak bu programlar çok karmaşık sistemlerin çözümünde yetersiz kalabilmektedir.Yüksek seviyeli bu programlama dilleri assembly dili komutları ile birlikte kullanılabilmektedir. Bu durumda yüksek seviyeli bir pic programlama dili ve PIC assembly dili birlikte kullanıldığında bu sorun ortadan kalkmaktadır.

 

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 komutları görülmektedir.

 

PIC BASIC PRO programlama dilinin tüm yönleriyle açıklanması bir kitap konusu olacağından burada sadece bu çalışma için gerekli olan komutlar ve bunların özelliklerinden bahsedilmiştir.

1.2.1. Değişkenler ( Variables )

 

PICBASIC programlama dilinde üç tip değişken tipi kullanılmaktadır. Değişkenler BIT, BYTE veya WORD büyüklüğünde olabilirler. Örneğin: k VAR byte (byte büyüklüğünde K değişkeni)

Çizelge 11. Pic Basic Pro Komut Seti

END

NAP

SELECT CASE

ADCIN

FOR…NEXT

ON DEBUG

SERIN

ASM…ENDASM

FREQOUT

ON INTERRUPT

SERIN2

BRANCH

GOSUB

OUTPUT

SEROUT

BRANCHL

GOTO

OWIN

SEROUT2

BUTTON

HIGH

OWOUT

SHIFTIN

CALL

HPWM

PAUSE

SHIFTOUT

CLEAR

HSERIN

PAUSEUS

SLEEP

CLEARWDT

HSEROUT

PEEK

SOUND

COUNT

I2CREAD

POKE

STOP

DATA

I2CWRITE

POT

SWAP

DEBUG

IF…THEN

PULSIN

TOGGLE

DEBUGIN

INPUT

PULSOUT

USBIN

DISABLE

LCDIN

PWM

USBINIT

DESABLE DEBUG

LCDOUT

RANDOM

USBOUT

DISABLE INTERRUPT

LET

RCTIME

WHILE…WEND

DTMFOUT

LOOKDOWN

READ

WRITE

EEPROM

LOOKDOWN2

READCODE

WRITECODE

ENABLE

LOOKUP

RESUME

XIN

ENABLE DEBUG

LOOKUP2

RETURN

XOUT

ENABLE INTERRUPT

LOW

REVERSE

 

 

 

1.2.2. Etiketler ( Labels )

 

Etiketler GOTO veya GOSUB gibi komutlara referans teşkil ederler. Bu komutların icrasından sonra program etiketle belirtilen satıra dallandırılır. Etiketler herhangi bir kelime olabilir ve sonuna iki nokta üst üste (:) konur.

 

Örneğin: Etiket: HIGH PORTB.5

 

 

 

1.2.3. Nümerik sabitler ( Numeric constants )

 

Nümerik sabitler üçşekilde tanımlanırlar. Bunlar decimal, binary ve hexadecimal‘dir. Binary değer tanımlanırken değerin başına ‘%’ ve hexadecimal değerinbaşına ‘$’işareti konulur. Decimal değer tanımlanırken herhangi bir işaret kullanılmaz. Örneğin:

 

100‘decimal değer .

%100 ‘decimal 4 için binary değer.

$100 ‘decimal 256 için hexadecimal değer.

 

1.2.4. Portlar

 

PIC’in herhangi bir portunun istenilen pini giriş yada çıkış olarak tanımlanabilir. Daha sonra istenilen değer ilgili porta yüklenir. Değerin porta yüklenmesi için farklı yollar vardır.

 

Örneğin:

TRISB = 0 ‘Portb’nin tüm pinlerini çıkış olarak tanımlamada kullanılır’

TRISA=1 ‘Portb’nin tüm pinlerini giriş olarak tanımlamada kullanılır’

TRISC = %11110000 ‘Portb’nin ilk dört biti çıkış,son dört biti giriş olarak tanımlamada kullanılır’

 

Yönlendirilen port pinlerine bilgilerin gönderilmesi için birkaç yol vardır. Örneğin:

PORTB = %11110000 : ‘Portb’nin ilk dört pinine lojik-0 , son dört pinine ise lojik-1değeri gönderilmede kullanılır .’

PORTB = 1 ‘Portb’nin bütün pinlerine lojik-1 değeri gönderilmede kullanılır.’

HIGH PORTB.4 ‘PORTB’nin dördücü pinine lojik-1 değeri gönderilmede kullanılır .’

LOW PORTB.6                       ‘PORTB’nin altıncı pininelojik-0 değeri gönderilmede kullanılır.’

 

1.2.5. Zaman gecikmesi ( Pause )

 

Pause programı istenilen bir süre beklemeye alır. En fazla 61.535 milisaniyelik bir gecikme sağlanabilir. Bu da bir dakikanın biraz üstünde bir değerdir. Pause komutundaki değer milisaniye büyüklüğündedir. Örneğin, PAUSE 49000 (49 saniyelik gecikme). Pause komutu bu çalışmada komut yazımı anlamında programı basitleştirmiştir. Eğer 49 saniyelik gecikmeyi assembly kodunda yazmak gerekseydi, şu şekilde yazılmalıdır.

 

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 programı PIC BASIC PRO programlama dilinde PAUSE 49000 şeklinde tek satırda gerçekleştirmek mümkün olmaktadır. Görüldüğü üzere PIC BASIC PRO ile program yazmak hem çok rahat hem de çok basit olmaktadır.

 

1.2.6. Döngü düzenlemek ( For…Next )

 

Bazı işlemlerin önceden belirlenen sayıda tekrarlanması gerekmektedir. PICBASIC programlama dilinde bu işi FOR…NEXT döngüsü bir sayaç gibi çalışarak gerçekleştirmektedir. FOR komutundan sonra bir değişkene ilk değer atanıp, bu değişkenin sayacağı son değer de belirtilir. Ayrıca değişkenin kaçar kaçar artacağı STEP komutuyla kontrol edilebilmektedir. Son olarak NEXT döngüsüne gelen program eğer son değere ulaşılmamış ise bir sonraki değer için aynı işi yapacaktır. Örneğin:

 

For k=2 TO 10 step 2

Pause1000

Next

 

Burada k değişkeni 2’den 10’a kadar ikişer ikişer saymaktadır. Her bir döngüde bir saniyelik bir gecikme sağlamaktadır. Döngü toplam beş tur atacağından 5 saniyelik bir gecikme sağlanmış olacaktır.

 

1.2.7. Kontrol yapmak (IF…Then)

 

Bazı işlemlerde bir durumun kontrol edilmesi gerekebilir. Picbasic programlama dilinde bu işi IF…THEN komutu sağlamaktadır. Bu kontrol deyimi bir veya birden çok karşılaştırmayı icra edebilir. IF…THEN kontrolörü bir durumun doğru (true) veya yanlış (false) olmasını karşılaştırarak değerlendirir. Eğer değerlendirme doğru iseTHEN komutundan sonraki komut icra edilmektedir. Eğer değerlendirme yanlış ise program bir sonraki satıra geçmektedir. Örneğin:

 

IF portb.2 = 0 then high porta.1

Else high portb.3

 

Bu program parçasında eğer portb’nin ikinci pinine lojik-0 gelmişse porta’nın birinci pinine lojik-1gönderilir aksi taktirde portb’nin üçüncü pinine lojik-1 gönderilecektir.

 

 

1.3. Kesmeler

Bir Pic mikrodenetleyicisinde kesmelerin nasıl olduğundan 3. bölümde bahsedilmiştir. Burada sadece Pic Basic Pro dilinde kesmelerin nasıl yapıldığından biraz bahsedilecektir.

 

Bir kesme programı yazmak için en kolay yol ON INTERRUPTyazmakla başlar. Bu komut Pic Basic Pro programının dahili kesmeleri aktif etmesini ve kesme geldiği anda mümkün olan en kısa zamanda kesme alt programına dallanması gerektiğini bildirir. ON INTERRUPT kullanılırsa, bir kesme oluştuğu anda program bulunduğu yerden alt programa dallanmakta ve kesme alt programını icra ettikten sonra kaldığı yere geri dönmektedir. Fakat bu işlem assembly dilindeki kadar hızlı olmamaktadır. İlk olarak kesme geldiği andaki komutun icrası tamamlanmakta ve ardından kesme işlemi gerçekleştirilmektedir. Eğer PAUSE 10000 gibi bir komut icra edilirken kesme gelmişse bu komutun icrası bitene kadar (10 saniye) kesme işlemi gerçekleşmeyecektir ve program istenilen amacın dışında çalışacaktır. Bu da Pic Basic Pro’nun dezavantajlarından biridir.

 

Kesme işleminin yapılabilmesi için öncelikle ilgili registerlerin ayarlanması gerekmektedir ve dikkat edilmesi gereken bir hususta kesme altprogramının programda doğru yerlere yazılmasıdır. Örnek bir kesme alt programı aşağıdaki gibidir.

 

‘ Port ayarlamaları yapılır

….

ON INTERRUPT GOTO OKUMA

INTCON = %10100000                     ‘ Tmr0 kesmesini ayarlamak için

STATUS = %00000111                      ‘ Prescaler değeri için

 

ENABLE INTERRUPT

 

‘ Ana program bu kısıma yazılır

……..

……

…..

….

...

DISABLE INTERRUPT

ASM

    MOVF TMR0,W             ‘ Assembly komutları kollanılmıştır.

    MOVWF PORTD

    NOP

    BCF TMR0,2

ENDASM

RESUME

ENABLE INTERRUPT

END

 

1.4. Pic Basic Pro Komutları

 

: : Assembly kodu (tek satırlık) eklemek için kullanılır.

ASM . . ENDASM     : Assembly dili kodlarını eklemek için kullanılmaktadır.

BRANCH       : Programın başka bir yere dallanmasını sağlamaktadır ( = ON..GOTO )

BRANCHL     : Programın değişken içerikli bir konuma dallanmasını sağlamaktadır.

BUTTON : Pine bağlı bir anahtardaki sıçramaları düzenlemektedir.

CALL             : Assembly dilinde yazılmış alt programı çağırmaktadır.

CLEAR           : Tüm değişkenleri sıfırlamaktadır.

CLEARWDT : Watchdog timerı silmektedir.

COUNT           : Bir pindeki darbeleri saymaktadır.

DATA             : Eepromun ilk içeriğini belirlemede kullanılmaktadır.

DEBUG           : Uygun pinden ve hızda (baud) asenkron seri çıkış

DEBUGIN      : Uygun pinden ve hızda (baud) asenkron seri giriş

DISABLE       : Debug yada Interrupt komutlarının icrasını durdurmaktadır. (pasif etme)

DTMFOUT     : İstenilen pinden touch tonlar üretir.

EEPROM       : Eepromun ilk içeriğini belirlemede kullanılmaktadır.

ENABLE : Debug yada Interrupt komutlarının icrasını aktif etmektedir.

END :2'>               : İşlemleri durdurur ve düşük güç moduna geçmektedir.

FOR… NEXT : İşlemlerin tekrarında kullanılmaktadır.

FREQOUT      : Bir pinde ikiden fazla frekans sağlamaktadır.

GOSUB           : Belirlenen adresteki BASIC altprogramını çağırmaktadır.

GOTO             style='mso-bidi-font-weight: bold'>: Programının icrasını belirlenen adrese götürmektedir.

HIGH :2'>             : Pini aktif yapmaktadır. (lojik-1)

HPWM : Programdan bağımsız PWM sinyal üretmektedir.(sadece belirli Pic’erde)

HSERIN : Programdan bağısız asenkron seri giriş.

HSEROUT      : Programdan bağısız asenkron seri çıkış.

I2CREAD       : I²C aygıtlardan okumada kullanılır.

I2CWRITE     : I²c aygıtlara yazmada kullanılır.

INPUT             : Pini giriş yapmaktadır.

LCDIN : Lcd hafızasından (RAM) okumada kullanılır.

LCDOUT : Karakterleri lcdde göstermektedir.

LOOKDOWN : Değişken için sabit tablosunu araştırmaktadır.

LOOKDOWN2 : Değişken için sabit-değişken tablosunu araştırmaktadır.

LOOKUP : Tablodan sabit değeri almaktadır.

LOW :2'>              : Pini sıfıra çekmektedir.(lojik sıfır)

NAP                 : Geçici bir süre işlemcinin enerjisini kesmektedir.

OWIN             : Tek kablo giriş.

OWOUT :: Tek kablo çıkış.

OUTPUT : Pini çıkış yapmaktadır.

PAUSE : Gecikme sağlamaktadır. (ms)

PAUSEUS       : Gecikme sağlamaktadır. (µs)

PEEK               : Registerden Byte’ı okumada kullanılır.

POKE             : Registere Byte’ı yazmada kullanılır.

POT                 : Belirlenen pindeki potansiyometrenin değerini okumaktadır.

PULSIN :: Bir pindeki darbe genişliğini okumaktadır.

PULSOUT       : Pinde darbe üretmektedir.

PWM               : Pinde PWM sinyal üretmektedir.

RCTIME : Pindeki darbe genişliğini ölçmektedir.

READ             : Eepromdan Byte’ı okumaktadır.

READCODE : Kod hafızasından kelime okumaktadır.

RESUME : Kesmeden sonra programı kaldığı yere göndermektedir.

RETURN : GOSUB komutuyla dallanılan alt programdan kaldığı yere geri döndermektedir.

REVERSE      : Pinin konumunu değiştirmektedir.(girişse çıkış çıkışsa giriş yapar)

SELECT CASE : Bir değişkeni farklı değerlerle karşılaştırmaktadır.

SERIN : Asenkron seri giriş.

SEROUT : Asenkron seri çıkış.

SHIFTIN : Senkron seri giriş.

SHIFTOUT     : Senkron seri çıkış.

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

SOUND           : Belirlenen pinde ton yada beyaz gürültü oluşturmaktadır.

STOP               : Programın icrasını durdurmaktadır.

SWAP             : İki değişkenin değerini değiştirmektedir.

TOGGLE : Pini toggle durumuna almada kullanılır..

USBIN : USB giriş.

USBINIT : USB ayarlama.

USBOUT : USB çıkış.

WHILE… WEND      : Şart doğru olana kadar programın (durumun) icrasını sürdürmede kullanılır.

WRITE           : Eeproma byte’ı yazmada kullanılır.

WRITECODE : Kod hafızasına kelime yazmada kullanılır.

XIN                 : X-10 giriş.

XOUT             : X-10 çıkış.

 

1.5. Microcode Studio Programı

 

Pic basic programlama dilinde yazılan bir program yazmak ve derlemek (compile) için microcode studio programı kullanılmaktadır. Herhangi bir editörde yazılan Pic Basic Pro kodları microcode studio programına aktarılabildiği gibi, bu programın kendine has editörü bulunmaktadır. Aşağıdaki şekilde microcode studio programının ana sayfası görülmektedir.

1.6. Propic Programı

 

PIC’in belleğine yüklenmek üzere yazılan program, microcode studio programında derlenmektedir. Program doğru yazılmışsa .HEX, .ASM, .BAS ve MAC uzantılı dört dosya oluşturulmaktadır. Hexadecimal kodlar ( derlenmiş program ) bilgisayarın paralel portuna bağlanan programlayıcı ( PROTOPIC ) aracılığı ile PIC’in program belleğine yazılmaktadır. Aynı işlemi yapmak için bilgisayarın seri portuda kullanılabilir.(ICPROG) PROTOPIC programlayıcısının PROPIC adında bir programı bulunmaktadır. Programın ana menüsü de aşağıdaki şekilde görüldüğü gibidir.