PIC18 de "delay" aşımı

Başlatan apsis, 26 Kasım 2016, 16:44:59

apsis

Merhaba,
Pic18f25k22 de "__delay_ms();" fonksiyonunu kullanırken "error: (1355) inline delay argument too large" şeklinde hata alıyorum.
16MHz için max. 49 ms 4 MHZ için max. 197ms gecikme elde edebiliyorum ve bu değerleri aşınca üstteki gibi bir hata aıyorum.
programda _XTAL_FREQ tanımlı.
Bu hatayı sadece 18 serileri için alıyorum ve 16 serileri için böyle bir limit yok.
Microchip formunda pic18  4MHz için 197.170 cycles olabiliyor şeklinde ibare gördüm.
İşin mantığını açıkçası anlayamadım. Yardımlarınızı bekliyorum.
Teşekkürler.
"Makineye Beyin" MEKATRONİK

baran123

Şu şekilde bir çözdüm üretebilirsin. Fakat o sınırlamanın sebebini bilmiyorum.
void Delay_ms(uint16_t delay)
{
   for (uint8_t i = 0; i < delay; i++)
      __delay_ms(1);
}

apsis

Benzer bir çözümle hallettim ama bunun nedenini merak ediyorum. Birazda saçma geliyor.
"Makineye Beyin" MEKATRONİK

RaMu

Kütüphaneyi yazanlar delay fonksiyonunu öyle tanımlamışlar,
upuzun delay istiyorsan ya ard arda yaz yada
timer vs. kullan demişler,
hobi projesi yapıyorsan beni ilgilendirmiyor,
işlemcimi boş boş bekletme,
boş beklesin istemiyorum, çalışsın başka işlerle uğraşsın,
kodunu ona göre yaz, profesyonel olsun diye düşünmüşler.

Yada delay fonksiyonunu o sınırda yazmak işlerine gelmiştir kolay oluyordur,
ondan öyle yapmışlar,
255x255 x ~3 =197 000 (hesap için asm ile delay rutini yazmaya bakabilirsin)
yani 2 tane 8 bitlik register la işi bitirmişlerdir.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

apsis

"Makineye Beyin" MEKATRONİK