BUTON KONTROLÜ PIC girişlerine bağlı botonlara basılıp

Transkript

BUTON KONTROLÜ PIC girişlerine bağlı botonlara basılıp
BUTON KONTROLÜ
PULL-DOWN BAĞLANTI
PULL-UP BAĞLANTI
PIC girişlerine bağlı botonlara basılıp basılmadığını bilmez. Sadece o girişte “0” mı var “1”
mi var onu bilir. Bağlantının türüne göre bu eşleştirmeyi sizin yapmanız gerekir.
Pull-Down Bağlantı (Ters Bağlantı)
Butona basılmadığında Giriş=1
Butona basıldığında
Giriş=0
Pull-Up Bağlantı (Ters Bağlantı)
Butona basılmadığında Giriş=0
Butona basıldığında
Giriş=1
PROGRAM_1: PORTA’nın 0. bitine (RA0) bağlı butona basınca PORTB’ye bağlı tüm
ledleri yakan program. (PORTB’yi temizlemeyi unutmayınız.)
Pull-Up Bağlantıya göre
void main()
{
trisb=0;
portb=0;
while(1)
{
if (porta.ra0==1) portb=0xFF;
}
}
Pull-Down Bağlantıya göre
…
{
if (porta.ra0==0) portb=0xFF;
}
}
Program açıklama: Burada devre çalıştırıldığında LED sönük konumdadır. Butona
basmadığımız sürece sönük konumda kalır. Butona bastığımızda ise LED yanar. Programda
LED’leri söndürecek bir komut olmadığından LED’ler 1 kere yakıldığında bir daha sönmez.
Butona basılıp LED’ler yakıldıktan sonra butona tekrar basmamız hiçbirşeyi değiştirmez.
LED’ler hep yanık kalır. Eğer RESET butonu ile devreyi resetlersek program tekrar
başlayacağından portb=0 komutu ile LED’ler söner ve biz butona basıncaya kadar sönük
kalır.
Bit tanımlaması yapmadaki farklılıklar
if (porta.ra0==1) portb=0xFF;
if (porta.f0==1) portb=0xFF;
if (porta.b0==1) portb=0xFF;
if (portb.rb0==1) portb=0xFF;
if (portb.f0==1) portb=0xFF;
if (portb.b0==1) portb=0xFF;
Sayı Tanımlamaları
Binary:
porta.ra0=0b00101111;
Hex:
porta.ra0=0x2F;
Decimal:
porta.ra0=47;
DEFINE ile BUTON TANIMLAMA
PROGRAM_1: PORTA’nın 0. bitine (RA0) Pull-Up bağlı butona basınca PORTB’ye bağlı
tüm ledleri yakan program.
#define buton1 porta.b0
void main()
{
trisb=0;
portb=0;
while(1)
{
if (buton1==1) portb=0xFF;
}
}
NOT: Programlamada DEFINE kullanmak kullanım kolaylığı açısından çok önemlidir.
DEFINE program komutu değil, derleyici komutudur. MikroC Derleyici derleme sırasında
DEFINE ile tanımlı her yeri kendi ismiyle değiştirerek derler. Yani programda “buton1”
yazdığınız yere “porta.b0” yazarak programı derler.
PROGRAM_2: PORTA’nın 0. Bitine (RA0) bağlı butona basınca PORTB’deki tüm ledleri
yakan, PORTA’nın 1. bitine (RA1) bağlı butona basınca PORTB’deki ledleri 11001100
şeklinde yakan program. (Butonlar Pull-Down bağlı)
RA0 a buton1 , RA1 e buton2 bağlanmıştır.
#define buton1 porta.ra0
#define buton2 porta.ra1
void main()
{
trisb=0;
portb=0;
while(1)
{
if(buton1==0) portb=0xFF;
if(buton2==0) portb=0xCC;
}
}
Program açıklama: Devreye enerji verdiğimizde LED’ler sönük konumdadır. Butonlara
basmadığımız sürece LED’ler sönük kalır. Buton1’e bastığımızda (11111111) şeklinde yanar
ve diğer butona basılıncaya kadar bu şekilde yanık kalır. Buton2 ye basıldığında (11001100)
şeklinde yanar ve diğer butona basılıncaya kadar bu şekilde yanık kalır. Program
resetlenmedikçe LED’ler ya (11111111) şeklinde, ya (11001100) şeklinde yanar. Örneğin
(11001100) şeklinde yanarken buton2’ye basılırsa LED’lerde bir değişiklik olmaz. Buton1’e
bastığımızda (11111111) durumuna geçer.
IF ve KOMUTLAR DİZİSİ
PROGRAM_3: PORTA’nın 0. bitine (RA0) Pull-Up bağlı butona basılınca PORTB’deki
tüm ledleri bir defa 1 sn. aralıklarla yakıp söndüren program.
#define buton1 porta.ra0
void main()
{
trisb=0;
portb=0;
while(1)
{
if(buton1==1)
{
Bu parantezden sonraki komutlar IF içindeki İFADE doğru ise yapılacak.
….
….
….
}
….
….
}
}
Buraya PORTB deki Led’leri yakıp söndüren program kodları yazılacak.
Bu paranteze kadar olan komutlar IF içindeki İFADE doğru ise yapılacak.
Buradaki komutlar IF içindeki İFADE yanlış ise yapılacak.
PROGRAM_3: PORTA’nın 0. bitine (RA0) Pull-Up bağlı butona basılınca PORTB’deki
tüm ledleri bir defa 1 sn. yakan program.
#define buton1 porta.ra0
void main()
{
trisb=0;
portb=0;
while(1)
{
if(buton1==1)
{
portb=0xFF;
delay_ms(1000);
portb=0;
}
}
}
Program açıklama: Devreye enerji verildiğinde LED’ler sönük konumdadır. Buton’a
bastığımızda LED’ler 1 sn. yanar ve söner ve sönük konumda kalır. Butona tekrar
basıldığında 1 sn. LED’ler tekrar yanar ve söner. Burada dikkat edilmesi gereken konu şudur:
Diyelimki butona bastık ve LED’ler yanıyor. LED’ler yanıyor iken butona tekrar basmak
hiçbirşey ifade etmez çünkü butonun etkisinin olabilmesi için butona basıldığı anda buton
kontrolü yapan “if(buton1==1)” komutundan programın geçmesi gerekir. Burada süre kısa
olduğundan (1 sn.) bunun fazla önemi yoktur ama süre 5 sn. olsa idi “delay_ms(5000);” bu
bekleme sırasında buton kontrol komutu çalışmayacağından butona basmanın bir anlamı
olmayacaktır.
SORU: Program3 için yazdığımız kodları aşağıdaki gibi değiştirirsek programın çalışması
nasıl değişir?
#define buton1 porta.ra0
void main()
{
trisb=0;
portb=0;
while(1)
{
if(buton1==1)
{
portb=0xFF;
delay_ms(1000);
portb=0;
portb=0x00;
}
}
}
IF İçersindeki İfadenin 2 Tane Olması Durumu
PROGRAM_4: PORTA’nın 0. ve 1. bitlerine bağlı butonlara aynı anda basıldığında
PORTB’ye bağlı tüm ledleri yakan program. (Butonlar Pull-Up bağlı)
#define buton1 porta.ra0
#define buton2 porta.ra1
void main()
{
trisb=0;
portb=0;
while(1)
{
if(buton1==1 && buton2==1) portb=0xFF;
}
}
IF İfadeleri İçin Operatörler
==
!=
<
>
<=
>=
Eşittir.
Eşit değildir.
Küçüktür.
Büyüktür.
Küçük eşittir.
Büyük eşittir.
&& VE işlemi
|| VEYA işlemi
!
DEĞİL işlemi
Örnekler
if( buton1==0 && buton2==0) …. : Her 2 buton “0” olduğunda ifade doğru olur. Yani eğer
butonlar Pull-Down bağlı ise her 2 butona basıldığında ifade doğru olur.
if( buton1==0 || buton2==0) …. : Butonlardan herhangi biri “0” olduğunda ifade doğru olur.
Yani eğer butonlar Pull-Down bağlı ise butonlardan herhangi birine basıldığında ifade doğru
olur. Butonlardan ikisinede basılması (yani ikisininde “0” olması durumunda) ifade yine
doğru olur.
if( (buton1==0 && buton2==0 ) || buton3==0 ) ….
buton1=0, buton2=0, buton3=0 ise İFADE=Doğru
buton1=0, buton2=0, buton3=1 ise İFADE=Doğru
buton1=1, buton2=0, buton3=0 ise İFADE=Doğru
buton1=1, buton2=1, buton3=0 ise İFADE=Doğru
buton1=1, buton2=1, buton3=1 ise İFADE=Yanlış
buton1=1, buton2=0, buton3=1 ise İFADE=Yanlış
buton1=0, buton2=1, buton3=1 ise İFADE=Yanlış
PROGRAM_5: PORTB ‘nin 2. bitine (RB2’ye) Pull-Up bağlı butona basıldığı müddetce
PORTB’nin 5. Bitine LED’i yakan programı yapınız. (RB2’ye basıldığı müddetçe demek
RB2’ye basıldığında yansın, basılmadığında sönsün demektir.)
#define buton portb.b2
#define LED portb.b5
void main()
{
trisb.b5=0;
portb.b5=0;
(trisb=0b11011111)
(trisb=0xDF)
(trisb=0b11011111)
(trisb=0xDF)
while(1)
{
if(buton==1) LED=1;
if(buton==0) LED=0;
}
}
DİĞER
#define buton portb.b2
#define LED portb.b5
void main()
{
trisb.b5=0;
portb.b5=0;
while(1)
{
if(buton==1) LED=1;
LED=0;
}
}

Benzer belgeler