CCS C VE PIC 16F877 YÜRÜYEN IŞIK

CCS C dili ile yazılmış ve PIC 16F877 mikroişlemcisi kullanılmış bir yürüyen ışık uygulaması. Uygulamada 8 adet led kullanıldı.

Uygulamada asıl amaç led yakıp söndürmekten çok mikroişlemci yazılımına hakim olmak. Önce tek ledi yakıp söndüren uygulama örneği verdik, sonrasında ise bu ledi buttona bağladık. Daha sonra 8 ledi yakıp söndüren bir uygulama örneği verdik. Bu şekilde gelişerek devam edecektir.



PIC uygulamalarında her bir porta tek tek hakim olabilmek gerekir. Örneğin B portunda 8 adet pin (bacak) var . Bu pinlerin hangisi 1, hangisi 0 olacak. Bunu integer değişkenine saysal olarak bildirmek istersek her bir durum için oluşan ondalık sayının 2 lik düzendeki karşılığını bilmemiz veya hesaplamamız gerekecektir. Ancak bu değerleri binary biçiminde verirsek her seferinde hesap yapmaktan kurtuluruz.

 Örneğin B portunun 3. Pinini 1 yapmak istiyoruz, bunu nasıl yaparız.

1. Yol

      int light = 4;
output_b(light);

Yukarıdaki örnekte 00000100 dizilimini B portuna göndermiş olduk. Birde şöyle deneyelim.

2. Yol

      output_b(0b00000100);

Yukarıdaki örnekte int değişkenine ondalık değer atamadan port çıkışlarını düzenledik.

      int light =4;
light=light<<1;
output_b(light);

Yukarıdaki örnek integer değişkeninin bitlerini 1 sıra sola kaydırdı. Light değişkeninin yeni sıralaması şu şekilde oldu.

light = 0b00001000 oldu, çünkü 1 olan biti 1 birim sola kaydırdık. light değişkeninin yeni ondalık karşılığıda 8 oldu.


Devre Şeması



Program Kodları

      #include <16F877.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD 
#use delay(clock=4000000)   
void main()
{
   while(TRUE)
   {
      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);   
      int light=1;
      
   while(TRUE)
   {
   
         for(int x =0; x<8;x++)
           {
           output_b(light);
            light=light<<1;
            delay_ms(100);
            
           }
           light=0b10000000;
           
               for(int k=0; k<7;k++)
               {
                  light=light>>1;
                  output_b(light);
                  delay_ms(100);
               }
           
           
           light=1;
    
     
     
   }
   }
}


PIC İLE 3 ADET DİSPLAY SÜRME

PICLER ARASI HABERLEŞME SİSTEMİ




SANATSAL BİLGİ

25/10/2016



 

  • YORUM YAZ
  • ADI SOYADI(veya nick)
  • YORUM

COPYRIGHT© HER HAKKI SAKLIDIR
Sitede Yer Alan Bilgi Belge Ve Materyallerin İzinsiz olarak Kopyalanması ve Alıntılanması Yasaktır

SANATSAL BILGI