PIC C ana programda giriş eklemek

Katılım
7 Şub 2010
Mesajlar
120
Puanları
1
PIC 16f877'de b ve d portuna bağlı toplam 9 sensör var ve bunlarda gelen sinyalleri karşılaştırıp çıkışa yönlendirmem gerekiyor ama C dilinde de biraz acemiyim. Şöyle bir sorunum var.
Kod:
while(1)
   {
              switch(input_d())
                 {
                  case 0b10000000: kisa1(); berak;
                  case 0b00011100: kisa2(); break;

      switch(input_b())
      {
                
      case 0b00000001: dongu1();     break;  
      case 0b10000000: dongu2();     break;  
      case 0b00000011: dongu3();    break;
}
}
}

Şöyle bir kod yazdığımda program tamamiyle çalışmıyor sadece input_d olan kısımda dönüyor, aynı şekilde b yi başa alırsam bu sefer d ye geçmiyor. Ben ana program içinde b ve d portundan gelen bilgileri okumak için nasıl bir yol izlemeliyim?
 
senin yazdığın kodlarda switch(input_d()) burda dönmesinin sebebi d portunda herhangi bir veri gelmiyor veya gelen veri ile aşağıdaki tanımlamış olduğun case numaraları biribirini tutmuyordur.
int bilgi;
bilgi=input_d(); // d portunu okuyup bilgi değişkenine atamış oldu.
artık d portundan gelen verilere göre case kısımlarını oluşturmalısın..
 
senin yazdığın kodlarda switch(input_d()) burda dönmesinin sebebi d portunda herhangi bir veri gelmiyor veya gelen veri ile aşağıdaki tanımlamış olduğun case numaraları biribirini tutmuyordur.
int bilgi;
bilgi=input_d(); // d portunu okuyup bilgi değişkenine atamış oldu.
artık d portundan gelen verilere göre case kısımlarını oluşturmalısın..

Veri gelmeme gibi bir ihtimal yok çünkü tüm olasılıkları değerlendirip yazıyorum. Burada örnek olması açısından birkaç tane yazdım... while içine yazdığım port tanımlamaları doğru mu acaba? Mesele portd yi bir while içine portb yide ayrı bir while içine yazmak doğru olur mu acaba?
İkinci sorum portb ve portd'den aynı anda gelen iki bilgi 1 olduğunda (and işlemi) çıkışa gitsin gibi bir işlem oluşturmak için gerekli olan kodu hangi satıra yazmalıyım?
 
bildiğiniz üzere yazdığınız programlar işlemci tarafından en ilk satırdan başlıyarak son satıra kadar tarıyarak yapılır. siz iki tane while kullanırsanız ilk önce ilk while içindeki komutlar işlenmeden ikinci while döngüsü içine girmez. portlar için ayrı ayrı while kullanabilirsiniz fakat ben gerek görmüyorum her ikisinide aynı döngü içerisinde kullanabilirsiniz. portb ve portd den gelen verileri karşılaştırma yapmak için switch-case şartından bağımsız bir şart oluşturmalısınız diye düşünüyorum. yani switch-case 'den yapısının bittiği yerde şöyle bir tanımlama yapabilirsiniz:

if(pin_b0==1 & pin_d0==1)
{işlemler....
}
 
ayrıca devre şemanızı ve kodlarınızın tamamını buraya koyarsanız daha hızlı çözüm bulabiliriz. Belki config ayarlarında bir yanlışlık yapıyorsunuzdur kontrol etmek gerek.
 

Forum istatistikleri

Konular
130,168
Mesajlar
933,940
Kullanıcılar
453,294
Son üye
MEGATRO

Yeni konular

Çevrimiçi üyeler

Geri
Üst