Proton ile pic programlama için gerekli bilgiler ve örnek pic serisi ile hazırlanmış devreler Emeği geçen Kişilere Teşekkürler
DEĞİŞKENLER
DEĞİŞKEN : Program içerisinde sürekli değeri değişen , bir değerin yerini tutan etiketlerdir. Proton+ basic derleyicisinde beş tip değişken tanımlanabilir. Değişken tanımlamak için DIM komutu kullanılır.
1)BIT : 1 bitlik değişkendir. Değeri 0 veya 1 olabilir.
2)BYTE : 8 bitlik işaretsiz değişkendir. Değeri 0-255 olabilir.
3)WORD : 16 bitlik işaretsiz değişkendir. Değeri 0-65535 olabilir.
4)DWORD : 32 bitlik işaretli değişkendir. Değeri -2147483647 – +2147483647 olabilir.
5)FLOAT : 32 bitlik kayan noktalı değişkendir.Değeri-2147483646.999 – +2147483646.999 olabilir.
Her değişken mikrodenetleyicinin RAM hafızasında belirli bir yer işgal eder.
FLOAT : 4 byte RAM.
DWORD : 4 byte RAM.
WORD : 2 byte RAM.
BYTE : 1 byte RAM.
BIT : 1 byte RAM.
DIM: Değişken , sabit ve dizi tanımlamak için kullanılan komuttur. (Dizi birden fazla değer tutan değişkendir)
Dizilim
DIM Değişken ismi as Değişken tipi
DIM Sabit ismi as Sabitin değeri
DIM Dizinin ismi[ Eleman sayısı ] as Dizinin tipi
SYMBOL: Kayıt edicilere (register) ve sabitlere takma isim atamak için kullanılır.
Dizilim
SYMBOL Sembol Adı = Sembolün değeri
ÖRNEK
SYMBOL Metre = 1 SYMBOL Santimetre = 100 SYMBOL Milimetre = 1000 SYMBOL Metre = 1 SYMBOL Santimetre = Metre / 100 SYMBOL Milimetre = Santimetre / 10 SYMBOL LED = PORTA.0 SYMBOL PI = 3.14
SAYILARI VE KARAKTERLERİ YAZMA
İkilik sayı (Binary) = Sayının başına % işareti konur. (%0101)
Onaltılık sayı (Hexadecimal)= Sayının başına $ işareti konur. ( $0A)
Karakter=Karakterler çift tırnak işaretleri arasına yazılır. (“a”)
Onluk sayı (Decimal)=Doğrudan yazılır.(12)
Ondalık sayı (Floating point)=Onluk kısmından sonra nokta konur. (3.14)
KARŞILAŞTIRMA OPERATÖRLERİ
Bir ifadeyi başka bir ifadeyle karşılaştırmak için kullanılır.
MANTIKSAL OPERATÖRLER
Karşılaştırma işlemlerinde birden fazla koşul var ise koşullar arasında mantıksal bağlantı kurmak için kullanılır.
AND (VE)
OR (VEYA)
NOT (DEYİL)
XOR (ÖZEL VEYA)
ÖRNEK
IF X=1 OR Y=12 THEN RESET IF PORTB.0=1 AND PORTA.2=1 THEN DUR
BiT OPERATÖRLERİ
Değişkenler üzerinde bit düzeyinde işlemler yapmak için kullanılır.
AND (VE) OPERATÖRÜ { & }
DIM A1 as BYTE DIM A2 as BYTE DIM S as BYTE A1 = %00001111 A2 = %10101101 S = A1 & A2 PRINT bin S (%00001101)
OR(VEYA) OPERATÖRÜ { | }
DIM A1 as BYTE DIM A2 as BYTE DIM S as BYTE A1 = %00001111 A2 = %10101001 S = A1 | A2 PRINT bin S (%10101111)
XOR(ÖZEL VEYA) OPERATÖRÜ { ^ }
DIM A1 as BYTE DIM A2 as BYTE DIM S as BYTE A1 = %00001111 A2 = %10101001 S= A1 ^ A2 PRINT bin S (%10100110)
SOL TARAFA KAYDIRMA OPERATÖRÜ { << }
DIM A1 as BYTE DIM S as BYTE A1 = %00001111 S= A1 << 4 PRINT bin S (%11110000)
SAĞ TARAFA KAYDIRMA OPERATÖRÜ { >> }
DIM A1 as BYTE DIM S as BYTE A1 = %11110000 S= A1 >> 4 PRINT bin S (%00001111)
PROGRAMIN GENEL FORMATI
PROGRAM KODLARININ YAZILMASI
Normalde her bir satıra bir komut yazılabilir. Bir satıra birden fazla komut yazmak için komutlar arasına iki nokta üst üste işareti ( : ) konulur.
ÖRNEK
TRISB = %00000000 FOR SAYI = 0 TO 100 PORTB = SAYI NEXT
TRISB = %00000000 : FOR SAYI = 0 TO 100 : PORTB = SAYI : NEXT
Tek bir komut bazen bir satıra sığmayabilir. Bu durumda komutun satır sonuna gelen kısmının sonuna alt çizgi işareti ( _ ) konulur.
ÖRNEK1
SAYI = LOOKUP VAR2,[1,2,3,4,5,6,7,8] SAYI = LOOKUP VAR2,[1,2,3,_ 4,5,6,7,8]
ÖRNEK2
PRINT AT 1,1,"MERHABA",DEC SAYI,HEX VAR2 PRINT AT 1,1,_ "HELLO WORLD",_ DEC SAYI,_ HEX VAR2
MATEMATİK OPERATÖRLERİ
TOPLAMA '+' Toplama işlemi yapmak için kullanılır.
Örnek:
DIM SAYI1 as WORD DIM SAYI2 as WORD SAYI1 = 1575 SAYI2 = 976 SAYI1 = SAYI1 + SAYI2 PRINT @ SAYI1 DIM SAYI1 as WORD DIM SAYI2 as DWORD SAYI1 = 1575 SAYI2 = 9763647 SAYI2 = SAYI2 + SAYI1 PRINT @ SAYI2
ÇIKARTMA '-' Çıkartma işlemi yapmak için kullanılır.
Örnek:
DIM SAYI1 as WORD DIM SAYI2 as WORD SAYI1 = 1000 SAYI2 = 999 SAYI1 = SAYI1 - SAYI2 PRINT @ SAYI1 DIM SAYI1 as WORD DIM SAYI2 as DWORD SAYI1 = 1575 SAYI2 = 9763647 SAYI2 = SAYI2 - SAYI1 PRINT @ SAYI2 DIM SAYI1 as DWORD DIM SAYI2 as DWORD SAYI1 = 1575 SAYI2 = 9763647 SAYI1 = SAYI1 - SAYI2 PRINT SDEC SAYI1
ÇARPMA '*' Çarpma işlemi yapmak için kullanılır.
Örnek:
DIM SAYI1 as WORD DIM SAYI2 as WORD SAYI1 = 1000 SAYI2 = 19 SAYI1 = SAYI1 * SAYI2 PRINT @ SAYI1 DIM SAYI1 as WORD DIM SAYI2 as DWORD SAYI1 = 100 SAYI2 = 10000 SAYI2 = SAYI2 * SAYI1 PRINT @ SAYI2
BÖLME '/' Bölme işlemi yapmak için kullanılır.
Örnek:
DIM SAYI1 as WORD DIM SAYI2 as WORD SAYI1 = 1000 SAYI2 = 5 SAYI1 = SAYI1 / SAYI2 PRINT @SAYI1 DIM SAYI1 as WORD DIM SAYI2 as DWORD SAYI1 = 100 SAYI2 = 10000 SAYI2 = SAYI2 / SAYI1 PRINT @ SAYI2
ABS Sayıların mutlak değerini almak için kullanılır.
ÖRNEK
DEVICE = 16F877 DIM SAYI1 AS DWORD DIM SAYI2 AS DWORD CLS SAYI1 = -1234567 SAYI2 = ABS SAYI1 PRINT DEC SAYI2 STOP ( 1234567 )
DCD 0-15 arasında bir değer alır ve yalnız o numaralı biti 1 diğer bitleri 0 yapar. Byte ve Word tipi değişkenlerle veya sabitlerle kullanılabilir.
ÖRNEK
DIM SAYI AS WORD SAYI= DCD 12 PRINT BIN16 WRD1 (%0001000000000000)
DIG 0-4 arasında işlem değeri vardır. Byte ve Word tipi değişkenlerle veya sabitlerde kullanılabilir. Byte veya Word tipinde bir değerin onlu karşılığının işlem değerinde belirtilen hanesindeki rakamı verir.
ÖRNEK
DIM SAYI AS WORD DIM HANE AS BYTE SAYI= 1234 HANE=SAYI DIG 0 PRINT DEC HANE ( 4 )
MAX ve MIN İki sayıyı karşılaştırır. Sayılardan büyük olanı (MAX için) veya küçük olanı (MIN için) değişkende saklar. BYTE ve WORD tipi değişkenlerle veya sabitlerde kullanılır.
ÖRNEK
DIM SAYI AS BYTE DIM SONUCB AS BYTE DIM SONUCK AS BYTE SONUCB= SAYI MAX 12 SONUCK= SAYI MIN 45
NCD BYTE ve WORD tipi değişkenlerde veya sabitlerde lojik 1 olan en yüksek değerli bitin numarasına 1 ekler ve sonucu bir değişkende saklar.
ÖRNEK
DIM SAYI AS BYTE DIM SONUC AS BYTE SAYI= %00001010 SONUC= NCD SAYI PRINT DEC SONUC ( 4 )
REV BYTE , WORD ve DWORD tipi değişken veya sabitin üzerinde belirtilen sayıda bitin (en sağdan başlamak üzere ) sırasını tam tersine çevirir.Sırası tersine çevrilecek bit sayısı 1-32 arasındadır.
ÖRNEK
DIM SAYI AS BYTE DIM SONUC AS BYTE SAYI= %11001110 SONUC= SAYI REV 4 PRINT BIN SONUC (%11000111 )
SQR Sayıların kare köklerini almak için kullanılır. 12 ve 14 bitlik mikrodenetleyicilerde BYTE ve WORD tipindeki değişken ve sabitler üzerinde işlem yapılabilir. Sonuç BYTE tipinde bir tamsayıdır. 16 bitlik mikrodenetleyicilerde FLOAT tipindeki değişken ve sabitlerdede işlem yapılabilir. Sonuç FLOAT tipinde bir ondalık sayıdır.
ÖRNEK
DIM SAYI AS BYTE DIM SONUC AS BYTE SAYI= 100 SONUC= SQR SAYI PRINT DEC SONUC (10)
IF..THEN..ELSEIF..ELSE..ENDIF
IF-THEN deyimleri arasındaki koşul değerlendirilir. Koşul sağlanmışsa THEN deyiminden sonra yazılan Deyimler1… çalıştırılır. Koşul sağlanmamışsa ELSEIF-THEN deyimleri arasındaki diğer bir koşul değerlendirilir.Koşul sağlanmışsa THEN deyiminden sonra yazılan Deyimler2… çalıştırılır.Bu koşulda sağlanmamışsa ELSE deyiminden sonra yazılan Deyimler3… çalıştırılır.ENDIF deyimiyle karşılaştırma işlemi biter.
IF Koşul THEN
Deyimler1...
ELSEIF Koşul THEN
Deyimler2...
ELSE
Deyimler3...
ENDIF
ÖRNEK1
IF X = 10 THEN HIGH LED1 ELSEIF X = 20 THEN HIGH LED2 ELSE HIGH LED3 ENDIF
ÖRNEK2
IF X = 0 THEN A = 0 B = 1 ELSE A = 1 ENDIF
ÖRNEK3
IF Z = 1 THEN A = 0 B = 0 ENDIF
SELECT..CASE..ENDSELECT
SELECT deyiminden sonra kullanılan değişkenin aldığı değere göre CASE satırlarından sonra yazılan deyimler çalıştırılır. Eğer değişkenin değeri hiçbir CASE satırında belirtilmemişse CASE ELSE deyiminden sonraki deyimler çalıştırılır. ENDSELECT deyimiyle SELECT-CASE bloğu bitirilir.
SELECT Değişken
CASE Değer
Deyimler…
CASE Değer
Deyimler…
CASE ELSE
Deyimler…
ENDSELECT
ÖRNEK
INCLUDE "PROTON_4.INC" DIM SAYI AS BYTE DIM SONUC AS BYTE DELAYMS 300 CLS SONUC = 0 SAYI = 1 SELECT SAYI CASE 1 SONUC = 1 CASE 2 SONUC = 2 CASE 3 SONUC = 3 CASE ELSE SONUC = 255 ENDSELECT PRINT DEC SONUC STOP
GOTO Programın akışını GOTO deyiminden sonra yazılan etikete dallandırır.
GOTO Etiket
GOSUB...RETURN Programın akışını GOSUB deyiminden sonra yazılan etikete dallandırır. RETURN deyimiyle birlikte program akışı GOSUB deyiminin yazıldığı satırın altındaki satıra yönlendirilir.
ÖRNEK
DIM X AS BYTE DIM Y AS BYTE ANA: X=10 GOSUB ALT PRINT DEC Y GOTO ANA ALT: Y=20-X RETURN
FOR...NEXT...STEP
FOR ve NEXT deyimleri arasında kalan komutları belirtilen sayıda tekrar edilmesini sağlar.
FOR Değişken = başlangıç TO bitiş [ STEP { Adım } ]
{Tekrar edilecek Deyimler }
NEXT
ÖRNEK1
DIM X as WORD FOR X = 0 TO 2000 STEP 2 PRINT @X NEXT ÖRNEK2DIM X as WORD FOR X = 2000 TO 0 STEP -2 PRINT @X NEXTÖRNEK3
DIM X as DWORD FOR X = 200000 TO 0 STEP -200 PRINT @X NEXTREPEAT...UNTIL
UNTIL deyimi ile belirtilen koşul sağlanıncaya kadar REPEAT-UNTIL deyimleri arasında kalan deyimleri çalıştırır.
REPEAT
Deyimler…
UNTIL KoşulÖRNEK
X = 1 REPEAT PRINT AT 1,1,DEC X DELAYMS 200 INC X UNTIL X > 10WHILE...WEND
WHILE deyimi ile belirtilen koşul sağlandığı sürece WHILE-WEND deyimleri arasında kalan deyimleri çalıştırır.
WHILE koşul
Deyimler…
WENDÖRNEK
X = 1 WHILE X <= 10 PRINT @X , " " X = X + 1 WENDBREAK
Çalışmakta olan döngüyü döngü bitmeden kırmaya yarar.
ÖRNEK
INCLUDE "PROTON_4.INC" DIM X as BYTE DELAYMS 200 CLS FOR X = 0 TO 39 PRINT AT 1,1,DEC X IF X = 10 THEN BREAK X = 10 DELAYMS 200 NEXT PRINT AT 2,1,"CIKIS " , DEC X STOPCONFIG Mikrodenetleyicinin sigorta (fuses) seçeneklerini ayarlamaya yarar.
CONFIG { sigorta seçenekleri }
ÖRNEK
CONFIG HS_OSC , WDT_OFF , PWRTE_ON , BODEN_OFF , LVP_OFF , WRTE_ON , CP_OFF , DEBUG_OFFSigortalar (FUSES)
Osilatör sigortaları
ER_OSC_CLKOUT=Harici direnç (External Resistor) osilatör ve CLKOUT
ER_OSC_NOCLKOUT= Harici direnç (External Resistor) osilatör ve NOCLKOUT
INTRC_OSC_CLKOUT=Dahili RC (Internal Resistor / Capacitor) osilatör ve CLKOUT
INTRC_OSC_NOCLKOUT= Dahili RC (Internal Resistor / Capacitor) osilatör ve NOCLKOUT
EXTCLK_OSC=Harici saat girişi (External Clock In)
LP_OSC=Düşük güçlü kristal (Low Power Crystal)
XT_OSC=Kristal/Rezonatör (Crystal/Resonator)
HS_OSC=Yüksek hızlı kristal/Rezonatör (High Speed Crystal/Resonator)
RC_OSC=Direnç Kondansatör osilatör
LP , XT ve HS tipi osilatörler (LP_OSC, XT_OSC, HS_OSC) OSC1 ve OSC2 uçlarına bağlanır. Bu tip osilatörler 16F84 , 16F628 VE 16F877 mikrodenetleyicilerinde kullanılabilir.
Osilatörün bağlantı şekli aşağıdaki şekilde gözükmektedir.
RC tipi osilatörler (RC_OSC) 16F84 ve 16F877 mikrodenetleyicilerinde kullanılabilir.
Osilatörün bağlantı şekli aşağıdaki şekilde gözükmektedir.ER tipi osilatörler 16F628 mikrodenetleyicilerinde kullanılabilir.
İki kullanım yöntemi vardır.1) ER_OSC_CLKOUT: Bu durumda direnç OSC1’e bağlanır. OSC2 saat darbesi üretir. Üretilen saat darbesi mikrodenetleyici çalışma frekansının dörtte birine eşittir.
2) ER_OSC_NOCLKOUT= Bu durumda direnç OSC1’e bağlanır. OSC2 I/O portu olarak kullanılır.
Osilatörün bağlantı şekli aşağıdaki şekilde gözükmektedir.
INTRC tipi osilatörler 16F628 mikrodenetleyicilerinde kullanılabilir. Bu tip osilatörü kullanırken OSC1 ve OSC2 uçlarına bir eleman bağlamaya gerek yoktur. Bu uçlar I/O portu olarak kullanılır. İki kullanım yöntemi vardır. Dahili RC osilatörün çalışma frekansı 4MHz’dir.
1) INTRC_OSC_CLKOUT: Bu durumda OSC1 I/O portu OSC2 ise saat darbesi üretici olarak kullanılır. Üretilen saat darbesi mikrodenetleyici çalışma frekansının dörtte birine eşittir.
2) INTRC_OSC_NOCLKOUT= Bu durumda direnç OSC1 ve OSC2 I/O portu olarak kullanılır.
Diğer sigortalar
16F84-16F628-16F877
CP_OFF= Kod koruması kapalı.
PWRTE_ON= Power Up Timer açık.
PWRTE_OFF= Power Up Timer kapalı.
WDT_ON= Watchdog Timer açık.
WDT_OFF= Watchdog Timer kapalı.
16F628-16F877
BODEN_ON= Brown out reset açık.
BODEN_OFF= Brown out reset kapalı.
LVP_ON= Düşük voltaj programlama açık.
LVP_OFF= Düşük voltaj programlama kapalı.
CP_ALL= Bütün kod korumaları açık.
CPD_ON= Veri koruması açık.
CPD_OFF= Veri koruması kapalı.
16F84
CP_ON= Kod koruması açık.
16F628
MCLRE_ON= Master clear açık.
MCLRE_OFF= Master clear kapalı.
16F877
DEBUG_ON= Arka plan hata ayıklama modu açık.
DEBUG_OFF= Arka plan hata ayıklama modu kapalı.
WRTE_ON= Flash program belleğine yazma açık.
WRTE_OFF= Flash program belleğine yazma kapalı.
LCD KULLANIMI
1)LCD DİREKTİFLERİ
DECLARE LCD_INTERFACE 4 veya 8: LCD 4 veya 8 bitlik arabirimle kullanılır. LCD 4 bit seçilmişse data pinleri D4 -D7 dir. LCD 8 bit seçilmişse data pinleri D0-D7 dir.
DECLARE LCD_DTPIN PORT.PIN : LCD ‘ nin data uçlarının mikrodenetleyicinin hangi portundan başlanarak bağlanacağını göstermek için kullanılır.
DECLARE LCD_ENPIN PORT.PIN : LCD ‘ nin E ucunun mikrodenetleyicinin hangi portunna bağlanacağını göstermek için kullanılır.
DECLARE LCD_RSPIN PORT.PIN : PORT.PIN : LCD ‘ nin RS ucunun mikrodenetleyicinin hangi portunna bağlanacağını göstermek için kullanılır.
PRINT LCD Göstergeye bilgi göndermek için kullanılır.
CLS LCD ekranını temizlemek için kullanılır
KEYPAD KULLANIMI
KEYPAD DIREKTIFI
KEYPAD_PORT = PORT
INKEY Tuş takımından tuş okutmak için kullanılan komuttur. Okunan tuşun değerini değişkene aktarır. Okunan tuşların kullanılan tuş takımına göre düzenlenmesi gerekmektedir.Bunun için LOOKUP komutu kullanılır.
DEĞİŞKEN = INKEY
LOOKUP İndeks ile belirtilen sıradaki sabiti değişkene aktarır.
DEĞİŞKEN = LOOKUP İNDEKS , [ SABİTLER… ]
KEYPAD UYGULAMALARI
proton-kod-bilgileri-ornek-pic-uygulamalariŞifre-Pass: 320volt.com
Yayım tarihi: 2009/04/15 Etiketler: microchip pic projeleri, PIC programlama, proton basic, proton örnekleri
7 Yorum “Proton kod bilgileri örnek pic uygulamaları”
Bir yanıt yazın
Çok güzel bir kaynak. Anlatım harika. Emeği geçenlere teşekkürler.
hocam keypad örneği çok faydalı oldu…elleriniz dert görmesin…
Harika olmuş elleriniz dert görmesin hocam glcd içinde anlatırmısınız
yani nasıl resim veya yazı yazabilirim
Güzel bir çalışma elinize sağlık ,
çalışmalarınızda başarılar
dilerim
Tek sorum olacak pic basicte lcd de yazıları sağa kaydırma nasıl oluyor sürekli sağa kaysın yada sola kaysın istiyorum okadar okudum << işaretini gördüm ama ben temelden anlatın istiyorum uğraştım yapamadım yazı sabit kalıyor yardım ederseniz çok sevinirim hocam şimdiden teşekkür ederim hepinize.
Gerçekten çok güzel olmuş hoca bile bu kadar iyi anlatamadı sınavda çok yararı olacak çok teşekkürler 🙂
iki sayıyı karşılaştırıp büyük olanı B portuna gönderme pıc16f628A programı nasıl yazılıyor bilen varmı arkadaşlar