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.
__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.
#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.
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()..
Ben hala anlamadım program yazarken hangisini kullanmak daha avantajlı ve doğru çalışıyor. Hiç _delay_us() kullanan yokmu?
Manualde hangisi verilmisse onu kullanin...
__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.
Merhabalar __delay_us() fonksiyonunu içinde barındıran kütüphaneyi nereden buldunuz . İnceliyorum fakat bulamadım .
O fonksiyonu kullanabilmek için c içinde
#define _XTAL_FREQ 4000000
tanımlamasını yapmanız gerekiyor
Ben kodum içerisinde bu tanımlamayı zaten yapıyorum . Yalnız fonksiyonun c ve h dosyası olmadan fonksiyonu yazmayı düşünmediğimden denemedim .
32 Mhz için "#define _XTAL_FREQ 32000000" diye tanımlama yapıyorum sadece. Dahili bir komut galiba herhangi bir kütüphanesi yok.
Tamamdır ;) Fark şu ben 9.63 PRO kullanıyorum . Teşekkür ederim.