CCS-C ile PIC Programlama, Temel C Bilgisi – 1

Önceki yazılarımızda PIC Mikro denetleyicilerinin ve CCS-C derleyicisinin genel bir tanıtımını yapmıştık. Sıra geldi temel C anlatımına. CCS-C derleyicisi ile kod yazabilmeniz için temel seviyede C bilgisine sahip olmanız gerekmektedir. Bir çok kişi C dilinin öğrenilmesinin diğer dillere nazaran daha zor olduğunu söylese de bence o kadar da zor değil. Öğrenme isteğiniz nekadar kuvvetli ise o derece çabuk öğrenebilirsiniz.

Temel C bilgisi anlatımını üç yazı olarak planladım;

  • Genel yazım kuralları (Syntax)
  • Değişkenler , veri yapıları ve operatörler
  • Kontrol yapıları ve fonksiyonlar

İlk C dersimize başlıyoruz…

C Dili Genel Yazım Kuralları

Öncelikle aşağıdaki örnek koda bir göz atıyoruz

#include 
main()
{
printf(“Merhaba Yalan Dünya”);
}

Yukarıdaki kod basit bir C programı örneğidir. Program çalıştığında ekrana “Merhaba Yalan Dünya” yazar ve sonlanır. Şimdi örnekte gördüklerinizi anlatalım

#include direktifi: Bu direktif koda başka bir dosya dahil etmek için kullanılır

#include <;stdio.h>; satırı stdio.h dosyasının programa dahil edileceğini belirtir. C derleyicilerinde standart header (başlık) dosyalarının bulunduğu “include” isminde bir klasör vardır. Bu header dosyalarında kullanıma hazır fonksiyonlar ve bazı tanımlamalar bulunur. Örneğin “math.h” dosyasında sinüs hesabı yapan sin() fonksiyonu vardır. Siz kodunuzda sinus hesaplatacaksanız #include
direktifini vermeniz gerekecektir, bu direktifi vermezseniz derleyici sin() fonksiyonu tanımlı değil diye hata verir. Bir tamirci düşünün bir eve musluk tamirine gidecek, diyorki arabaya takım çantasını koyayım zira ingiliz anahtarı o çantada. İşte tamircinin çantasını header dosyası gibi düşünebilirsiniz.

#include direktifinden sonra dosya adını “;” simgeleri arasına yazarsak, derleyici “include” klasöründe o dosyayı arar ve bulursa koda dahil eder, aksi takdirde hata verir. #include direktifinden sonra dosya adı “ “ yani çift tırnak arasına yazılırsa, derleyici o dosyayı projenin kendi klasöründe arar. Aşağıdaki örnekleri inceleyiniz

#include

Derleyicinin include klasöründeki stdio.h dosyasını koda dahil et.

#include “lcd.h”

Proje klasörümüzdeki lcd.h dosyasını koda dahil et.

#include “c:projedeneme.h”

C:proje Klasöründeki deneme.h dosyasını koda dahil et.

main()

Bütün C programlarında main() fonksiyonu olmak zorundadır. Bu fonksiyon programın ana fonksiyonudur ve program bu fonksiyondan itibaren çalışmaya başlar, Kodunuzun hepsini main() fonksiyonu içerisine yazmak zorundasınız diye bir kural yok ilerde de göreceğiniz gibi kendi fonksiyonlarınızı main() dışarısında veya başka bir dosyada tanımlayıp main() içerisinden çağırabilirsiniz. Main fonksiyonu, takip eden { ile başlar ve } ile sonlanır.

Satır Sonlandırma

C’de tüm kod satırları ; ile sonlandırılmalıdır. Sadece # ile başlayan direktifler, kontrol yapıları ve fonksiyon prototiplerinde “;” karakteri yazılmaz.

Kod içerisine açıklamalar koymak

Yazdığınız program içerisine açıklayıcı yazılar koymak isterseniz aşağıdaki kurallar uymanız gerekir.

