Proton kod bilgileri örnek pic uygulamaları

| Mayıs 26, 2023 Tarihinde güncellendi
Proton kod bilgileri örnek pic uygulamaları

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.

proton-karsilastirma-oparatorleri

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

proton-program-diagram-akis-semasi

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

ÖRNEK2
DIM 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
NEXT

REPEAT...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 > 10

WHILE...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
WEND

BREAK

Ç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
STOP

CONFIG 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_OFF

Sigortalar (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.

proton-ornek-devre-pic16f84-temel

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.

proton-ornek-devre-pic16f84-rc-osilator

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.

er_osc_clkout-er_osc_noclkout

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.

proton-lcd-kullanimi-direktifler

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.

declare-lcd_interface-protonlcd

PRINT LCD Göstergeye bilgi göndermek için kullanılır.

CLS LCD ekranını temizlemek için kullanılır

KEYPAD KULLANIMI

proton-key-pad-tus-takimi-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

keypad-tustakimi

LOOKUP İndeks ile belirtilen sıradaki sabiti değişkene aktarır.

DEĞİŞKEN = LOOKUP İNDEKS , [ SABİTLER… ]

KEYPAD UYGULAMALARI

proton-keypad-uygulamalari

proton-pic16f877-keypad-lcd

proton-kod-bilgileri-ornek-pic-uygulamalari

Şifre-Pass: 320volt.com

Yayım tarihi: 2009/04/15 Etiketler: , , ,



7 Yorum “Proton kod bilgileri örnek pic uygulamaları

  1. Mustafa SayanMustafa Sayan

    Çok güzel bir kaynak. Anlatım harika. Emeği geçenlere teşekkürler.

    CEVAPLA
  2. mustafa_cmbzmustafa_cmbz

    hocam keypad örneği çok faydalı oldu…elleriniz dert görmesin…

    CEVAPLA
  3. muhammetmuhammet

    Harika olmuş elleriniz dert görmesin hocam glcd içinde anlatırmısınız
    yani nasıl resim veya yazı yazabilirim

    CEVAPLA
  4. devkartaldevkartal

    Güzel bir çalışma elinize sağlık ,
    çalışmalarınızda başarılar

    dilerim

    CEVAPLA
  5. ERHANERHAN

    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.

    CEVAPLA
  6. burcuburcu

    Gerçekten çok güzel olmuş hoca bile bu kadar iyi anlatamadı sınavda çok yararı olacak çok teşekkürler 🙂

    CEVAPLA
  7. aliali

    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

    CEVAPLA

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir