Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

ccs sorusu if'le ilgili

Başlatan promete1, 24 Kasım 2008, 00:46:13

promete1

merhaba arkadaşlar ya bu benim kurdugum if döngüsünde 4 anahtarada alınan bilgiler degerlendirilip ona göre lcd'ye birşeyler yazılıyor ilgili kodun gerekli parcasını aşagıda veriyorum ama condition devamlı false diye warning veriyor sebebi anlayamadım tecrübeliler bi bakabilirlermi acaba?
Not problem ifli bölgede
#include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarları

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.
#use fast_io(a)
#use fast_io(c)
#include <benim_LCD.c> // benim_LCD.c dosyası programa ekleniyor

#define start pin_c0
#define stop pin_c1
#define fon pin_c2
#define foff pin_c3

////////////////////////// Degisken Tanimlamalar ///////////////////
unsigned char msg, e_msg;
/********* ANA PROGRAM FONKSİYONU********/

void main ( )
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_spi(SPI_SS_DISABLED);     // SPI birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı
   
   set_tris_a(0xff);
     set_tris_c(0xff);
   lcd_hazirla(); // LCD başlangıç ayarları yaptırılıyor
      imlec(1,1); // İmlec 1.satır 1.sütunda
      printf(lcd_veri,"    denemeA    "); // LCD'ye veri yazdırılıyor

      imlec(2,2); // İmlec 2.satır 1.sütunda
      printf(lcd_veri,"  denemeB    "); // LCD'ye veri yazdırılıyor
      delay_ms(1500); 
      // LCD sıfırlanıyor
  
  git01:

   
   if (start==1 && fon==1) msg=1;//döngü warning veriyor ve false diyor
   if (start==0 && fon==1) msg=2;
   if (start==0 && fon==0 ) msg=3;
   if (start==0 && fon==0 ) msg=4;
   if (start==0 && fon==0 ) msg=5;
   if (stop==0) msg=6;
   
  
