CCS C Ön İşlemci Komutları

PIC mikrodenetleyicisini programlamak için kullandığımız derleyicilerden en popülerlerinden olan CCS C kendine has bazı komutları bünyesinde barındırır. Bu komutlar sayesinde yazmak istediğimiz algoritmaları daha işlevsel ve kolay bir şekilde yazabiliriz.

CCS C derleyicisinde oldukça fazla sayıda ön işlemci komutları mevcuttur. Bunlardan sadece sık kullanılan ön işlemci komutları aşağıda verilmiştir.

#INCLUDE Komutu

Bu ön işlemci komutu ile proje dosyamıza dahil etmek istediğimiz kütüphaneleri kolaylıkla projeye dahil edebiliriz. Genellikle kodun ilk satırlarına yazılır. Kullanacağımız mikrodenetleyicinin kütüphanesi de bu sayede koda eklenir.

#include<16F876.h>

Yukarıdaki kodda PIC 16F876 mikrodenetleyicisi üzerinde çalışacağımızı derleyicimize bildirmiş olduk.

#DEFINE Komutu

Bu komut hem C programlama dilinde hem de CCS derleyicisinde ön işlemci komutu olarak kullanılmaktadır. Bu komut sayesinde sabit değişkenler tanımlarız. Genellikle projenin en başında tanımlanırlar ve bütün proje boyunca tanımlanan değişken tanımlandığı isim ile kullanılır.

Bu komutun en büyük avantajı uzun kodlarla sürekli kullandığınız bir değeri değiştirmek istediğiniz zaman teker teker hepsini değiştirmek yerine sadece define ile tanımladığınız değeri değiştirmeniz yeterli olacaktır.

#define pi 3.14
int x;
x = pi * 3;

Yukarıdaki kodda pi isminde 3.14 float değerine denk gelen bir ondalıklı sayı tanımladık. Projemizde nerede 3.14 değerini kullanmak istersek pi ifadesini yazmamız yeterli olacaktır. Yine aynı şekilde pi değerini değiştirmek istediğimizde define satırındaki 3.14 değerini değiştirmemiz yeterli olacaktır.

#DEVICE Komutu

Bu komut ile derleyiciye kullanacağımız mikrodenetleyiciyi tanıtarak onun hangi özelliklerini kullanacağımızı bildiriyoruz.

#device PIC16F876
#device PIC16F877 *= 16 ADC = 10

Yukarıdaki kod vasıtasıyla derleyiciye hem PIC16F876 hem de PIC16F877 kullanacağımızı bildirdik. Buna ek olarak PIC 16F877 mikrodenetleyicisinin 16 bitlik işaretçi yani pointer kullanacağını ve ADC biriminin 10 bit olarak kullanılacağını bildirdik.

#USE DELAY Komutu

Yazacağımız kodda gecikme fonskiyonlarını kullanabilmemiz için bu komutu projemize dahil etmemiz gerekir. Bu komut ile derleyicimize projemizde kullanacağımız osilatörün çalışma frekansını bildiriyoruz.

#use delay (clock = 4000000)

Yukarıdaki kod ile osilatörümüzün 4 Mhz çalışma frekasına sahip olduğunu derleyiciye belirtmiş olduk. Bu sayede kodumuzun içerisinde kullandığımız delay fonskiyonları bu frekansa göre çalışacaktır.

#USE FAST_IO() Komutu

Bu komut ile mikrodenetleyimizde hangi portun kullanılacağını önden derleyiciye bildirmiş oluyoruz. Bu kodumuza hız katmamıza yaramaktadır. Çünkü bu komutu kodumuza eklemediğimizde program port giriş ve çıkışlarını optomatik belirlemektedir. Bu otomatik belirleme işlemini manuel bir şekilde bu komut ile yaptığımızda işlemciye düşen görev azaldığı için hız artar.

Burada dikkat edilmesi gereken en önemli husus ise bu ön işlemci komutu ile set_tris_X() komutunun birlikte kullanılmasının gerekliliğidir. Bu komut kodumuzdaki bir sonraki #use xxx_io komutuna kadar geçerliliğini korumaktadır.
#use fast_io(b)
set_tris_a(0xFF);

Bu kod sayesinde B portunun giriş veya çıkış olarak kullanılacağı ilk satırda derleyiciye bildirilirken ikinci satırda B portundaki hangi pinlerin lojik – 0 ve lojik -1 olacağını bildirmiş olduk.

#USE_FIXED_IO() Komutu

Bu komut ile içerisinde parametre olarak belirttiğimiz tüm pinler çıkış pini olarak tanımlanır. Yazılmayan binler giriş pini olaarak kalırlar. Hangi portun hangi pininin kullanılacağı da belirtilmek zorundadır ve bu komut bir sonraki #use xxx_io komutuna kadar geçerliliğini korur.

#use fixed_io(a_outputs = pin_b0,pin_b1)

Yuklarıdaki kod ile B portuna ait RB0 ve RB1 pinleri çıkış yani output pini olarak tanımlanmıştır. B portuna bağlı diğer pinler ise giriş pini olarak tanımlanmıştır.

#USE ADC Komutu

Bu komut ile analog digital converter dediğimiz ADC’ nin kaç bitlik bir çevirme yapacağını derleyiciye bildirir.

#use ADC = 10

Yukarıdaki kod ile ADC biriminin 10 bitlik çevirme işlemi yapacağını derleyiciye bildirdik.

#FUSES Komutu

Bu komut genellikle kodumuzun başlarında yer alan önemli bir komuttur. Kullandığımız mikrodenetleyicinin özelliklerini açıp kapamımıza yarayan bir komuttur. Bu komut ile birlikte kullanılan ifadeler asıl anlamlarının baş harfleriyle kısaltılmışlardır. Bu ifadelere aşağıdan ulaşabilirsiniz. Aşağıdaki örnek kod ile de #fuses kullanımını anlayabilirsiniz.

Kısaltma İfadesi Anlamı
LP Low Power Osc. – Düşük frekanslı kristal
XT Kristal veya Seramik resonatör (Xtal)
HS High Speed – Yüksek Hız
RC Resistor Capacitor – Direnç Kondansatör osilatör
WDT Watch Dog Timer
NOWDT No Watch Dog Timer – WDT kullanılmayacaksa seçilir
PUT Power Up Timer
NOPUT No Power Up Timer – PUT istenmiyorsa seçilir
LVP Low Voltage Programming – Düşük gerilimle programlama

PIC programlamak için gerekli olan 13 V bu komut ile 5V seviyesine iner ve düşük gerilimde programlama yapılabilir

NOLVP No Low Voltage Programming – LVP modu istenmiyorsa seçilir
CDP Code Protected Data – Data EEPROM belleğinin korumalı olması istendiğinde seçilir
NOCDP No Code Protected Data – EEPROM belleği koruması istenmediğinde seçilir
PROTECT ROM belleğine yazılan verilerin okunmasını engeller
PROTECT_5% ROM belleğinin %5’lik kısmını korur
PROTECT_50% ROM belleğinin %50’lik kısmını okumaya karşı korur
NOPROTECT ROM belleğe okumaya karşı koruma koymaz