Mikro C delay içerisinde değişken kullanma sorunu

Başlatan mustafabat, 20 Mart 2015, 14:15:45

mustafabat

Merhaba arkadaşlar MikroC ye yeni başladım delay_us(100); gecikme komutunda 100 yerine değişken kullanamadım hata veriyor başka bir yazım şekli mi var. yardımcı olursanız sevinirim.

ÖR:
int i=10;
delay_us(i);

mehmet

Yanlış hatırlamıyorsam 'vdelay_ms' komutu
içerisinde değişken kullanmak mümkün.
Bu olmaz ise;
bir fonksiyon oluşturunuz. For içerisinde
delay_ms(1) komutunu kullanabilirsiniz.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

LukeSkywalker

us cinsinden değişken tanımlamalı fonksiyon yok.
şöyle birşeyler yapabilirsiniz;

void bekle_us(int sure)
{
 int i;
 for(i=0;i<sure;i++) delay_us(1);
}

void main()
{
 bekle_us(500); //500 us bekleyen fonksiyonu çağırırsınız.
}



mustafabat

Cevap için teşekkür ederim fonksiyon ile iş çözülecek  :)

mufitsozen

#4
Alıntı yapılan: mustafabat - 21 Mart 2015, 12:38:29
Cevap için teşekkür ederim fonksiyon ile iş çözülecek  :)

affiniza siginarak bir sorum var. Kullandiginiz MCU nedir? ve kac mhz clock ile kullaniyorsunuz?
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

mustafabat


mufitsozen

#6
Alıntı yapılan: mustafabat - 22 Mart 2015, 22:21:33
16f628 4 mhz
yani MCU 1 komutu 1us'de kosacak. Yani bir tane
      MOVLW b'00110'
  yada
       NOP
   yada ... komutu yazsaniz her biri  delay_us(1) olacak

Sonucta for dongusu yada bir fonksiyon icinde kullanirsaniz hicbir zaman 1us cozunurluk alamiyacaksiniz

bu yuzden delay_us diye bir c fonksiyonu yok libraryde. size onerilen cozumlerde yanlis zamanlamaya yol acacaktir.

onun yerine her delay_us(1) icin bir nop koyunuz.

Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

mustafabat

Haklısınız. nop hakkında biraz bilgi verebilir misiniz.

mufitsozen

Alıntı yapılan: mustafabat - 23 Mart 2015, 13:01:49
Haklısınız. nop hakkında biraz bilgi verebilir misiniz.

NOP ingilizce 'NO OPERATİON' sozcugunden tureme bir MCU komutu. NOP komutu ile hicbirsey yapmiyorsunuz, sadece zaman olduruyorsunuz.

sizin kullandiginiz MCU ve Clock ile her NOP 1us delay yapar. Baska hicbir etkisi yoktur.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

baran123

Mustafa bey delay kullanmak yerine timer ile bir fonksiyon oluştursanız daha iyi olur düşüncesindeyim, isterse 1 ghz de çalışan bir işlemci olsun delay verdiğiniz anda 1ghz ile giden işlemciyi duvara toslatmak(kitlemek) gibi bir şey oluyor.tabi düsük seviye işlemci bile olsa bile en iyisi sart:)

jrcapa

Delay_Cyc(i) kullanılabilir sanırım. Parantez içine istediğiniz sürenin 10'da birini yazıyorsunuz.

Delay_Cyc(10);   /* Hundred MCU cycles pause */

engerex

Olursa şöyle bir şey olabilir. Diyelim döngü ile 1 ms ve katları şeklinde delay yapılacak. Döngü içeriği hariç 0.05 ms lik zaman alıyorsa döngü içi 0.95 mslik nop ile doldurulur. Böylece her döngü 1 msye eşitlenir.Birde döngüden çıkışta başa dönmediği için bir kaç nop komutu daha koyulur ve 1 döngülük süre tamamlanır.