pic nasıl programlanır etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

PİC PROGRAMLAMA-11

Merhaba arkadaşlar.Bügün CAPTURE(YAKALAMA) MODU uygulamasını yapacagız.Capture birimi aynı timer birimlerinde kullanıldıgı gibi sayıcı olarak kullanılmaktadır.Tek farkı kod kalablıgından bizi kurtarmaktadır.
Capture modunda RC1 ve RC2 pinine gelen sinyale göre degerlendirilir.Bunlardan herhangi birisine sinyal geldiginde TMR1 kaydecisi içerigi CCPRxH;CCPRxL içerigine aktarılır ve bir kesme meydana gelir.İkinci bir yakalama olayı meydana geldiginde o anki TMR1 degeri içerigi tekrardan aktarılır,eski CCPRxH;CCPRxL nin eski degerleri silinmiş olur.
-Sinyalin her düşen kenarında (ccp_capture_fe)
-Sinyalin her yükselen kenarında (ccp_capture_re)
-Sinyalin her 4 yükselen kenarından sonra (ccp_capture_div_4)
-Sinyalin her 16 yükselen kenarından sonra (ccp_capture_div_16)

Gelelim kod kısmına;


#include <main.h>
int i=0;
#int_ccp1//CCP1 KESMESİ
void yak() {i++;//i degeri birer birer arttırılıyor
output_b(i);//i degişkeni b portuna gönderiliyor
if(i==16)//i degişkeni 16 ya eşit ise
{i=15;//i yi 15 yap
output_b(i);//i degişkenini b portuna gönder
}}
#int_ccp2//CCP' KESMESİ
void sondur(){i--;//i degişkenin bir azalt
output_b(i);//i degişkenini b portuna gönder
if(i==0)//ii degişjenini kontrol et
{i=1;//i ye 1 degerini ata
output_b(i);//i degişkenini b portuna gönder
}}
void main()
{setup_ccp1(ccp_capture_re);//CCP1 kesmesi ayarlaması
setup_ccp2(ccp_capture_re);//CCP2 kesmesi ayarları
enable_interrupts(int_ccp1);//ccp1 kesmesi aktif ettik
enable_interrupts(int_ccp2);//ccp2 kesmesini aktif yaptık
enable_interrupts(global);//aktif yapılan kesmelere izin verdik
set_tris_b(0*00);//b pinlerinin çıkış oldugu ifade edildi
set_tris_c(0xff);//c pinlerinin giriş olacagı ifade edildi
output_b(0*00);//b çıkışımızı sıfırladık
ccp_1_high=0*00;ccp_1_low=0*00;//CCP1 kaydedicimizin içerigini sıfırladık
ccp_2_high=0*00;ccp_2_low=0*00;//CCP2 kaydedicimizin içerigini sıfırladık

   while(TRUE)
   {
      //TODO: User Code
   }

}

PİC PORGRAMLA-10

Merhaba arkadaşlar.Bügünkü dersimizde Timer0 kesmesi ne demek onu anlatmaya çalışacagım.Diyelim ki güzel bir film izliyorsunuz.Filmin en heyecanlı yerinde telefonunuz çaldı.Filminizi durdurup telefonunuza bakarsınız.Ardından kaldıgınız yerden filminizi izlemeye devam edersiniz.Kesme olayıda aynen bu mantık üzeine çalışmaktadır. Kesme sinyali geldigi anda ana program çalışmayı bırakıp kesme de yapılacak olan işlemlere gidiyor ve onları icra ediyor.Ardından tekrardan ana programa geri dönüyor.16F877  ait kesme örnekleri;
1)RB0 kesmesi
2)RB4-RB7 pinlerindeki degişiklik kesmesi
3)Timer0 birimi taşma kesmesi
4)Timer1 birimi taşma kesmesi
5)Timer2 birimi taşma kesmesi
6)A/D çevirimi yapıldıgında meydana gelen kesme
7)CCP1 modulu kesmesi
8)CCP2 modulu kesmesi
9)Paralel porttan veri geldiginde oluşan kesme
10)Seri porttan veri geldiginde oluşan kesme

   setup_timer_0(RTCC_EXT_H_TO_L | RTCC_DIV_2); // Timer0 ayarları yapılıyor.
//RTCC_EXT_H_TO_L=+5 volttan 0 volta düşünce olacak
//RTCC_EXT_L_TO_H=0 volttan +5 volta çıkınca olacak olan kesme
//RTCC_INTERNAL=Denetleyicinin çalışma frekansı olacak
//RTCC_DIV_2=bölme oranın ifade eder(2,4,8,16,32...256 olarak yazılabilir)
   set_timer0(254);   // TMR0 değeri belirleniyor
   enable_interrupts(INT_timer0); // int_timer0 kesmesini aktif yapar
   enable_interrupts(GLOBAL);     // Aktif edilen kesmelere izin ver

Gelelim kod kısmına; 

#include <16f877.h>    
int sayi=0;
#int_timer0  // Timer0 kesmesi
void  timer0_kesme ()   // Kesme fonksiyonu ismi
{
      set_timer0(254);   // TMR0 değeri belirleniyor
       sayi++; // sayi değeri 1 arttrılıyor
      output_b(sayi);   // sayi değeri B portuna gönderiliyor

}
void main ( )
{
   setup_psp(PSP_DISABLED);       
   setup_spi(SPI_SS_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_a(0x10); // RA4 pini giriş
   set_tris_b(0x00);   // B portu komple çıkış
   output_b(0x00);     // B portu çıkışı ilk anda sıfırlanıyor
   setup_timer_0(RTCC_EXT_H_TO_L | RTCC_DIV_2); // Timer0 ayarları yapılıyor
   set_timer0(254);   // TMR0 değeri belirleniyor
   enable_interrupts(INT_timer0); // int_timer0 kesmesini aktif yapar
   enable_interrupts(GLOBAL);     // Aktif edilen kesmelere izin ver
   while(true);   // Sonsuz döngü

 }
PİC PROGRAMLAMA-9
Merhaba arkadaşlar.Bugünkü dersimizde lcd ile kayan yazı yazmayı ögrenecegiz.Şekilde görüldügü gibi devremizi oluşturalım.
Ve kod kısmına geçelim :
#include <main.h>
#define use_portb_lcd true
#include<lcd.c>
int sayi,i;
void main()
{
   while(TRUE)
   {
      for(i=0;i<40;i++)//40 karekterlik döngü
      {
      lcd_gotoxy(1,1);//imlece 1.satır 1. stüna getirir
      lcd_send_byte(0,0x1c);//karekteri sola kaydırır
      printf(lcd_putc,"http://elektro-blogger.blogspot.com.tr/");//ekrana yazırılacak yazı
      delay_ms(250);
      }
   }

}
Not:lcd_send_byte(0,0x18) komutu ise lcd ekranında yazımızı saga kaydırmanıza yarar

ELEKTRO BLOGGER A HOŞGELDINIZ

ARAMA YAP

EN COK OKUNANLAR

- Copyright © ELEKTRO-BLOGGER Blogger