pcbway

Ccs c\'de fonksiyon kullanımı.

Başlatan golgi, 14 Aralık 2012, 13:20:10

golgi

arkadaşlar merhabalar,

ccs c ile pic\'e giriş yaptım sayılır, 3 ayrı pine 3 led bağlayarak sırayla yakıp delay vermek amacım.. ama herbir led için ayrı delay fonksiyonu oluşturup main programda bu delay fonksiyonlarını çalıştırmak istiyorum şöyle bir kod yazdım;

#include \"C:\\Users\\Administrator\\Desktop\\pic calisma\\delay.h\"

void timer1 (int i, )
{

for  (i=1; i<=255; i++)
delay_ms(250);

}

void timer2 (int i, int j)
{

for(i=0;i<=255;i++)
{
for(j=0;j<=255;j++)
{
delay_ms(250);

}
}

}


void timer3 (int i, int j, int k)
{
for(i=0;i<=255;i++)
{
for(j=0;j<=255;j++)
{
  for (k=0;k<=55;k++)

{  delay_ms(250);

}
}
}

}

void main()
{

   

   set_tris_a(0x00);
   output_a(0x00);
   calis:
   
   output_high(pin_a0);
   
   timer1 (void) ;   ***************
   
   output_high(pin_a1);
   
   timer2 (void) ; ***************
   
   output_high(pin_a2);
   
   timer3 (void) ; **************
   
   goto calis;
}


yanına yıldız koyduğum satırlarda void yerine numerik bir değer atamam isteniyor, orayı tam kavrayamadım..

her bir delay fonksiyonunda farklı sayıda for kullanmamın sebebi de ledlerin yanma süresini farklı istemem, umarım doğrudur..

Teşekkürler.

neural

14 Aralık 2012, 14:57:07 #1 Son düzenlenme: 14 Aralık 2012, 14:59:01 neural
void timer1 (int i, )
void timer2 (int i, int j)
void timer3 (int i, int j, int k)
işlevlerini tanımlarken int yazarak değişken tanımlamış ve veri girişi olacak demişsiniz. Ama veri girişi yerine esas programda void demişsiniz. Bu hatalı bir kullanımdır.
İşlev (fonksiyon) tanımı yaparken nasıl tanımlarsanız o şekilde kullanmanız gerekir.
Örnek:
void timer() {
  //gecikme işlevi
}

veya bir değere bağlı yapmak isterseniz;
void timer(int k) {
  for  (i=1; i<=k; i++) {
    delay_ms(250);
  }
}

golgi

Alıntı yapılan: neural - 14 Aralık 2012, 14:57:07void timer1 (int i, )
void timer2 (int i, int j)
void timer3 (int i, int j, int k)
işlevlerini tanımlarken int yazarak değişken tanımlamış ve veri girişi olacak demişsiniz. Ama veri girişi yerine esas programda void demişsiniz. Bu hatalı bir kullanımdır.
İşlev (fonksiyon) tanımı yaparken nasıl tanımlarsanız o şekilde kullanmanız gerekir.
Örnek:
void timer() {
  //gecikme işlevi
}

veya bir değere bağlı yapmak isterseniz;
void timer(int k) {
  for  (i=1; i<=k; i++) {
    delay_ms(250);
  }
}


hocam o zaman 2. led üzerinden açıklamaya çalışayım şimdi yukarıda timer2 isimli bi fonksiyon oluşturdum;

void timer2 (int m=255 ,  int n= 255 )
{
int i=0;
for(i=0;i<=m;i++)
{
int j=0;
for(j=0;j<=n;j++)
{
delay_ms(250);

}
}

}

bu şekilde oldu galiba dediğiniz gibi, peki aşağıda bu fonksiyonu çağırdığımda şu şekilde

timer2 () ;

parantezin içine bi numerik değer istiyor bu ne olacak?

golgi

timer1(255);
timer2(255);
timer3(255);

şu şekilde yaptım çalıştı ama mantığı anlamadım :)

golgi

son olarak bu program için şu devreyi kurdum hex dosyasını yükledim ama çalışmadı, fikri olan var mı acaba?


neural


golgi

hocam eyvallah, o kadar enkaz değilim aslında :) quartusta spice da çalışıyordum isis\'e yeni geçtim program pic\'in voltunu kendi ayarlıyor diye okumuştum.. ilk iki led yanıyor ama 3.sü yanmıyor şimdi onunla uğraşıyorum

neural

Çalışmıyor deyince bu anlaşılıyor. Amacım yardımcı olmak, devre üzerinde eksik olduğunu gördüğüm için söyledim. Evet doğru, Proteus mikrodenetleyicinin gerilimini kendisi veriyor. Ancak MCLR için durum aynı olmayabilir.

golgi

Alıntı yapılan: neural - 14 Aralık 2012, 17:27:42Çalışmıyor deyince bu anlaşılıyor. Amacım yardımcı olmak, devre üzerinde eksik olduğunu gördüğüm için söyledim. Evet doğru, Proteus mikrodenetleyicinin gerilimini kendisi veriyor. Ancak MCLR için durum aynı olmayabilir.

 yok size bişey demedim yanlış anlaşıldım sanırım kusura bakmayın, yardım için beni umutsuz vaka olarak görmeyin hevesiniz kırılmasın diye öyle bi açıklama yaptım.