CCS C Delay (Bekleme) Fonksiyonları

Dealy komutu programımızdaki tüm işlemlerin bir süre beklemesini sağlar. Delay fonksiyonları zamanlayıcı değildir. Zamanlayıcılar programdan bağımsız çalışan yapılardır. Ancak Delay fonksiyonu program akışını durdurur. Bu komut program akışını durdursa da kesme işlemleri çalışır.

CCS C dilinde 3 adet bekletme fonksiyonu vardır. Bunlar;

  1. delay_cycles()
  2. delay_ms()
  3. delay_us()

Şimdi bu belkeme fonksiyonlarını bir bir inceleyelim.

1- delay_cycles() :

delay_cycles() fonksiyonu, saat darbesinin bir saykıl süresinin belirlenen katları kadar bekleme işlemi yapmak için kullanılır. Bilindiği üzere PIC denetleyicileri, osilatör freaknsının 1/4 kadarını kullanır. yani osilatör frekansı 4 MHz ise, denetleyici bu frekansı 4’e böler ve 1 Mhz olarak kullanır. delay_cycles() fonksiyonunda ise bu frekans 1 MHz’i baz alarak bekleme işlemi yapar. 8 bit integer türünden (1-255 arası) parametre alır ve geriye değer döndürmez.

Sözdizimi: delay_cycles(sayi);

sayi; 1 ila 255 arası 8 bitlik tamsayı

Örneğin 20MHz osilatör kullanan bir devrede 25 saykıl süresi kadar bekleme işlemi yaparsak;

PIC denetleyicimiz osilatör frekansının  1/4 kadarını kullanacağı için öncelikle osilatör frekansını 4’e bölelim;

20/4 = 5 MHz

5MHz frekans demek, saniyede 5 Milyon periyot demek. Biz bu 5 milyon peryot’un sadece bir tanesinin tamamlanması için geçen süreyi hesaplayacağız. Bunun için 1 saniyeyi 5 milyona bölersek, bir peryotun tamamlanması için geçen süreyi, yani saykıl’ı buluruz:

1 saykıl = 1/5000000 = 0.0000002 saniye;

Şimdi 25 saykıl süresi kadar bekletme yapmak demek;

25 * 0.0000005 =  0.000005 saniye yani 5mikrosaniye  bekletme anlamına gelir.

Şimdi kodlarımız ile uygulayalım;

Yukarıdaki örnek kodlarımızın uygulamasında, 5 mikrosaniye çok küçük süre olduğu için görsel olarak çalışmasını farkedemeyiz ancak, B portunun 5 nolu pinine osiloskop bağlarsak kodların çalıştığını görebiliriz.

Proteus ile simule ettiğimiz yukarıdaki kodların çalıştığı görülüyor.

delay_cycles

2- delay_ms() Fonksiyonu:

delay_ms() fonksiyonu ise milisaniye cinsinden bekletme yapmak için kullanılır. Programlama sırasında en çok kullanacak olduğumuz foknsiyondur. Alabileceği değer 16 bitlik tamsayı değeri olduğu için 65.5 saniyeye kadar bekletme işlemi gerçekleştirebilir. Yani 1 ile 65535 arası değer alabilir ve geriye değer döndürmez.

Sözdizimi: delay_ms(süre);

süre; int16 türü değer, yani 1 ile 65535 milisaniye arası

Şimdi bunu bir örnekle açıklayalım. Örneğin B portunun 5 nolu pinine bağlı olan ledi 5 saniye aralıklarla yakıp söndürelim;

 

3- delay_us() Fonksiyonu:

Bu fonksiyonumuz ise mikrosaniye cinsinden bekletme yapmak için kullanılır. Milisaniye fonksiyonumuzdaki gibi 16 bit tamsayı cinsinden değer alır ve geriye değer döndürmez.

Sözdizimi; delay_us(süre);

süre; 16 bitlik tamsayı cinsinden değer. 1 ile 65535 arası

Örnek kullanım:

Tekrar hatırlatmakta fayda var, bekletme fonksiyonu ile zamanlayıcı aynı şey değildir. Bekletme fonksiyonu, kullanıldığı noktada program akışını durdurur. Zamanlayıcı ise program akışından ayrı çalışır. Zamanlayıcı işlemlerini ileriki derslerde Timer başlığı altında inceleyeceğiz.

Yorum Yap