__delay_us() ve DelayUs()

Başlatan kubilaytuna, 08 Eylül 2012, 13:05:51

kubilaytuna

Arkadaşlar merhaba ben hitech c ile program yazmaya yeni başladım. İşin henüz çok acemisiyim ve takılığım bir konu var. İnternetteki örnekleri incelerken gecikme için __delay_us() komutunun kullanıldığını gördüm ve bikaç deneme yaptım oldukça doğru zamanlama yapıyor gibime geldi. Ama sitede yazılan örnekler ve biçok uygulamada hitech ile beraber gelen delay kütüphanesi kullanılıyor. Benim sormak istediğim çok düzgün çalışan __delay_us() varken zamanlama hatası yapan kütüphanedeki DelayUs() niçin kullanılıyor. Bu arada hitech c 9.80 pro kullanıyorum.

AsHeS

__delay_us()  komutu hi-tech için genel olarak kullanılan bir gecikme komutu değildir XC derleyicileri ile gelen standart bir fonksiyondur.Hi-Tech için ise başkasının yazdığı bir kütüphanedir büyük ihtimal.

kubilaytuna

#include <htc.h>
#define _XTAL_FREQ        32000000
void main(void)
{
    TRISB = 0;
    while(1)
	{
    PORTB = 0;
   __delay_us(10);
    PORTB = 1;
   __delay_us(10);
    }
}

bu şekilde yazıyorum hitech c v9.80 ile derliyorum ve hatasız derleniyor isisde çalıştırdığımda zamanlama gerçekci birşekilde çalışıyor.

LukeSkywalker

Alıntı yapılan: AsHeS35 - 08 Eylül 2012, 13:37:52
__delay_us()  komutu hi-tech için genel olarak kullanılan bir gecikme komutu değildir XC derleyicileri ile gelen standart bir fonksiyondur.Hi-Tech için ise başkasının yazdığı bir kütüphanedir büyük ihtimal.
hi_tech de de kullanılıyor__delay_us()..

kubilaytuna

Ben hala anlamadım program yazarken hangisini kullanmak daha avantajlı ve doğru çalışıyor. Hiç _delay_us() kullanan yokmu?

LukeSkywalker

Manualde hangisi verilmisse onu kullanin...

ayhan_eee

__delay_us() daha kararlı çalışıyor.Hitech de mikro saniyelere inmek çok zor oluyordu.40kHz üretmeye çalışıtken DelayUs() kullandığımızda elde edememişken __delay_us() fonksiyonu,NOP ile aynı geçikmeyi verdi.

serhat1990

#7
Merhabalar __delay_us() fonksiyonunu içinde barındıran kütüphaneyi nereden buldunuz . İnceliyorum fakat bulamadım .

ayhan_eee

O fonksiyonu kullanabilmek için c içinde

#define _XTAL_FREQ 4000000

tanımlamasını yapmanız gerekiyor

serhat1990

Ben kodum içerisinde bu tanımlamayı zaten yapıyorum . Yalnız fonksiyonun c ve h dosyası olmadan fonksiyonu yazmayı düşünmediğimden denemedim .

kubilaytuna

32 Mhz için  "#define _XTAL_FREQ        32000000" diye tanımlama yapıyorum sadece. Dahili bir komut galiba herhangi bir kütüphanesi yok.

serhat1990

Tamamdır ;) Fark şu ben 9.63 PRO kullanıyorum . Teşekkür ederim.