OTOKON Forum

Teknik Bilgi Paylaşımı => Temel Elektrik - Elektronik ve Hobi Robotiği => Konuyu başlatan: Özen Özkaya - Aralık 04, 2007, 11:31:53 ÖÖ

Başlık: PIC Basic Özet
Gönderen: Özen Özkaya - Aralık 04, 2007, 11:31:53 ÖÖ
Pic Basic Pro programlama dili mikrochip firmasının ürettiği mikrodenetleyicileri programlamada kullanılan daha çabuk ve kolay bir dildir. 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.

Değişkenler


PICBASIC programlama dilinde üç tip değişken tipi kullanılmaktadır. Değişkenler BIT, BYTE veya WORD büyüklüğünde olabilirler. Aşağıda örnek tanımlamalar gösterilmiştir.

sayi VAR BYTE
isim VAR WORD
deger VAR BIT


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.

etiket1:
HIGH PORTB.5
goto etiket2



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ğerin başı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.


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.

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.’


Zaman Gecikmesi


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.

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.


Döngüler ( 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
Pause 1000
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.


Kontrol (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
Endif
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.


Kesmeler


Bir kesme programı yazmak için en kolay yol ON INTERRUPT yazmakla 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
OKUMA
DEGER=PORTB
RESUME
ENABLE INTERRUPT


NOT: Alıntıdır...