Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

Derleme warning uyarısı

Başlatan NamTech, 04 Ağustos 2018, 20:14:25

NamTech

Merhabalar,

Ccsc de yeniyim.

.h dosyasında "#define dip1  PIN_B0" tanımlamasını yaptım.
.c dosyasında "if ( dip1 == 0 );" yazdığımda derleme sırasında "warning 204 condition always FALSE" uyarısı veriyor
sorunun kaynağı ve çözümü hakkında bilgisi olan arkadaşlardan yardım bekliyorum.

Şimdiden teşekkür ederim.
Kim Ne Derse Desin Alelade Birisi.

sadogan

Bu kullanim sekli yanlis.
Input(dip1)==1 seklinde olmali

NamTech

Input(dip1)==1

yazdığımda If gibi mi davranır
Yani
Input(dip1)==0 yazarsam ve dip1 0 olursa arkasından yazdığım komutlar işler mi?
Kim Ne Derse Desin Alelade Birisi.

fide

input komutu giriş olarak atanan pinin lojik 1 yada lojik 0 durumunu verir.

input(pin_b0) ile pinin lojik seviyesini alırsın.
İster a=input(pin_b0) ;
Sonra if (a==0)
{
Komut;
Komut;
}

Yada
if (input(pin_b0) ==0)
{komut;
Komut;
}
else
{
Komut ;
Komut ;
}
Şeklinde kullanırsın.
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

NamTech

Cevap yazan arkadaşlara teşekkür ederim fakat önerilerinizi denediğimde bir şey değişmiyor if ile herhangi bir portu kontrol ettiğimde "warning 204 condition always FALSE" uyarısı alıyorum. bunun nedeni ve çözümü hakkında fikri olan varmı.

Kim Ne Derse Desin Alelade Birisi.

aliveli

Mikronedenetleyici A0, B0 ne bilmez. Bu isimler insanlara kullanım kolaylığı olsun diye verilmiştir.

Örneğin 16f877 için B0 pini adresi 48 olan pindir ve mikrodenetleyici o bacağa bu adresle erişmiş olur.
Zaten PIN_B0 adı da başlık dosyasında #define PIN_B0  48 olarak tanımlanmıştır asıl unsur 48 dir.
Dolayısıyla input(pin_b0) da input(48) de aynı şeydir.

Senin örneğinde #define dip1  PIN_B0 komutu ile aslında yaptığın dip1=48 oluyor. 48 de hiçbir zaman sıfıra eşit olmayacağından yazdığın komut gereksiz işe yaramaz oluyor ve derleyici de uyarı hatası veriyor.

Kullanman gereken komut
if ( input(dip1) == 0 )
{
//Yapmak istediklerin
}
olmalı.(if komutundan sonra ; kullanılmaz)

NamTech

Cevap yazan tüm arkadaşlara teşekkür ederim

Ben project wizard ile pin yön tanımlamalarını yaptım (tabi aklımca)

*.h dosyasında

//#use FIXED_IO( A_outputs=PIN_A6 )
//#use FIXED_IO( C_outputs=PIN_C3,PIN_C2,PIN_C1,PIN_C0 )
//#define motor  PIN_A6
//#define dip1  PIN_B0
//#define dip2  PIN_B1
//#define dip3  PIN_B2
//#define dip4  PIN_B3
//#define dip5  PIN_B4
//#define dip6  PIN_B5
//#define dip7  PIN_B6
//#define dip8  PIN_B7
//#define lamp1  PIN_C0
//#define lamp2  PIN_C1
//#define svolt  PIN_C2
//#define sbut  PIN_C3
//#define sbusy  PIN_C4
//#define merkez  PIN_C5
//#define buton  PIN_C6
//#define jeton  PIN_C7

ayarlamalarını yazılım kendisi tanımladı.

Her ne yaptı isem soruna engel olamadım ve en sonunda yukarıdaki tüm tanımlamaları // ile etkisiz hale getirdim. Warning sorunu benim için çözüldü.

Amacım ukalalık etmek değil, benim gibi bu proğrama yeni başlayan herhangi bir arkadaşında başına gelirse diye paylaşmak istedim.

Tüm arkadaşlara projelerinde kolaylıklar ve başarılar.
Kim Ne Derse Desin Alelade Birisi.

fide

Sıkıntı fixed io kısmında
Define tanımı kullandığımız şekilde tanımlı zaten.
Fixed io kısmını output_drive(dip1) şeklinde main rutini içinde çıkış olarak tanımlayın sorun çözülecektir.
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

ertan

#8
Merhaba;
Bu durumu gidermenin yolu bellidir.Şimdi siz dip1 diye bir isim tanımlması yapıyorsunuz ve bunu b portun 0.pinden durumu okumak istiyorsunuz. Oda size Warning 204 hatasını veriyor. Yani oda şu demek oluyor. Durum her zaman FALSE. bunu engellemeniz için bir kaç değişik yol var tabi. Ama ben size basit bir örnek yazcam derlediğinizde o hatayla karşılaşmazsınız.
1. YOL;

#include <16F877A.h>
#device ADC=10
#use delay(crystal=20000000)

int1 dip1=0;//değişken tipiniz int1 olmalı 1 yada 0 yani boolean işleminin aynısıdır.

#CASE

void main()
{

  while(TRUE)
  {
    dip1=input(PIN_B0);//burada PIN_B0 durumunu dip1 içine atıyoruz.
    if(dip1==0)
    {
      output_toggle(PIN_A0);
      delay_ms(100);
      
    }
      
}
}
bu şekilde yazarsanız çalışır.

2. YOL;

#include <16F877A.h>
#device ADC=10
#use delay(crystal=20000000)

#DEFINE dip1 PIN_B0

#CASE

void main()
{

  while(TRUE)
  {
    if(!input(dip1))
    {
      output_toggle(PIN_A0);
      delay_ms(100);
      
    }
      
}
}
bu şekilde de çalışır Warnin 204 mesajını vermez.
Sizin yaptığınız da durum herzaman sıfır hiçbir zaman durumunuz değişmiyor. Durumu değiştirmek için ya giriş gibi kontrol edip kodu syntax uygun yazcaksınız yada döngünün içinde INPUT_STATE yapıp dip1 değişkenin içine atcaksınız. O zaman her daim sıfır olmak kurtarıyorsunuz.
İyi Çalışmalar.