CCS C ve PIC16F877A. "D" ve "B" Portu Hakkında.

Başlatan Melih1802, 09 Haziran 2014, 14:07:26

vitruvius

Eğer benim kodları sizin kodunuza ekliyorsanız ters giden bazı şeyler oluyor belli ki. Yoksa bende:

[1]D7 input'u çıkışı etkilemiyor benim yazdığım kodda.

[2]Çıkış yok.


[3]Çıkış var.


- Aynı dosya:
http://s3.dosya.tc/server24/xUXFvz/Newfolder_2_.zip.html

Melih1802

Kodlar çakışıyor sanırım bu halde. Anlamaya çalışayım.

vitruvius

Benim kodları geliştirmeye çalışın. Elimden geldiğince açıklamaya çalıştım. Yazarken mantığım 30 tane if kullanacağıma bir şekilde kaç butona ve hangilerine basılı olduğunu tespit etmekti. Bunu da portu okuyarak yaptım. Nasıl yaptığım ve gerisi kodlarda yazıyor zaten.

Melih1802

#78
Bende yazdığın kodları anlamaya çalışıyordum. Problem bende çıkışın birden fazla yerde kullanılabiliyor olmasından kaynaklı.
PLC de çıkış 1 kere kullanılır 2. kez yazılmaz.

mesaj birleştirme:: 13 Haziran 2014, 19:14:50

Bir şart oluştuğunda şeçilmiş olan bir komut grubunun çalışmasını bloke edebilirmiyiz.

Örn: D6 ve D7 basılıysa alttaki komut grubu çalışmasın.

//----------------------------------------------------------
if ((input(pin_d0)==1)&&(input(pin_d1)==1))
{
output_high(pin_b0);
output_high(pin_b7);
}
else
{
output_low(pin_b0);
output_low(pin_b7);
}

//----------------------------------------------------------

vitruvius

Başına uygun şartı eklemeniz gerekir. Benim "multiple" değişkenini kullanımımı inceleyin.

Melih1802

#80
Arkadaşlar Bu şart  if ((input(pin_d6)==1)&&(input(pin_d7)==1))
gerçekleştiğinde alttaki satırın çalışmasını engelleyecek bir komut varmıdır.  Lütfen basit olsun.

//----------------------------Buton B4---------------------------------------

  if (input(pin_d4)==1)
{
output_high(pin_b2);
output_high(pin_b7);
}
else
{
output_low(pin_b2);
output_low(pin_b7);
}
//--------------------------------------------------------------------

madpic

  if ((input(pin_d6)==1)&&(input(pin_d7)==1))                 //d6 and d7 
  ;                                                       //1 ise burasını işle ( komut yok boş geçiyoz yani)
else                                                    //değilse alttaki parantez içini işle
  {
       if (input(pin_d4)==1)
         {
            output_high(pin_b2);
            output_high(pin_b7);
         }
       else
         {
            output_low(pin_b2);
            output_low(pin_b7);
         }     
  }

RaMu

if (  ! (input(pin_d6)==1)&&     !  (input(pin_d7)==1))  //d6 butonuna basıl değil ve d7 butonuna basılı değil ise
veya
if ((input(pin_d6)==0)&&(input(pin_d7)==0))      //d6 butonuna basıl değil ve d7 butonuna basılı değil ise

{   //bu parantezler arasını işle

//----------------------------Buton B4---------------------------------------

  if (input(pin_d4)==1)
 {
 output_high(pin_b2);
 output_high(pin_b7);
 }
 else
 {
 output_low(pin_b2);
 output_low(pin_b7);
 }
 //--------------------------------------------------------------------


} //bu parantezler arasını işle



Mesajınızda uzun kod blokları paylaşırken kodlarınızı
[*code*]   arasına  [/*code*]
bu yıldız işaretleri olmadan yazın siyah alanda olurlar
mesajları okuması forumu kullanması daha kolay olur.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

Melih1802

if (  ! (input(pin_d6)==1)&&     !  (input(pin_d7)==1))  //d6 butonuna basıl değil ve d7 butonuna basılı değil ise

         if ((input(pin_d6)==0)&&(input(pin_d7)==0))


Bu mesajda da kodları nasıl vermem gerektiğini öğrendim. Açıkcası bilmiyordum bir tek benimki garip görünüyordu  ;D

Üstad bu 2 satırı da ekledim fakat similasyonda led yine yanık kalıyor. Osilaskop ekledim ekranda kare dalga çıktı. Yani led bir satırda yanıyor bir satıra gelince sönüyor gibi.


Her zaman derim: Yapamadığın iş sana daha çok şey öğretir.


Yapamadım ama çok şey öğrendim.

madpic

kodu isiste adım adım çalıştırınca
problemi daha kolay bulabilirsiniz !
ledlerin neden yanık kaldığını
o zaman daha iyi anlayacaksınız .

Melih1802

#85
Adım adıma gerek yok;


while(1)
{

 //--------------------ÇİFT TUŞ SATIRLARI----------------------  

 if  (input(pin_d6)==1)

 {
 output_low(pin_b7); // Sönük
  }
  
 //------------------------------------------------------------
 
 //---------------------------Buton B7-------------------------

  if (input(pin_d7)==1)
 {
 output_high(pin_b7); // Yanık
}
 else
 {
 output_low(pin_b7); 
   }
  }
 }



Böylece program yürüdükçe led HHIGH, LOW, HIGH, LOW döngüye giriyor.

İşte bende bir şart oluştuğunda seçili satırı görmezden gelecek bir komut istedim.


mesaj birleştirme:: 14 Haziran 2014, 00:49:03

Arkadaşlar YAPTIM işte kodlar.

İstenilen; D0 Basıldığında B0 çıkış verecek, bırakıldığında sönecek.
              D0 basılı olduğu halde B1' basılırsa led sönecek.

Bunu biraz daha modifiye edersem bu iş olacak.

Bu arada herkese Teşekkür ederim. Emeğiniz geçti.

Temel sıkıntı bir tuş basılıyken bir diğerine basıldığında sönmeyen ( göz kırpan ) led' di. Bunu aştım. :)


while(1)
{

  
if ((input(pin_d0)==1)&&(input(pin_d1)==0))
   {
     output_high(pin_b7);
      }
        else
      {
    output_low(pin_b7);
  }
    if (input(pin_d1)==1)
  {
 output_low(pin_b7);
      }
    }
  }