if kontrolleriC dili ile Atmel AVR Programlama derslerimize hız kesmeden (lafın gelişi söyledim. Nedense ağır ağır ilerliyoruz) devam ediyoruz. Bugünkü dersimizde kontrol yapıları olan if ve if-else kontrollerini görelim. Kontrol yapılarını bilmezsek verimli programlar yazamayız. Hadi öğrenelim o zaman şu kontrol yapılarını.

if() yapısı

Sözdizimi:

if (şart) işlem

Örnek:

O zaman aşağıdaki programa bir göz atalım. Bu program, PORTC’nin PIN1’ine bağlı bir butonun basılı olup olmadığını kontrol ediyor:

#include <avr/io.h>

void main()
{
DDRB = 0xFF;
DDRC = 0xFD;

PORTB = 0x00;

do{

if(PINC & 0x01)
PORTB = 0xFF;

}while(1);

}

Arkadaşlar yukarıdaki if kullanımı, if yapısının en basit halidir. İf ibaresinin içindeki şart doğruysa bir sonraki komut işlenir, doğru değilse o komut işlemez ve olaylar devam eder. Ne demek bu?

Şimdi biz,

if (PINC & 0x01) satırıyla şunu diyoruz: PORTC’nin 1.biti (bit 0) TRUE (doğru) mu yoksa FALSE (yanlış) mi?

Yani lojik 1 mi yoksa lojik 0 mı?

Eğer sonuç, TRUE ise bir sonraki satırı icra et, yani PORTB = 0xFF komutunu icra et.

Bu da PORTB’deki bütün bitleri lojik-1 yap (ledleri yak) demektir zaten.

Fakat eğer parantez içindeki şart FALSE ise yani Lojik-0 ise bir komut atla ve devam et. Bu durumda PORTB’yi 0xFF yapan satır atlanacak, varsa diğer komutlar icra edilecek yoksa aynı yukarıdaki örneğimizde olduğu gibi başa dönecek.

Şimdi if yapısının ikinci bir kullanım tipi var. O da if-else yapısı.

Söz dizimi şöyle:

If (şart) işlem1

Else işlem2

Bu kullanım şöyle der: eğer falanca şart doğruysa işlem1 komutunu icra et, yanlışsa işlem2 komutunu icra et.

Görüldüğü gibi, if komutunun ilk kullanımda yanlışsa şunu yap diye bir seçeneğimiz yoktu. O tipte yanlışsa, sadece bir komut atlıyor ve hayatımıza devam ediyorduk. Halbuki if else yapısında doğru olduğuna komut işletmesi yaptığımız gibi yanlış olduğunda da başka bir komut işletmesi yapabiliyoruz. Haydin örnek üzerinden gidelim.

Aşağıdaki örnek, yukarıdakinin biraz değiştirilmişidir. Yukarıda PORTC’nin 1.  bitine bağlı (bit 0) butonuna basıldığında PORTB’deki bütün ledleri yakıyorduk. Şimdi yine aynı şart, fakat eğer butona basılmamışsa PORTB’deki sadece ilk LED yanıyor.

#include <avr/io.h>

void main()
{
DDRB = 0xFF;
DDRC = 0xFD;

PORTB = 0x00;

do{

if(PINC & 0x01)  PORTB = 0xFF;
Else PORTB = 0x01;

}while(1);

}

Şunu hatırlatayım, bu iki örnek programımızda tamamen eğitim amaçlıdır. Yaptığımız iş için verimsiz ve hantal yöntemlerdir. Aynı işleri daha kolay yapabilirdik. Fakat amaç örnek olsun. Neyse şimdi yukarıdaki yeni programımızda;

if(PINC & 0x01) ile butona basılıp basılmadığını kontrol ediyoruz (Aslında butonu falan kontrol etmiyoruz. İşlemci ona bakmaz. İşlemcinin baktığı kendi öz PIN’inin lojik durumudur. Biz orayı neyle lojik-1 yapıyoruz, butonla. Sen istersen sensör bağla istersen jumper, sana kalmış)

PINC.1 Lojik 1 mi? Evet ise hemen sonraki komutu icra et, yani PORTB’deki ledleri yak (Aynı şekilde LED’ler işlemcinin umurunda değildir, işlemci sadece pinlerini Lojik-1 yapar. Biz oraya led bağladık diye ledleri yakar diyoruz. Oraya motor da bağlayabilirdin ya da başka bir yük de. Tabi çekeceği akım da önemli. Neyse konudan sapmayalım)

PINC.1 Lojik 1 Değil mi? O zaman Else yani Lojik-1 dışındaki bütün durumlar için (bizim örneklerde sadece iki durum var zaten. Ya 1 ya 0. Ama ileride daha fazla durumun yer aldığı örnekler de yapabiliriz.) PORTB’nin yalnızca bir ledini yak.

İşte böyle… Else yapısını çoklu da (alt alta) kullanabilirsiniz. Bunun için “else if” sözdizimini kullanırız. Örneğin; aklından bir sayı tut kardeşim. Evet, evet sen, okuyucu. 1 ile 4 arası bir sayı tut, ben de tahmin edeceğim. Tuttun mu? Tamam o zaman:

If (sayi == 1) “tuttuğun sayı birdir”
Else if(sayi==2) “tuttuğun sayı ikidir”
Else if(sayi==3) “tuttuğunun sayı üçtür”
Else if(sayi==4) “tuttuğun sayı dörttür”
Else hay ebenin… “4 e kadar tut dedik :)) “

Gördüğünüz gibi else yapısını kelimenin sona if ekleyerek “else if” şekliyle istediğiniz kadar alt alta kullanabilirsiniz. Yani şöyle demek oluyor: O değilse şunu yap, o değilse öbürünü, öbürü de değilse diğeri de değilse beriki, beriki de değilse…

Tabi elseleri böyle art arda kullanmak pek hoş değil. Bunun için daha güzel bir yapı var. Switch. Bir dahaki derse switch - case yapısını göreyin gençler, dağılabiliriz.

Anahtar Kelimeler: Mikrodenetleyici, Atmel AVR C dersleri, Atmel AVR C Kontrol Yapıları, Atmel AVR C Örnekleri, Atmel AVR if yapıları, Atmel AVR Kontrol Yapılar, Atmel AVR Örnek Programlar, AVR C dili if Else Yapısı, Bir Butonla bir Led Kontrolü, Led yakma Programı

peynir6 suyu tozu , 29/03/2010-15:44 Facebook'ta Paylas