// ile başlayan yazılar ve /* */ karakterleri arasına yazılan her şey derleyici tarafından açıklama yazısı olarak algılanır. Aşağıdaki kullanım örneklerini inceleyin lütfen

#include “lcd.h”     // lcd.h dosyasını koda dahil et, bu bir açıklama yazısı
#include

// bu da bir açıklama yazısı
/*
Buraya yazılanlar da
açıklama yazılarıdır
*/
main()
{
/* main fonksiyonu başlangıcı , açıklama satırı */
int a,b,c;
a = b + c;   // b ile c yi topla sonucu a’ ya aktar
b = 2 * a;
}

Türkçe Karakterler

C dilinde “ğ,ü,ş,i,ö” gibi Türkçe karakterleri kullanamazsınız. Değişkenler veya fonksiyonlar tanımlanırken bu kurala dikkat edilmelidir.

Değişkenlere İsim Verme

Değişkenlere daha ayrıntılı olarak bir sonraki yazımızda değineceğiz, şimdilik değişken tanımlarken dikkat edilmesi gereken yazım kurallarına (Syntax) değinelim.

Değişkenlerin ilk karakteri alfabedeki harfler veya _ (alt çizgi) karakteri olmalıdır. Sonraki karakterler tamamen rakam olabilir.

Örnek:

int değişken;  // yanlış kullanım
int degisken; // doğru kullanım
int _degisken12 // doğru kullanım
int degisken1 // doğru kullanım
int 1degisken // yanlış kullanım
int a12345 // doğru kullanım

Değişken tanımlanırken arada boşluk bırakılmamalıdır. Boşluk yerine _ karakteri kullanılabilir.
int dongu sayaci // yanlış kullanım
int dongu_sayaci // doğru kullanım
C dilinin anahtar kelimeleri (if, else, int , case vs.) değişken adı olarak kullanılamaz, derleyici hata verir.
int else; // yanlış kullanım
int _else // dogru kullanım
CCS-C Derleyicisi ön tanımlı olarak büyük küçük harf ayrımı yapmaz.
int X_degiskeni;
int x_degiskeni;

Yukarıdaki iki satırı da kodunuza yazarsanız, ikinci satır için derleyici “x_degiskeni” diye bir değişken zaten tanımlandı diye hata üretir.

İşlem önceliği

C dilinde aritmetik işlemlerin belirli bir öncelik sırası vardır

İlk olarak parantez içerisindeki işlemler yapılır. Çarpma ve bölme yüksek önceliğe, Toplama ve Çıkarma ise düşük önceliğe sahiptir. Önceliği aynı olan iki işlem olduğunda soldakinden itibaren işleme alınır.

Örnekler:

a = b + c * d;

Önce c değeri d ile çarpılır, çarpımın sonucu b ile toplanır.

a = b + c *d – e;

Önce c ile d çarpılır, sonuç b ile toplanır, ve bulunan sonuçtan e çıkarılır.

a = b + c*d/2

Çarpma ve bölme aynı öncelikte olduğu için önce soldakinden yani çarpmadan başlanır. C ile d çarpılıp çıkan sonuç 2’ye bölünür ve b ile toplanır.

Program yazarken bu kurallara dikkat ediniz, işlemlerinizi parantez içerisine alırsanız daha rahat edersiniz.

Örnekler:

a = b + (c*d)/2

a = (b * c )/ (d-e);

Yazımızı burada noktalıyoruz. Bir sonraki dersimizin konusu “Değişklenler, Veri Yapıları ve Operatörler”.

Biraz ağırdan gidiyoruz ama hızlanacağız inşallah :)

