31 Mart 2012 Cumartesi

16F628 ile RB0 Kesmesi Oluşturmak

ISIS Simülasyon şeması
Bu uygulamada PIC'in RB0 interrupt(kesme) özelliğini kullanarak, her üç kesmede bir RB7 bacağına bağlı ledi 250ms süre ile yakıp söndürüyoruz. Kesmeler buton ile oluşturuluyor, butona her bastığımızda RB0 bacağına lojik 1 gidiyor ve kesme oluşuyor. Her kesme oluştuğunda a değişkenini bir arttırıyoruz ve ana döngü içinde a'nın üçe eşit olup olmadığını kontrol ediyoruz, eğer a üçe eşitse ledi yakıp söndürüyoruz, ardından a'nın içeriğini sıfırlıyoruz. Devreyi breadboard üzerinde denemedim fakat denenirse de buton debouncing'den dolayı bu haliyle kararsız çalışacağını düşünüyorum. Kodların yanına açıklamalarınıda ekledim.

Program kodları:
#include<16f628.h>                //mcu'yu tanıtıyoruz
#use delay(clock=4000000)         //mcu'nun osilatör frekansını belirtiyoruz f=4mhz
int a;                            //a adında integer tanımlıyoruz
#int_ext                          //harici kesme

void int_hizmet(void)             //kesme geldiğinde yapılacak işlem a'yı bir arttır
   {
      a=a+1;
   }

main()                            //ana döngü
{
   enable_interrupts(GLOBAL);     //tüm kesmelere izin ver
   enable_interrupts(INT_EXT);    //harici kesmeye izin ver
   while(1)                       //sonsuz döngü
   {
      if(a==3)                    //eğer a=3 ise rb7'deki ledi yak söndür
      {
      output_high(PIN_B7);
      delay_ms(250);
      output_low(PIN_B7);
      delay_ms(250);
      a=0;                        //a'nın içeriğini sıfırla
      }
   }
}

Upload yapabileceğim uygun bir yer bulduğumda kod ve simülasyon dosyalarının linkini de ekleyeceğim.

Hiç yorum yok:

Yorum Gönder