Kendi yazdigim geciktirme Funksiyonu sorun yaratiyir.Neden?

Başlatan Digimensch, 30 Ağustos 2006, 18:05:59

Digimensch

Arkadaslar CCS de gecikmeyi yani delay_ms();
funktionun yaptigi olayi kendim bir Funksiyon yazarak yaptim.
#if defined(__PCM__)
#include <16F84.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)  

#define LED_ON output_high(PIN_B4);
#define LED_OFF output_low(PIN_B4);

void sure(long int x); // funksiyonun tanimi
void main()
	{
	while(1)
		{
	  LED_ON;
		sure(100);
	  LED_OFF;
     sure(100);
		}
	}
void sure(long int x)  // Funksiyonumuz
{
long int y;
for(y=1;y<x;y++)
{
;  // Funksiyonmuz bir deger döndermiyor.
}
}

Kod calisti hatta ISIS'de denedim gayet güzel.Ama gercek anlamda PIC ile deneme yaptim Led sadece yanip kaldi Yani Led sinyal falan vermiyor.

Ayni denemyi CCS'in kendi Funsiyonu ile yani
delay_ms();  kullanarak su sekilde denedim
#if defined(__PCM__)
#include <16F84.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)

#define LED_ON output_high(PIN_B4);
#define LED_OFF output_low(PIN_B4);

void main()
	{
	while(1)
		{
	  LED_ON;
		delay_ms(250);
	  LED_OFF;
      delay_ms(250);
		}
	}


Yaptigim Devrede Led istedigim sekilde sinyal verdi.
Yani kendi Funsiyonum ile yaptigim Kod ISIS'de calisirken gercek PIC icine yükleyip denedigimde calismadi.Oysa CCS'in kendi funksiyonu olan
delay_ms();
sorun cikartamadan calisti.
Benim yazdigim Funksiyonda hata varmi?
Olsa ISIS'de calismamasi gerekirdi.
Not:Kendi yazdigim Funksiyonlu örnekte su satiri
#use delay(clock=4000000)
kadirdim yine denedim yine ayni sonuc

mp3dragon

döngü çok kısa led yanıp sönüyor ama gözle farkedemeyecek kadar hızlı.
For döngüsü içerisine birkaç tane nop at, ayrıca sure(100); yerine sure(5000); yap.
İyilik Yap, Denize At, Balık Bilmezse, Halik Bilir.

Digimensch

Yani süre cok kisa oldugu icin ben ledi hep yaniyor gibimi görüyorum?
Ok O zaman süreyi uzatip birde öyle deneyim.
Sonucu yazarim

ise

long int y;
for(y=1;y<(x*1000);y++);   daha iyi sonuç alırsın.  ccs nin fonskiyonu gerçek zamanda saniye olarak vermiştir. proteus tam gerçek zamanlı olarak ekranda çalışamıyor. aşağıda saniye kısmına dikkat edersen fonksiyonun hala zamanı doldurmaya çalıştığını görebilirsin.  delay_ms(100) gibi fonksiyonuda kullanabilirsin

Digimensch

Saol un arkadaslar cevaplariniz ise yaradi.
Süre cok kisağoldugu icin Ledin yanip sönmesi belli olmuyorsmus.
for(y=1;y<(x*1000);y++);
sekliyle hemen hemen tam saniye zamanini tuttu.

zafzaf82

niye böyle bi kod yazma isteği duydun CCS de anlayabilmiş değilim. Çünkü ccs de delay_ms, delay_us, delay_cycles komutları var hali hazırda. Yoksa IAR vb gibi programlaramı özendin. Ya da CCS C yi ANSI standartlarına uygun hale getirmekmi çaba......
Mikroişlemci bi araçtır, amaç değil.....

Ugur2006