CCS C alıştırma Turlarım

Başlatan Mucit23, 10 Şubat 2012, 15:29:51

Mucit23

Anladım hocam. Şimdi sorun kalmadı ya ilgilenenlere teşekkürler

pwm.c

Ferhat,
imkanın varsa 4.128 yükle. forumda linki vardı. dier eski versiyonlarda bazı sorunlar yaşadım. örneğin, lcdyi proteusta çalıştırmak için lcd.c kütüphanesinden bazı satırları silmen gerekiyor haberin olsun. yeni versiyonda bunu düzeltmişler.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

Mucit23

 Hocam Şuanda yine 4.124 ü yükledim. Varsa eğer indirebileceğim bir link verebilirmisiniz?

Mucit23


Mucit23

Arkadaşlar. Programda giirş çıkış tanımlamaları yaparken iki adet hata veriyor.
Yazdığım komut budur.
set_tris_b(0x00);
output_b(0x00);

Aldığım hata ise budur. Tanımlayıcıların yapılmadığını söylüyor ama ne tanımlaması yapılacak bilmiyorum.

free image hosting
Fikri olan varmı?

mcn

Hocam o port yönlendirme kodlarını void main() içine yazdınız değil mi?Tüm kodu koyarsanız daha iyi olur.
www.teknikyazi.com --üşenme,erteleme,vazgeçme...

Mucit23

Sorun aynen dediğiniz gibiymiş. Void main() içerisine almamışım. Bilmiyorum hep basic dillerine alıştığım için yapısı bana çok ters geliyor. Alışmam biraz uzun vakit alacak.  Umarım bu başlık altında yazdıklarım, sorduklarım başınızı ağrıtmaz.

omereliusuk

#22
void SystemInit()
{
enable_interrupts(INT_ext);  // INT_EXT kesmesini aktif yapar
   	enable_interrupts(GLOBAL);  // Aktif edilen kesmelere izin ver
   	ext_int_edge(h_to_l);
      SETUP_TIMER_1     (T1_DISABLED);  setup_timer_2     (T2_DISABLED,0,1); // T1 zamanlayıcısı devre dışı// T2 zamanlayıcısı devre dışı
      setup_CCP1   (CCP_OFF); setup_oscillator(OSC_4MHZ);
set_tris_a (0x21);set_tris_b(0x0f);/set_tris_C   (0X03); set_tris_d(0); set_tris_e       (0xff);
      output_a(0);
}

main()
{
systemInit();
      while(true)
      {
       //kodlar..............
       }
}


gibi bir şey yaptım. keil vari bu daha güzel oldu, hatta bunu sevdim. neyi nereye yazdığımı nasıl yazdığımı düşünmüyorum artık.

Mucit23

Alıntı yapılan: omereliusuk - 14 Şubat 2012, 13:04:22
void SystemInit()
{
enable_interrupts(INT_ext);  // INT_EXT kesmesini aktif yapar
   	enable_interrupts(GLOBAL);  // Aktif edilen kesmelere izin ver
   	ext_int_edge(h_to_l);
      SETUP_TIMER_1     (T1_DISABLED);  setup_timer_2     (T2_DISABLED,0,1); // T1 zamanlayıcısı devre dışı// T2 zamanlayıcısı devre dışı
      setup_CCP1   (CCP_OFF); setup_oscillator(OSC_4MHZ);
}

main()
{
systemInit();
while(true)
      {
       }
}


gibi bir şey yaptım. keil vari bu daha güzel oldu, hatta bunu sevdim. neyi nereye yazdığımı nasıl yazdığımı düşünmüyorum artık.

Hocam bu böyle bişeymi oldu

Goto main

Systeminit:
.
.
.
.
.
Return

main:
Gosub Systeminit
while 1=1:wend

End

Basic de bu iş böyle olurdu herhalde

Anlamadığım bir nokta var.
C de kod işleme sırası nasıldır. Mesela Basicde dallanma komutları veya döngü komutlar olmadığı sürece program hep yukarıdan aşağıya doğru işler. Ama C de öyle değil anladığım kadarıyla.

Program herzaman main fonksiyonundanmı koşmaya başlıyor. Yani verdiğiniz örnekte SystemInit fonksiyonu Void main fonksiyonundan üstte olduğu için soruyorum. Dediğim gibi Basic ile C nin yapısı çok çok farklı...

omereliusuk

Alıntı yapılan: Mucit23 - 14 Şubat 2012, 12:50:41
Sorun aynen dediğiniz gibiymiş. Void main() içerisine almamışım. Bilmiyorum hep basic dillerine alıştığım için yapısı bana çok ters geliyor. Alışmam biraz uzun vakit alacak.  Umarım bu başlık altında yazdıklarım, sorduklarım başınızı ağrıtmaz.
sen ne diyorsun. ben bir "gosub" bir de "while(x)" öğreninceye kadar akla karayı seçmiştim (kendim evde öğreniyorum.). basicten geçince çok zor bu konular. ama alışınca yazım meclisten dışarı eşekten uçağa binmiş gibi oldum(basic eşek c uçak oluyor<>).

