Pic programımda mantık hatası var??

ogzcndyr

Üye
Katılım
1 Ocak 2013
Mesajlar
77
Puanları
1
Yaş
27
Merhaba arkadaşlar pic öğrenmeye yeni yeni başlıyorum. Şuan sadece tris ayarları ve buton giriş çıkışlarını biliyorum. Bisikletim için bir devre yaptım 1.butonda sol sinyal, 2.butonda sağ sinyal, 2sine aynı anda basıldığında 4lüler yanmasını istiyorum. ilk 2 durum güzel çalışıyor ancak iki butona birden basılınca 1. ve 2.durumlar devam ettiğinden hem 4lü hemde sağ sol sinyaller yanıyor, karışık bir durum çıkıyor. Ben hocama sordum ! operatörünü kullanacaksın dedi tam açıklama alamadım. Bu konuda yardımcı olursanız sevinirim. Yazdığım program aşağıda;

int1 a,b; //2 bitlik değişkenler atadık

void main()
{
set_tris_a(0b11111111); //a portunu giriş yaptık
set_tris_b(0b00000000); //b portunu çıkış yaptık
set_tris_d(0b00000000); //d portunu cıkıs yaptık
output_b(0); //b pinlerini 0v verdik
output_d(0); //d pinlerine 0v verdik

while(TRUE) //sonsuz dongu olusturduk
{
a=input(pin_a0); //a deişkenini a0 portuna giriş olarak atadık
b=input(pin_a1); //b değişkenini a1 portuna giriş olarak atadık


if(a){ //eğer a 1 olursa aşağıdaki komutları çalıştır

output_b(31);
delay_ms(150);
output_b(0);
delay_ms(150);
}

if(b){ //eğer b butonuna basılırsa 1 olursa aşağıdaki komutları çalıştır.

output_d(248);
delay_ms(150);
output_d(0);
delay_ms(150);
}

if(a&b){ //a ve b butonuna basılırsa aşağıdaki komutlar çalışssın

output_b(31);
output_d(248);
delay_ms(150);
output_d(0);
output_b(0);
delay_ms(150);

}
}
}
 
PIC'te iki butona birden basma olayı tam gerçekleşemez(mekanik problemi olur).Bu durumu asm dilinde XOR komutu ile test edebilirsiniz.
 
kudret bey asm hiç bilmiyorum ccs c ile progralama yapıyorum serdar çiçek in kitabından yardım alarak. xor komutuna kitapta baktım c=a^b şeklinde oluyormuş ben if(a^b) yazdım ancak devre tam olumlu çalışmadı yine karışık oldu, dediğiniz komutu c dilinde nasıl yazabilirim?
 
Tek koşul verdiğiniz için sorun yaşıyorsunuz,

yani program mantığını şu şekilde düşünün,

Eğer b=0 ise ve a=1 ise.... gibi, ( b butonu basılı değil ve a butonu basılı ise);

bunu "and" konutunu kullanarak veya içi içe döngü kullanarak yapabilirsiniz.

Programın son bölümüne yani flaşör kısmı doğrudur.
 
arkadaşlar cevaplarınız için teşekkür ederim ancak hala aynı sorun var??

if(a&&b){

output_b(31);
output_d(248);
delay_ms(150);
output_d(0);
output_b(0);
delay_ms(150);

}

şeklinde düzelttim yine yanı sorun bi sağ bi sol sonra ikisi bir yanıp sönüo o şekil gidiyor.
 
Bunu deneyin:


if(b==0&a){ //eğer b=0 iken a=1 olursa aşağıdaki komutları çalıştır

output_b(31);
delay_ms(150);
output_b(0);
delay_ms(150);
}

if(a==0&b){ //eğer a=0 iken b butonuna basılırsa, 1 olursa aşağıdaki komutları çalıştır.

output_d(248);
delay_ms(150);
output_d(0);
delay_ms(150);
}

if(a&b){ //a ve b butonuna basılırsa aşağıdaki komutlar çalışssın

output_b(31);
output_d(248);
delay_ms(150);
output_d(0);
output_b(0);
delay_ms(150);

}
}
}
 

Teşekkürler ustam oldu varya nasıl sevindim anlatamam demek ki biraz farklı düşünmek gerekiyormuş. Tecrübe edinmiş oldum. Birde ifin içinde değer atayabildiğimizi bilmiyordum onuda öğrenmiş oldum sanırım daha öğreneceğim çok şey var isteyen olursa devrenin protues ve ccs c dosyalarını upload edebilirim.

İlgilenen herkese teşekkür ederim.
 
Teşekkürler ustam oldu varya nasıl sevindim anlatamam demek ki biraz farklı düşünmek gerekiyormuş. Tecrübe edinmiş oldum. Birde ifin içinde değer atayabildiğimizi bilmiyordum onuda öğrenmiş oldum sanırım daha öğreneceğim çok şey var isteyen olursa devrenin protues ve ccs c dosyalarını upload edebilirim.

İlgilenen herkese teşekkür ederim.


Uzun bir yolun var, sor-araştır-dene, sakın pes etme,

kolaylıklar dilerim.:)
 

Forum istatistikleri

Konular
129,837
Mesajlar
930,659
Kullanıcılar
452,670
Son üye
fearles3422

Yeni konular

Geri
Üst