#ifdef komutu ve port uçlarına farklı adlandırma vermek

Başlatan mokan, 19 Mayıs 2011, 16:24:49

mokan

#include <16f876.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000)
#use fast_io(c)
#use fast_io(b)

         
            #define sw1 pin_b4
            #define sw2 pin_b5
            #define my1 pin_c6
            #define my2 pin_c7
#ifdef (input(pin_b5))
         
            #define sw1 pin_b5
            #define sw2 pin_b4
            #define my1 pin_c7
            #define my2 pin_c6
#endif   


Merhaba arkadaşlar. Şu anda yaptığım bir projede, kullandığım port uçlarının isimlendirmeleri belirli ihtiyaçlardan dolayı değişmesi gerekebiliyor. Örneğin; yukarıda başlangıçta sw1 adlandırması b4 için geçerli iken, eğer b5 aktifse bu adlandırma b5 için geçerli olacak. Kodu incelerseniz diğer uçlarda da bu şekilde bir değişim var. Bunu yukarıdaki gibi yapmayı denedim ama çalışmadı. Komutu hem yukarıdaki gibi main fonksiyonundan önce kullandım, hemde main fonksiyonu içinde ama olmadı.
1.) Bu #ifdef komutu nasıl çalıştırılıyor ?
2.) Ben bu yukarıda anlattığımı, başka hangi şekilde yapabilirim ?
Yardımcı olabilirseniz sevinirim. Herkese iyi çalışmalar dilerim.

Tagli

Bu komutlar sadece derleyicinin çalışmasını etkileyebilir. Yani cihaza gömülemezler. Bu yüzden, ancak çalışma sırasında belli olabilecek bir ifadeyi bu komutlara şart olarak veremezsin.

Bunun çözümü klasik yöntemlerle program içinde "if" ile kontrol etmek. Ama şöyle yapabilirsin: Birinci grubu sw1_1 gibi isimlerle tanımlarsın, ikinci grubu ise sw1_2 gibi isimlerle tanımlarsın. Şart sağlanırsa  swx_2 sabitlerini kullanırsın.
Gökçe Tağlıoğlu

mokan

Alıntı yapılan: Tagli - 19 Mayıs 2011, 16:47:51

Bunun çözümü klasik yöntemlerle program içinde "if" ile kontrol etmek. Ama şöyle yapabilirsin: Birinci grubu sw1_1 gibi isimlerle tanımlarsın, ikinci grubu ise sw1_2 gibi isimlerle tanımlarsın. Şart sağlanırsa  swx_2 sabitlerini kullanırsın.

if(input(pin_b4))
         {
            #define sw1 pin_b4
            #define sw2 pin_b5
            #define my1 pin_c6
            #define my2 pin_c7
         }
if(input(pin_b5))
        { 
            #define sw1 pin_b5
            #define sw2 pin_b4
            #define my1 pin_c7
            #define my2 pin_c6
        }

Bu if ifadesi ile programın çalışması sırasında yaptığım kontrol. Bu da çalışmıyor.

Alıntı YapBirinci grubu sw1_1 gibi isimlerle tanımlarsın, ikinci grubu ise sw1_2 gibi isimlerle tanımlarsın. Şart sağlanırsa  swx_2 sabitlerini kullanırsın.
bunu tam olarak nasıl yapacağım? Burada x değişken mi?

Tagli

Şu şekilde olmalı:
#define sw1_A pin_b4
#define sw2_A pin_b5
#define my1_A pin_c6
#define my2_A pin_c7

#define sw1_B pin_b5
#define sw2_B pin_b4
#define my1_B pin_c7
#define my2_B pin_c6


Yapacağın işlemin de LED yakma olduğunu varsayalım:
if(input(pin_b4)){
     my1_A = 1;
}
else{
     my1_B = 1;
}


Malesef başka türlü bir kullanım mümkün değil. # ile başlayan tüm komutlar derleme sırasında kesin olarak belli olmak zorunda. Kodun çalışması sırasında bunlar kullanılamaz.
Gökçe Tağlıoğlu

mokan

anladım.ne yapalım artık dediğin şekilde kullanacağız.keşke benim yapmaya çalıştığıma benzer bir mantık olsaydı.pbp'de pin numaralrını değişken ile gösterebildiğimiz için ccs'de ona benzer bir durum lazım oldu.pbp'den kalan alışkanlıkları değiştirmek lazım :)