bir fonksiyonu çağırmak istiyorsan onu çağırmadan önce tanımlamalısın. bu kadar basitmiş. ben de daha önce yazıyorum yazıyorum olmuyor.

gosub (){// main den daha önce tanımlandığı için main buna gidebiliyor.
return (1);}

main()
{
while(1)// şart her zaman doğru olduğu için aradaki işlem sürekli yürütülür.
{
gosub();// gosub fonksiyonuna gider.
}
/// buraya hiç bir zaman ulaşamayacaktır. çünkü şart her zaman doğru olduğu için sürekli gosub fonksiyonuna gidip gelir.
}


umarım yardımcı olmuşumdur.

muhittin_kaplan

Alıntı YapAnlamadığım bir nokta var.
C de kod işleme sırası nasıldır. Mesela Basicde dallanma komutları veya döngü komutlar olmadığı sürece program hep yukarıdan aşağıya doğru işler. Ama C de öyle değil anladığım kadarıyla.

C de program yukardan aşağıya derlenir. Çalışma sırasıda bundan dolayı Yukardan aşağıyadır.

int Toplama(int A,int B) //Toplama Adında bir fonksiyon ve bu fonksiyonda gerekli olan A ve B değerleri
{
          Toplama=A+B              //A ile B yi topla Fonksiyon değeri olarak döndür
}                                            //Fonksiyon Sonu

main
{
int Sonuc  //Sonuc adında integer
Sonuc=Toplama (3,8) //3 iel 8 i toplama fonksiyonuna parametre olarak gönder --Sonuc=8
}

Yazım Hatalı Olabilir işleyişi irdeliyoruz

aslında derlenirken yukardan aşağıya derlenir ama fonksiyon çağrılmadan işletilmez yani Toplama(x,y) yazılmadığı sürece bu program blogu çalışmaz.
Çağrıldığı zaman Basic de olduğu gibi (Gosub) işini yapar ve döner. Ama basic (pic basic proton gibi) de bir altprograma parametre gönderip oradan değer alamazsınız..
(bazı basic dillerinde parametreli fonksiyon ve altprogram çağılabiliyoruz)  

elektronikhobi

C'de ana program int main işlevidir.  C ve C++ için bu işlevin doğrusu void main değil int main'dir. Diğer işlevler ana programdan çağrılabilir.

#include <stdio.h>

void birSeyYap();
void baskaBirSeyYap();


int main()
{
    printf ("ana işlevin içindeyiz\n");
    birSeyYap();
    printf("gene ana programa donduk\n");
}

void birSeyYap()
{
    printf("bir seyler yapiyorum\n");
    baskaBirSeyYap();
}

void baskaBirSeyYap()
{
    printf("baska bir islem yapıyorum\n");
}


Program başlatıldığı zaman ilkönce main işlevinin içinden çalıştırılmaya başlanır. Eğer başka bir işlevi çağırmışsak oradan çalışmaya devam eder. O işlevin içinden de başka bir işlev çağırırsak diğer işlevi çağırır. İşlevin yürütülmesi bittiği zaman ana programa geri döner.

Mucit23

Arkadaşlar çok teşekkür ederim. Şimdi biraz daha yerine oturdu. Fonksiyon oluşturma işini anladım ve Program işleyişini anladım. Şimdi gerçekten hoşuma gitmeye başladı.  :)

justice_for_all

#28
Alıntı yapılan: Mucit23 - 14 Şubat 2012, 14:01:09
Arkadaşlar çok teşekkür ederim. Şimdi biraz daha yerine oturdu. Fonksiyon oluşturma işini anladım ve Program işleyişini anladım. Şimdi gerçekten hoşuma gitmeye başladı.  :)

tabi geri deger dondurmeli bir fonksiyon olusturdugumuz zaman derleyicinin hata vermemsi ve degerin geri donmesi için return eklenir

muhittin hocamın kodunu ornek alırsak

int Toplama(int A,int B) //Toplama Adında bir fonksiyon ve bu fonksiyonda gerekli olan A ve B değerleri
{
          Toplama=A+B              //A ile B yi topla Fonksiyon değeri olarak döndür
           return (toplama);       // veya return (a+b) gibi

}                                            //Fonksiyon Sonu

main
{
int Sonuc  //Sonuc adında integer
Sonuc=Toplama (3,8) //3 iel 8 i toplama fonksiyonuna parametre olarak gönder --Sonuc=8
}
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

oyaz

@Caffeine hocam çok teşekkür ederim yardımınız için.Aynı sorun benim de başıma geldi ama çözdüm sayenizde :)
Become a learning machine...