PIC Programlama Dersleri 3 – if, else ve while Komutları

guclusat

Tanınmış Üye
Süper Moderatör

PIC Programlama Dersleri 3: if, else ve while Komutları – Karar Verme ve Döngüler​

PIC mikrodenetleyici programlarında işlemciye yalnızca komut vermek yeterli değildir. Bazen bir butona basılıp basılmadığını kontrol etmek, bir koşula göre çıkışı açmak veya bir işlemi sürekli tekrarlamak gerekir.

C programlama dilinde bu işlemler için if, else ve while komutları kullanılır. Bu derste örneklerimizi mikroC PRO for PIC ve PIC16F628A üzerinden inceleyeceğiz.

1. if komutu nedir?​

if, belirtilen koşul doğru olduğunda bir kod bloğunu çalıştırır.

Örnek:
Kod:
if (PORTA.F0 == 1) {
PORTB.F0 = 1;
}
Bu kodun anlamı şöyledir:
  • RA0 girişini kontrol et.
  • RA0 lojik 1 ise RB0 çıkışını lojik 1 yap.
  • Koşul doğru değilse bu blok çalışmaz.
Burada == karşılaştırma operatörüdür. İki değerin eşit olup olmadığını kontrol eder.

= ile == birbirinden farklıdır:
  • a = 1; değişkene değer atar.
  • a == 1 değişkenin 1 olup olmadığını kontrol eder.

2. else komutu nedir?​

else, if koşulu doğru olmadığında çalıştırılacak kodu belirtir.

Örnek:
Kod:
if (PORTA.F0 == 1) {
PORTB.F0 = 1;
} else {
PORTB.F0 = 0;
}
Çalışma şekli:
  1. RA0 lojik 1 ise RB0 açılır.
  2. RA0 lojik 0 ise RB0 kapanır.
Bu yöntemle bir butonun durumuna göre LED kontrol edilebilir.

3. while komutu nedir?​

while, belirtilen koşul doğru olduğu sürece içindeki komutları tekrarlar.

Örnek:
Kod:
while (PORTA.F0 == 1) {
PORTB.F0 = 1;
}
RA0 lojik 1 kaldığı sürece RB0 lojik 1 olur ve döngü devam eder. RA0 sıfır olduğunda döngüden çıkılır.

PIC uygulamalarında sık kullanılan başka bir örnek de şudur:

Kod:
while(1) {
// Sürekli çalışacak komutlar
}
Buradaki 1 her zaman doğru kabul edildiğinden döngü sürekli devam eder. Mikrodenetleyici programlarında ana çalışma döngüsü çoğunlukla bu şekilde hazırlanır.

4. Uygulama: Butona basınca LED yakma​

Bu örnekte RA0 girişine bağlı butonun lojik durumunu okuyup RB0 çıkışındaki LED'i kontrol edeceğiz.

Kod:
void main() {
CMCON = 0x07;
TRISA = 0b00000001;
TRISB = 0b00000000;
PORTB = 0;

while(1) {
if (PORTA.F0 == 1) {
PORTB.F0 = 1;
} else {
PORTB.F0 = 0;
}
}
}

Programın açıklaması​

  • CMCON = 0x07; karşılaştırıcıları kapatır.
  • TRISA RA0 pinini giriş yapar.
  • TRISB PORTB pinlerini çıkış yapar.
  • while(1) programın sürekli giriş kontrolü yapmasını sağlar.
  • if buton girişinin lojik 1 olup olmadığını kontrol eder.
  • else buton girişi lojik 0 olduğunda LED'i kapatır.
Bu örnek, butona basılı tutulduğu sürece LED'in yanmasını sağlar. Buton bırakıldığında LED söner.

Donanım notu: RA0 girişini boşta bırakmayın. Uygun pull-up veya pull-down bağlantısıyla kararlı lojik seviye sağlayın. LED'e seri akım sınırlama direnci bağlayın.

5. Uygulama: Butona her basışta çıkış durumunu değiştirme​

Önceki örnekte LED yalnızca butona basılı tutulduğu sürece yanıyordu. Peki butona bir kez basınca LED yansın, tekrar basınca sönsün istersek ne yapmalıyız?

Bunun için bir değişken kullanabiliriz:

Kod:
void main() {
unsigned char led_durumu = 0;

CMCON = 0x07;
TRISA = 0b00000001;
TRISB = 0b00000000;
PORTB = 0;

while(1) {
if (PORTA.F0 == 1) {
Delay_ms(50);

if (PORTA.F0 == 1) {
led_durumu = !led_durumu;
PORTB.F0 = led_durumu;

while (PORTA.F0 == 1) {
Delay_ms(10);
}

Delay_ms(50);
}
}
}
}
Bu örnekte:
  • led_durumu değişkeni LED'in mevcut durumunu saklar.
  • !led_durumu ifadesi değişkenin mantıksal değerini tersine çevirir.
  • İlk basışta LED yanar.
  • İkinci basışta LED söner.
  • İç içe kullanılan if ve while komutları, basışın algılanmasına ve buton bırakılana kadar beklenmesine yardımcı olur.
  • Delay_ms(50) mekanik butonlarda oluşabilen kısa süreli kontak sıçramalarını azaltmak için kullanılır.
Bu yöntem basit uygulamalar için uygundur. Daha karmaşık devrelerde buton sıçramalarını daha güvenilir biçimde filtrelemek gerekebilir.

Sonuç​

if bir koşulu kontrol eder, else koşul yanlış olduğunda alternatif işlemi yürütür, while ise koşul doğru olduğu sürece komutları tekrarlar. Bu üç yapı, buton ve röle kontrolünden sensör okumaya kadar birçok PIC uygulamasının temelini oluşturur.

Sonraki ders: PIC Programlama Dersleri 4 – Değişkenler ve Veri Tipleri (char, int, unsigned char).
 
Geri
Yukarı