Fırat DEVECİ nin "HI_-TECH ile PIC programlama" Adlı kitabından bazı sorularım olacak;
#include <htc.h>
#include "delay.h" // Gecikme yaratacak kütüphane
void main(void) // Ana fonksiyon alanı
{
TRISB=0x00; // PORTB çıkış olarak yönlendiriliyor
PORTB=0x00; // PORTB'nin tüm çıkışları sıfırlanıyor
while (1) // Sonsuz döngüye giriliyor
{
RB0=1; // Led yanacak
DelayMs(250);DelayMs(250); // Yarım saniye beklenecek
RB0=0; // Led sönecek
DelayMs(250);DelayMs(250); // Yarım saniye beklenecek
}
}
Buradaki 2 tane ardışık geçikme komutun un özel bir anlamı var mı!
DelayMs(250);DelayMs(250);
Bunun yerine DelayMs(500); yazsak aynı işi görür mü!
burada herhangi bir ozellik yok olsa olsa DelayMs(); fonksiyonuna taminlanan degisken 8 bitlik olbilir.baska mantikli bir anlami yok.
Bu durum derleyiciye göre değişmektedir. Gecikme saykıl
olarak yapılmakta. 179.200, 197120 veya 50.659.000
olabilmekte. En emin durum;
XC8 için...
void myDelay_ms(uint16_t gecikmeZamani)
{
while(gecikmeZamani--)
{
__delay_ms(1);
}
}
şeklinde yapmak...
DelayMs(500); şeklinde yazarsanız olmaz. Çünkü DelayMs() fonksiyonu 8 bitlik değişkenleri işleyecek şekilde yazılmış. Bir DelayMs() fonksiyonu ile maksimum 255 milisaniyelik gecikme sağlarsınız. 255 den daha büyük bir değer yazdığınızda da sonuç değişmez. Eğer DelayS() fonksiyonunu kullanırsanız, istediğiniz saniye kadar gecikme sağlayabilirsiniz. Örneğin DelayS(5); kodu 5 saniyelik gecikme sağlar.
Bu zamanlamaların hiçbirisi gerçek zamana eşit değildir. Hassas zamanlamanın gerektiği yerlerde saykıl hesabı yapılabilir.
Olay 8bit değil, saykıl olayı. Genelde rastladığım 197120
çevrim en fazla. Buna göre OSC / 4 bir çevrim. Kaç ms/us
istiyorsanız ona göre hesaplarsınız.
Alıntı yapılan: gogge - 08 Ocak 2017, 22:21:19
DelayMs(500); şeklinde yazarsanız olmaz. Çünkü DelayMs() fonksiyonu 8 bitlik değişkenleri işleyecek şekilde yazılmış. Bir DelayMs() fonksiyonu ile maksimum 255 milisaniyelik gecikme sağlarsınız. 255 den daha büyük bir değer yazdığınızda da sonuç değişmez. Eğer DelayS() fonksiyonunu kullanırsanız, istediğiniz saniye kadar gecikme sağlayabilirsiniz. Örneğin DelayS(5); kodu 5 saniyelik gecikme sağlar.
Bu zamanlamaların hiçbirisi gerçek zamana eşit değildir. Hassas zamanlamanın gerektiği yerlerde saykıl hesabı yapılabilir.
Şimdi anladım Hocam. 8 BIT ile ulaşabileceğimiz en büyük sayı 255 olacağından 500' e erişmek için 2 tane aynı ardışık olarak kullanarak elde ediyoruz.