if (msg != e_msg)
{
   if (msg == 1)

işte burdan sonra eger msg==1 ise sunu yap msg==2 ise bunu yap dediği ve gerekmediği için yazmıyorum.

arslan74

Birde böyle dene:

if ((start==1) && (fon==1)) msg=1;//döngü warning veriyor ve false diyor 
else if ((start==0) && (fon==1)) msg=2; 
else if ((start==0) && (fon==0) ) msg=3; 
else if ((start==0) && (fon==0) ) msg=4; 
else if ((start==0) && (fon==0) ) msg=5; 
else if (stop==0) msg=6;

Erhan YILMAZ

Alıntı Yapif (start==0 && fon==0 ) msg=3;
  if (start==0 && fon==0 ) msg=4;
  if (start==0 && fon==0 ) msg=5;

Dostum cccs c den pek anlamam ama yukarıdaki satırlar mantıken hatalı geldi start ile fon sıfıra eşit olunca msg'nin içeriği kaç olacak burda bir sorun olmasın

Ziya

C portu bacaklarına pull up veya pull down dirençler bağladın mı?

#define start pin_c0
#define stop pin_c1
#define fon pin_c2
#define foff pin_c3
bu tanımlar kullandığın if karşılaştırmasına göre yanlış. Eğer bunları kullanacak isen if karşılaştırman
if ((input(start)==1) && (input(fon)==1)) msg=1;//döngü warning veriyor ve false diyor
if (input(start)==0 && input(fon)==1) msg=2;
if (input(start)==0 && input(fon)==0 ) msg=3;
if (input(start)==0 && input(fon)==0 ) msg=4;
if (input(start)==0 && input(fon)==0 ) msg=5;
if (input(stop)==0) msg=6; 

veya 

if (input(start) && input(fon)) msg=1;//döngü warning veriyor ve false diyor
if ( !input(start) && !input(fon)) msg=2;
if ( !input(start) && !input(fon)) msg=3;
if ( !input(start) && !input(fon)) msg=4;
if ( !input(start) && !input(fon)) msg=5;
if (!input(stop)) msg=6;
şeklinde kullanmalısın.

Eğer şöyle yaparsan

#byte prtc=GETENV("SFR:PORTC")
#bit start = prtc.0
#bit stop = prtc.1
#bit fon  = prtc.2
#bit foff = prtc.3
yaparsan if karşılaştırman eskisi gibi kalabilir.
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

telbozan

Ziya hocam daha güzel yazmış ama buda değişik bir yöntem..

if ((start==1) && (fon==1)) msg=1;//döngü warning veriyor ve false diyor 
else if ((start==0) && (fon==1)) msg=2; 
else if ((start==0) && (fon==0) ) msg=3; 
else if ((start==0) && (fon==0) ) msg=4; 
else if ((start==0) && (fon==0) ) msg=5; 
else if (stop==0) msg=6;


yerine

#byte PORTC 0X07

if ( bit_test(PORTC,0) &&  bit_test(PORTC,2) ) msg=1;
else if ( !bit_test(PORTC,0) && bit_test(PORTC,2) ) msg=2; 
else if ( !bit_test(PORTC,0) && !bit_test(PORTC,2) ) msg=3; 
else if ( bit_test(PORTC,0) &&  !bit_test(PORTC,2) ) msg=4; 
else if ( !bit_test(PORTC,1) ) msg=6;


YAZMALISIN...

JKramer

Ziya'ya ek olarak, sadece Define kısmını şöyle de yazabilirsiniz:
#define start input(pin_c0)
#define stop input(pin_c1)
#define fon input(pin_c2)
#define foff input(pin_c3)

modernherakles

If we hear, we forget; if we see, we remember; if we do, we understand – Confucius

promete1

evet arkadaşlar cok sağol lun benm kafa hi-tech e gitti inputlsrı bitleri karıstırdım ondan kaynaklandı sanırım birazda fikir veren ve cvp yazan
arslan74,tamirci_erhan,Ziya,telbozan ve JKramer'e
koca bi teşekür

cmmkmh

MErhaba arkadaşlar,
Benim de if kullanımı ile ilgili bir sorum olacak; Programın belirli bölümlerinde if komutu kullanarak float veri tipindeki değerleri karşılaştırıp sonuca gitmekistedim ancak if dönüsüne bir türlü giremedim. acaba CCsC de float veri tipleri if ile karşılaştırılmıyor mu??
(genel itibariyle 0 ile 1 arasındaki değerleri karşılaştırmak istiyorum)

cmmkmh

arkadalar
yardımcı olması açısından aşağıdaki programı gönderiyorum; Burada gereksiz bir fonksion kullanımı ve bazı gereksiz değer atamalar görülebilir amcak kendi programımda bu formatta kullandığımdan aynen benzer şekilde yazdım. Burada görüldüğü gibi sonsuz döngü içerisinde "positive" alt programına giriliyor ve burada
eğer n küçüktür 0.0 ise nu_p=1.0 olması isteniyor ya da nu_p=2.0
fakat n sıfırdan küçük olmasına rağmen nu_p herzaman 2.0 olarak lcd den görülmekte. Aynı şekilde n ile nce'yi karşılaştırdığımda da şart sağlansa da ilk sonucu atlayıp hep yanlış gibi davranıyor. internette araştırdım. float veri tipini if ile C de karşılaştırabiliyoruz. ancak burada bi türlü çözemedim. çok basit bir problem ama çok temel hatalara sebep oluyor.
lütfen bilen varsa yardım etsinn...
#include <30F4013.h>
#device ADC=10
#use delay(clock=10000000)
#FUSES HS 
#use rs232(UART2,baud=9600,xmit=PIN_F3,rcv=PIN_F2,parity=N,bits=8)
#include <math.h>
#include <flex_lcd.c>
#use fast_io(B)
#use fast_io(C)
#use fast_io(D)
#use fast_io(F)
float n=0.1,nce=0.2,c=0;
float positive (float ee){
      float nu_p;
    if (n<0.0) nu_p=1;
    else nu_p=2;
     return ((float)nu_p);
}
void main(){
lcd_init();  // Always call this first.
while(true){
c=positive(1.0);
 printf(lcd_putc,"\fc=%f ",c);
 delay_ms(500);
}
}