4 Kasım 2012 Pazar

CCS C İle PIC Programlama LED Yakma ve Söndürme Uygulaması

Hamza Öztaş Share:

//http://www.depositericrobotic.com/

#include <16f877.h>  

#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=4000000)
#use fast_io(b)

void main ()
{
   setup_psp(PSP_DISABLED);    
   setup_timer_1(T1_DISABLED);  
   setup_timer_2(T2_DISABLED,0,1);
   setup_adc_ports(NO_ANALOGS);  
   setup_adc(ADC_OFF);          
   setup_CCP1(CCP_OFF);          
   setup_CCP2(CCP_OFF);          

   set_tris_b(0x00);  
   output_b(0x00);
 
   basla:            
   output_high(pin_b0);
   delay_ms(500);    
   output_low(pin_b0);
   delay_ms(500);      
   goto basla;        
}

Arkadaşlar burada Serdar Çiçek tarafından yazılan CCS C İle PIC Programlama kitabındaki bazı uygulamaları    PIC programlamaya yeni başlayan arkadaşlar için anlatmaya çalışacağım umarım faydalı olur.
İlk olarak şunu ifade etmek istiyorum programlama mantığında 1 her zaman giriş, 0 ise çıkışı ifade etmektedir.

Programın başında ilk olarak hangi PIC'i kullancağımızı seçiyoruz, daha sonra fuses komutuyla PIc için geçerli olan konfigürasyon ayarları yazılır. Daha sonra kullandığımız kristal için gerelkli olan osilator frekansı belirtiliyor. Sonraki komutta PIC'in hangi portunu kullanacaksanız  o belirtilir giriş yada çıkış olması farketmez  hangi portları kullnıyosanız onları #use fast_io(a), #use fast_io( ), bu şekilde tanımlamanız gerekiyor. Programdaki void main kısmının hemen altında yer alan kodlar da PIC16F877 mikroişlemcisinin kullanmadığımız diğer özellikleri belirtiliyor, hepsi off ve disabled yapılmıştır.

set_tris_b(0x00); komutuyla b portu komple çıkış olarak ayalanmışır. 0x00'daki 0x hexadecimal sayısını belirtiyor bunu binary olarak düşünürsek 0b00000000 olacaktır bunu hexa çevirirken 4!erli gruba ayırırız ve toplam değer neyse onu yazarız. Buradaki 8 bitlik değer b portundaki her bir bitini temsil ediyor sırasıyla düşünürsek RB7-RB6-RB5-RB4-RB3-RB2-RB1-RB0 0x00' la b portunun tüm bitlerine 0 yaparak portu çıkış olarak atadık.

output_b(0x00) komutu ile b portunun hepsine lojik 0 değerini yükledik yani başlangıç olarak led'i söndürdük, sonra döngünü başlayacağı yere etiket verdik sonarasında ise output_high komutuyla LED'İ lojik 1 yapıp 0.5 sn bekliyip LED lojik 0 yapılmıştır, burada LED 0.5 saniye arayla sürekli yanıp sönecektir.

Tarafından Yayınlandı >> Hamza Öztaş

Hamza Öztaş'ı google plus'ta takip etmek için Google'a tıklayın;
Google+.

11
replies
  1. abi bu devrenin konrtolünü butonla nasıl yaparız butona basınca yanıp sönsün basınca kapansın led acill yardım...

    YanıtlaSil
    Yanıtlar
    1. Merabalar,oncelikle butonu A portunun 0. bitine bagladigimizi dusunursek use fast_io(b) nin altina ayni kod b yerine a yazin daha sonra altina int1 x; yazin daha sonra set_tris_a(0x01); yazin hemen altina da su kodlari ekleyin
      basla;
      x=input(pin_a0);
      output_bit(pin_b0,x);
      goto basla;
      }
      Bunlarin haricinde diger kod daki basladan itibaren son kisma kadar olan yeri silin. Kardes bu yazdigim kod butona badtiginizda yanar elinizi cektiginizde soner eger basinca yanip basinca sonsun dersen if kullanmak gerekir onuda birazdan yazarim ,

      Sil
  2. Suan elimin altinda internet olmadigi icin telden zor oluyo her iki koduda sabah tam bi sekilde yazarim.
    Iyi geceler, iyi calismalar..

    YanıtlaSil
  3. Kod-1
    #include <16f877.h>
    #fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

    #use fast_io(a)
    #use fast_io(b)

    int1 x;


    void main ()
    {
    setup_psp(PSP_DISABLED); // PSP birimi devre dışı
    setup_spi(SPI_SS_DISABLED); // SPI birimi devre dışı
    setup_timer_1(T1_DISABLED); // T1 zamanlayıcısı devre dışı
    setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
    setup_adc_ports(NO_ANALOGS); // ANALOG giriş yok
    setup_adc(ADC_OFF); // ADC birimi devre dışı
    setup_CCP1(CCP_OFF); // CCP1 birimi devre dışı
    setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı

    set_tris_a(0xF1);
    set_tris_b(0x00);

    output_b(0x00);

    basla:
    x=input(pin_a0);
    output_bit(pin_b0,x);
    goto basla;
    }

    YanıtlaSil
  4. hocam pic basic daha kolay sanki c cili ile çok karışık geldi. ne önerirsiniz?

    YanıtlaSil
  5. merabalar, aslında c dili çok kolaydır ve çogu programlama dilinin temelini oluşturduğu için c dilini kesinlikle öğrenmenizi tavsiye ederim. Eğer Projelerinizi CCS C'de yazıyosanız kod içerisinde void main'in altındaki kısımdan settris'e kadar olan ksım project vizardtan otomatik kendi oluşturuyor,geriye cok fazla bişey kalmıyor zaten. Bu arada Arduino ile tanışmadıysanız Arduino ile tanışmanızı da tavsiye ederim, işleriniz çok kolaylaşacaktır. Arduino C temelli açık kaynak kodlu bir kontrolcüdür, projelerinizi çok daha hızlı bir şekilde yapabilirsiniz.
    Kolay gelsin..
    Saygılar.

    YanıtlaSil
  6. elinize sağlik

    YanıtlaSil
  7. Hocam merhabalar, biz ccscde mavi ve yeşil ledleri 1 er sn yakıp söndürdük daha sonra cisimden geçerek dedektöre gelip absorblanma miktarlarını ölçerek arasındaki miktar farkını bulmamız gerekiyor yardımcı olursanız seviniriz. şimdiden teşekkürler

    YanıtlaSil
  8. # byte port_a #use fast_io(a) arasında ne gibi fark var hocam

    YanıtlaSil
  9. Hocam başka değişik orneklerinz var mi biraz zor olabilir bana lazm size zahmet tesekkurler

    YanıtlaSil
  10. PIR SENSÖRÜ İLE DEVRE YAPICAZ HAREKET ALGILGILAYINCA LED YANACAK C++ DA NASIL YAZARIZ HOCAM TEŞEKKÜRLER

    YanıtlaSil

Get Updates in your Email
Complete the form below, and we'll send you our best of articles.

İletişim

© >> |
TOP