"HI_-TECH ile PIC programlama" Hakkındaki sorularım.

Başlatan Melih1802, 07 Ocak 2017, 22:24:46

Melih1802

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ü!

dursuncemal

burada herhangi bir ozellik yok olsa olsa  DelayMs(); fonksiyonuna taminlanan degisken 8 bitlik olbilir.baska mantikli bir anlami yok.
:=

mehmet

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...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

gogge

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.

mehmet

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.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

Melih1802

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.