CCS C Ön İşlemci Komutları
Ön İşlemci Komutları

Ön işlemci komutları derleyiciye programın nasıl derleneceği hakkında bilgi verir. Programın işleyişine engel olmaz ve program çıktısına yansımaz.
Hafıza Kontrol Komutları
#asm #endasm
Bu iki komut arasında assembly komutları yazılabilir. C ile programlanırken asssembly komutlarının kullanımına olanak sağlar.
#org
İstenen komutların ROM bellekte istenen adresten başlayarak yerleştirilmesini sağlar.
#org 0x1E02, 0x1FFF void ornek() { ……}
örnekte bu fonksiyon ROM bellekte 1E02 adresinden 1FFF adresleri arasına yazılır.
Tek adres yazılır ise o adresten başlanarak devam edilir.
#rom
Rom bellekte istenen adreslere süslü parantez içindeki kısmın yazılmasını sağlar.
#rom 0x3000={1,2,3,7,8}
parantez içinde verilen değerler 0x3000 adresine sırası ile yazılır.
#reserve
İstenen adres veya adres aralığının RAM bellekten ayrılması için kullanılır. Ayrılana adresler derleyici tarafından kullanılmaz. Bu komut #device komutundan sonra kullanılır.
#device PIC16F877 #reserve 0x52 // 0x65 derleyici tarafından kullanılamaz #reserve 0x45,0x25,0x4A // yazılan adresler yırtılmıştır. #reserve 0x71:0x80 // yazılan iki adres aralığı yırtılmıştır.
#byte
Belirtilen isimde bir değişken, 8 bit’lik bir adrese yerleştirilir.
#byte portc=0x04 #byte portz=0x03
yukarıdaki örnekte portc ve portb değişkenleri 0x04 ve 0x03 adreslerine yerleştirilmiştir.
Bu komut ile değişken bellekte istenen adrese yerleştirilmektedir. Fakat derleyici otomatik değişken yerleştirmelerinde başka değişkeni bu komut ile belirlediğimiz aynı adrese yerleştire bilir. Bu olayı önlemek için #locate komutu kullanılır.
#locate
Bu komut #byte komutu ile aynı özelliktedir; istenen değişkeni istenen adrese yerleştir, farklı olarak kullanılan adresin derleyici tarafından başka amaçlar için kullanılmasını önler.
#locate a=0x65
#bit
Herhangi bir değişken veya sabit, herhangi bir adresin istenen biti ile ilişkilendirilebilir.
int durum; #bit okuma=durum.2 okuma=1; // durum değişkenin 2. biti 1 yapılıyor
okuma değişkenin 2. bit’ini 1 şeklinde değiştiriliyor. okuma adlı değişken durum değişkenin 2. bitini ifade etmektedir. #bit ile tanımlanan değişken sadece 1 ve 0 alabilir.
#zero_ram
Program başlangıcında kaydedicilerin içeriğini sıfırlar.
#word
Program başında #word tanımlanan veya tanımlanmayan değişken bellekte istenen adrese kaydedilir. #word komutu ile tanımlanan değişken önceden tanımlanmamış ise derleyici tarafından otomatik 16 bit tamsayı türünde yeni tanımlanmış değişken olarak tanımlanır.
#word a=0x0060
a değişkeni 16 bitlik tamsayı türünde oluşturuldu ve 0x0060 adresine kaydedildi.
#TYPE
- Kullanılacak veri türlerinin türlerinin bit sayılarının ayarlanmasını sağlar.
- Kullanılacak değişkenlerin tersi belirtilmedikçe işaretli veya işaretsiz olarak algılanmasını sağlar.
- Kaydedilen RAM bölgesini belirleme işlemleri yapabilir.
#TYPE SHORT=8, INT=32
yukarıdaki kod satırında short kelimesi 8 bitlik ve int 32 bitlik hale getirilmiştir. Normalde int kelimesi 8 bitlik veri türü olduğunu unutmayınız.
#TYPE ile SHORT, İNT ,LONG ve DEFAULT kelimeleri kullanılabilir.
#TYPE SIGNED int x;
yukarıdaki komut kullanıldığı bir programda işaretli belirtilmeyen değişken tanımlamalarının hepsi işaretli şeklinde tanımlanır.
addressmod (benim_RAM, 0x0110,0x01FD); #TYPE default=benim_RAM
yukarıdaki örnekte addressmod komutu ile tanımlanan başlangıcı 0x0110, bitişi 0x01FD olan bir RAM bölgesi tanımlanmıştır.
#TYPE default=benim_RAM komutu ile değişkenlerin kaydedileceği sınırları belirlenen adresse benim_RAM bölgesi seçilmiştir. Yani benim_RAM bölgesi 0x0110 ile 0x01FD aralığındadır ve değişkenler bu alan içine tanımlanacaktır.
Önceden Tanımlanmış Sabitler
Derlenen dosyanın tarihini verir.
printf(“Derleme Tarihi”); printf(__DATE__);
Derlenen dosyanın zamanını verir.
printf(“Derleme Zamanı:”); printf(__TIME__);
O anda işlenen komutun satır numarasını verir.
printf(“Satir Numarasi”); printf(__LINE__);
Derlenen dosyanın ismini verir. Dosyamızın ismi turkmuhendis olsun
char p[]=__FILE__;
p dizisinin içerisine turkmuhendis karakterleri atanmıştır.
Programın derleneceği sırada hangi derleyici modülünün kullanılacağını belirtir.
#ifdef__PCB__ #device PIC18F452 #endif
Programın içinde tanıtılan cihazın kodunu verir.
#DEVİCE PIC16F877 int16 a; a=__device__
a‘nın değeri 877 olur. PIC16F877 kodu 877 dir.
Standart C Komutları
#define
#undef
C programlamadan hatırlanacağı üzere programın başında bir global değişken tanımlanır.
#define x=3;
x değişkeni programın her alanında 3 değeri alır.
Define ile tanımlanan değişkenin değerini serbest bırakır.
#define x=3; #undef x;
x değişkenin değeri artık 3 değildir.
#if,#else,#elif,#endif
C programlama dilinde kullanılan şart ifadelerinden olan if deyimi pic programlamada aynı görevi yerine getirir. Kontrol döngüsü #if ile başlar #endif ile sonlanır. Kontrolün içinde şart doğru ise #else komutuna kadar olan görev bloğu gerçekleştirilir, şart yanlış ise #else ile #endif bloğu arası gerçekleştirilir. elif de c programlamada else if ile aynı işlevdedir.
#if x>5 // eger x degeri 5’ten buyukse unsigned int16 deger; // bu satır islenir #elif // eger x degeri 5’ten buyuk degilse unsigned int8 deger; // bu satır islenir #else // x degeri 5’ten ne büyük de eşitse signed int8 deger; // bu komut yapılır #endif // sonlandır
#ifdef, #ifdef
İfdef komutu programın herhangi bir yerinde #define ile değişken tanımlanıp tanımlanmadığını kontrol etme amaçlı kullanılır, yapılmış ise #else koduna kadar olan kısmı, yapılmamış ise #else ile #endif arasındaki komut satırları işlenir.
ifndef komutu ise efdef komutu ile yapılanın tam tersini yapar. Tanımlama yapılmış ise #else ile #endif , yapılmamış ise #else kelimesine kadar olan kısım yapılır.
#list, #nolist
C derleyicisinde yazılan C kodunu assembly kodu karşılığını görülebiliyordu. Bu işlem gerçekleştirdiğinizde derleyici size .lst uzantılı bir dosya oluştur. Oluşturulan bu dosya içerisinde kodlarınızın hem assembly hemde C karşılığını görebilirsiniz. #nolist ile #list kodu arasında assembly kodunun C karşılığı .lst dosyasında gösterilmez.
#error
#warning
Derleme işlemi gerçekleştirtiği sırada programın hata mesajı yazdırmasını sağlar.
#error //hata mesajı yaz
Derleme işlemi sırasında #error komutu ile benzer olarak hata mesajı yazdırır.
#warning //hata mesajı yaz
Denetleyici Tanımlama Komutları
#ID
Denetleyicilere kimlik numarası verilebilir. ID numarası için ayrılan adresler:
0x2000, 0x2001, 0x2002 normal komutlar ile bu alana erişilmez. ID numrası 16 bitliktir.
#ID 0x1234 // ID no verilmiştir. #ID 4,5,6,7 // ID no 0x4567
Dosyadan ID okutulmak istenirse
#ID “id_oku.h” // id_oku.h dosyasından 16 bitlik sayı okunur
#fuses
Konfigürasyon bit’lerinin ayarları yapılır.
#fuses LP, NOWDT
Bu programda düşük hızlı oslilatör ve Watchdog Timer’ın kullanılmadığını belirtir.
#HEXCOMMET
Adından da anlaşılacağı üzere derleyicinin oluşturduğu .hex uzantılı dosyanın başına açıklama yazar. Yazılan açıklama programın kod satırını etkilemez.
Fonksiyon Nitelendirici
#INT_...
#int_default
#INT_GLOBAL
Kesme fonksiyonlarının tanımlamalarında kullanılırlar. (bakınız.)
#INT_EXT // Dış kesme #INT_EXT2 #INT_RDA #INT_SSP #INT_TIMER1 #INT_RTCC #INT_RB #INT_TIMER0 #INT_TIMER3
Pıc denetleyicide tanımlanmayan bir kesme meydana geldiğinde varsayılan kesme olarak kullanılır. Bu durum denetleyici bir pazarzit ile karşılaştığında gerçekleşe bilir.
#int_default tanimsiz_kesme(){ printf(“lcd_tutc,”Tanımsız kesme”);}
Pıc denetleyicisinde bir kesme meydan geldiği zaman denetleyici 4 numaralı adrese gider. Pıc denetleyici buradaki dallanma işlemini, gerçekleştirir. Eğer programda bu kesme işleminin gerçekleşmesi sırasında pic derleyicinisin 4 numaralı adrese değildi sizin gitmesini isteğiniz adres olması istenirse bu komut kullanılır.
#inline
#separete
Pic derleyicisinde fonksiyon tanımlarken ön işlemci komutu #inline kullanılırsa bu kodun kullanıldığı fonksiyonun her komutu çağrıldığı yere kopyalanır. Bu sayaede derleme işleminde hızlanma meydana gelir.
Bu komutu fonksiyonların derleyici tarafından otomatik inline özellikte komut atamasın engeller. Rom bellekten tasarruf sağlanmış olur. Yığın bellek alanının daha fazla kullanılmasını sağlar.
Yerleşik Kütüphaneler
#use delay
Program yazarken gecikme komutu kullanılabilmesi için ön işlemci komutu #use delay kullanılması gerekir.
#use delay (clock=4000000)
derleyicinin 4Mhz bir osilatör ile çalıştığını belirtmektedir.
#use standart_io()
Pıc mikrodertleyicisine hangi portun giriş veya çıkış olarak kullanılcağı bildirilmesi gerekir, bu bildirim yapılmamış ise standart girş ve çıkış portları kullanılır. Bu ön işlemci komutu kullanıldığı zaman portun hangi bitinin giriş veya çıkış olacağının bildirilmesine gerek yoktur, giriş komutu kullanıldığında derleyici pini giriş olarak yönlendirir.
#use standart_io (port ismi)
#use fast_io()
Bu komut ile beraber set_tris_x() komutu hangi pinin hangi portunun giriş veya çıkış olarak kullanılacağının belirlenmesi gerekir.
#use fast_io ( port ismi) #use fast_io(a) set_tris_a(0xFF) // a portu hepsi giriş yapılıyor.
#use fixed_io()
Program boyunca kullanılacak olan çıkış port veya pinlerinin belirklnemsinde kullanılır. Bu komut ile belirtilmeyen port veya pinler çıkış olarak kullanılmamaktadır.
#use fixed_io (port_outputs=pin_ismi, pin_ismi) #use fixed_io(b_outputs_pin_b0, pin_b1)
Derleyici Kontrol Komutları
#priority
Denetleyici de meydana gelen kesmeleri icra eder aynı anda iki kesme meydana geldiğinde önceli,kli kesmeyi icra eder. Öncelikli kesmeyi bildirmesini sağlar.
#priority ext,timer0
öncelikli kesme olarak ext ve daha sonra timer0 bildirilmiştir.
#case
Programcının CCS’de küçük büyük harf duyarlılığını açmak için kullanılır.
#IGNORE_WARNINGS
İgnore kelimesi İngilizceden Türkçeye çevrildiğinde ihmal anlamına gelmektedir. Bu komut derleyicinin uyarı vermesini engellemek amacıyla kullanılır.
/* Tüm uyarıları kapatmak için: */ #IGNORE_WARNINGS ALL /* Tüm uyarıların açık olaması için: */ #IGNORE_WARNINGS NONE */ Belirli uyarıları almamak için: */ #IGNORE_WARNINGS 200
#opt
Derleyici tarafından C kodlarının assembly kodlara daha az komut ve daha iyi çalışma gibi iyi koşullarda çevirmesi gerekir. Derleyici bunu en iyi şekilde yapar fakat programcı tarafından değiştirilebilir. Bu işlem derleyici optimizasyonudur.
#opt optimizasyon değeri #opt 5 // 1332 adet assembly koduna karşılık gelir #opt 9 // 1327 adet assembly koduna karşılık gelir