CCS-C ile PIC Programlama, Temel C Bilgisi – 1 yazısı için 12 yorum yapıldı

  1. FxDev says:

    Biraz daha hız lazım sanırım =)
    Aslında hızlı ilerlemek isteyen arkadaşlara Kaan Aslan’ın A’dan Z’ye C kitabını almalarını öneririm…
    Genel C’yi anladıktan sonra CCS C çok kolay bir alabiliyor…

  2. Hasan Erdem Yantır says:

    << #include direktifinden sonra dosya adını “” >> olacak sanırım.Bir de “..” şeklinde kullanılırsa projenin klasörüne baktıktan sonra ve bulamazsa include içine de bakar.
    Yazı için teşekkürler.
    5′e geçiyorum:)

  3. teknikim.com says:

    CCS-C Dersleri, Genel C Anlatımı Ders-1…

    CCS C derleyicisinin kullanımına dair temel bilgiler verilmekte. Yazıda genel yazım kuralları (Syntax), değişkenler, veri yapıları, operatörler, kontrol yapıları ve fonksiyonlar üzerinde durulmuş….

  4. [...] – Giriş 02- PIC Mikro Denetleyicilerini Tanıyalım 03- CCS-C Derleyicisi Resimli Anlatımı 04- Genel C Dili Anlatımı Ders – 1 05- Genel C Dili Anlatımı Ders – 2 06- Genel C Dili Anlatımı Ders – 3 07- CCS-C’nin [...]

  5. camby says:

    c programlamaya tamamlayıcı olarak :
    http://www.elektrotekno.com/about47795.html

    Kocaeli Üniversitesi C programlama notları

  6. insane says:

    bir arkadasim c calisiyor ve bana bu siteyi yolladi nasi diye hayatimda gordugum en rezil ogretme sitesi cogu ornek direk kopyalanip yapistirilsa compile bile etmez bilip bilmeden yazip insanlarin kafalarini karistirmayin.

  7. teknobakis says:

    @insane
    hatalarımızı göster de bizde bilelim, eleştirmek kolay nasılsa..

  8. emre özvatan says:

    slm hocam benim bir projem var yrdımcı olabilirmisiniz???

  9. Emrah AYDIN says:

    @emre
    sitenin en altındaki mail adreslerinden birine sormak istediklerini yazabilirsin..

  10. Altan says:

    insanların öğretme isteklerini neden baltalıyorsunuz kardeşim,adam bişeyler anlatmaya çalışıyor burada,senin anlayışın farklı olabilir,ama bence gayet güzel anlatım tarzı.Kitap yazsaydı alırdım öğrenmek için,kendi adınıza konuşun genelleme yapmayın

  11. serdar says:

    hocam bir proje konusunda yardımınıza ihtiyacım var.
    yardımcı olursanız sevinirm.aşağıda verdiğim kodu PWC ile complie etmek istediğmde ilk satırdaki dizinle igili bir hata veriyor bu dizini kendi pc’me göre düzenlediğim halde hu hatayı alıyorum lütfen yardım…
    #include “C:\Users\Desktop\Yeni klasör\16×8 dot matrix kayan yazı\program\kayan.h”
    /******************************************************************/
    /******************************************************************/
    /* DESIGN BY */
    /* MEHMET YURDABAK */
    /******************************************************************/
    /******************************************************************/

    int b,i,a; //döngüler için gerekli değişkenler
    signed kayma;
    int yazi_sutun,yazi1_sutun;//yazının sütün sayısı
    int matris_sutun; //matris sutun

    char metin[]={
    0x7F,0×02,0×04,0×08,0×04,0×02,0x7F,0×00, // M
    0x7F,0×49,0×49,0×49,0×49,0×49,0×49,0×00, // E
    0x7F,0×08,0×08,0×08,0×08,0×08,0x7F,0×00, // H
    0x7F,0×02,0×04,0×08,0×04,0×02,0x7F,0×00, // M
    0x7F,0×49,0×49,0×49,0×49,0×49,0×49,0×00, // E
    0×01,0×01,0×01,0x7F,0×01,0×01,0×01,0×00, // T
    }; // boşluk
    char metin1[]={
    0×01,0×02,0×04,0×78,0×04,0×02,0×01,0×00, // Y
    0x7F,0×40,0×40,0×40,0×40,0×40,0x7F,0×00, // U
    0x7F,0×09,0×19,0×26,0×40,0×00, // R
    0x7F,0×41,0×41,0×41,0×41,0×22,0x1C,0×00, // D
    0×78,0×14,0×12,0×11,0×12,0×14,0×78,0×00, // A
    0x7F,0×49,0×49,0×49,0×49,0×49,0×36,0×00, // B
    0×78,0×14,0×12,0×11,0×12,0×14,0×78,0×00, // A
    0X7F,0×08,0×14,0×22,0×41,0×00, // K
    }; // boşluk

    char kayan[16]; //kayan adında 16 elemanlı sahte dizi oluşturuldu.

    void main()
    {

    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
    setup_timer_1(T1_DISABLED);
    setup_timer_2(T2_DISABLED,0,1);
    setup_comparator(NC_NC_NC_NC);
    setup_vref(FALSE);
    //Setup_Oscillator parameter not selected from Intr Oscillotar Config tab

    // TODO: USER CODE!!

    yazi_sutun=48;//yazinin toplam sutun sayısı belirleniyor
    yazi1_sutun=64; //diğer yazının sutun sayısı belirleniyor
    matris_sutun=16;//kullanılan matrisin sutun sayısı

    for(;;)// sonsuz döngü oluşturluyor
    {

    /******************************************************************/
    /***************Birinci metin yazdırımı****************************/
    /******************************************************************/

    for(kayma=-16;kayma<yazi_sutun;kayma++) // sütün sayısı kadar kayma işlemi gerçekleştiriliyor.
    {
    for(b=0;b<matris_sutun;b++) //kayan adlı dizinin elemanlarını döngü //sayesinde buluyoruz.
    {
    kayan[b]=metin[kayma+b]; // kaydırma işlemi hesaplanıyor
    if(kayma+byazi_sutun)
    kayan[b]=0;
    }

    for(a=0;a<30;a++) //tarama sayısı
    {
    for(i=0;i<matris_sutun;i++) //bulunan değerler teker teker portlara gönderiliyor.
    {
    output_a(i);
    output_b(kayan[i]);
    delay_us(200); //kayma hızı

    } //kaydırma işlemi sonu
    } // portlara gönderme sonu
    } //tarama sayısı sonu

    /******************************************************************/
    /***************İkinci metin yazdırımı****************************/
    /******************************************************************/

    for(kayma=-16;kayma<yazi1_sutun;kayma++) // sütün sayısı kadar kayma işlemi gerçekleştiriliyor.
    {
    for(b=0;b<matris_sutun;b++) //kayan adlı dizinin elemanlarını döngü //sayesinde buluyoruz.
    {
    kayan[b]=metin1[kayma+b]; // kaydırma işlemi hesaplanıyor
    if(kayma+byazi1_sutun)
    kayan[b]=0;
    }

    for(a=0;a<30;a++) //tarama sayısı
    {
    for(i=0;i<matris_sutun;i++) //bulunan değerler teker teker portlara gönderiliyor.
    {
    output_a(i);
    output_b(kayan[i]);
    delay_us(200); //kayma hızı

    } //kaydırma işlemi sonu
    } // portlara gönderme sonu
    } //tarama sayısı sonu
    } //sonsuz döngü sonu
    } // ana program sonu

  12. kubilay says:

    Aradaki boşluklardan dolayı olabilir mi?
    bence o klasörlerin adlarındaki boşlukların yerine _ koy, sonra kod kısmında da _ koy bir dene,
    belki bundan dolayıdır

    C:\Users\Desktop\Yeni_klasör\16×8_dot_matrix_kayan_yazı\program\kayan.h
    gibi

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>