ccs ile timer0 kesmesi

sfarbac

Üye
Katılım
27 Kas 2012
Mesajlar
24
Puanları
1
Yaş
32
CCS c de,timer0 kesmesi için ayarlamaları yaptıktan sonra her kesme geldiğinde kesmenin geldiğini anlamak için d0 pinindeki ledi yakıp söndürüyorum.Fakat while(1) içinde adc(); fonksiyonunu çağırdığımda kesme hiç oluşmuyor yani led yanmıyor.Analog okuma için yaptığım ayarlamaları sildiğimde veya adc(); fonsiyonunu while(1)içinde devre dışı bıraktığım zaman kesme oluşuyor nedenini anlayamadım, yardımcı olursanız sevinrim kodlar şu şekilde;
Kod:
#include <asd.h>
#use fast_io(d)
int i=0,min[8],bilgim;
long deger=0,bilgi[8]={0},max[8];
int16 j,normalize[8];
int32 pozisyon=0,toplam=0;
long adc() {
           for(i=0;i<8;i++){
                       toplam=0;
                       deger=0;
                       set_adc_channel(i);
                       delay_us(20);
                       bilgi[i]=read_adc();
                       }
             for(i=0;i<8;i++){                                    
                        if(bilgi[i]<min[i])
                        normalize[i]=0;
                        else  if(bilgi[i]>max[i])
                        normalize[i]=1023;
                        else
                        normalize[i]=(bilgi[i]-min[i])*(1023/(max[i]-min[i]));
                       // normalize[i] = 1023- normalize[i];                 
                                  }                                           
             for(i=0;i<8;i++){
                               if(normalize[i]>200){
                               toplam =toplam+(normalize[i]*i);
                               deger=deger+normalize[i];
                               } 
                               pozisyon=(toplam*1000/deger);
                               return pozisyon;
             }}
#int_timer0
void  timer0_kesme ()   
{
    set_timer0(60);   
    i++;   
    if (i==20){ 
       output_high(pin_d0);
       }
    if (i==80)  
       {
          output_low(pin_d0);
          i=0;
       }
}
void main()
{
    set_tris_d(0x00); 
    output_b(0x00); 
    output_c(0x00); 
    output_d(0x00); 
    setup_timer_2(T2_DIV_BY_1,255,1);
    setup_adc_ports(ALL_ANALOG);
    setup_adc(ADC_CLOCK_INTERNAL); 
   setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256); // Timer0 ayarları yapılıyor
   set_timer0(60);   // TMR0 değeri belirleniyor
   enable_interrupts(INT_timer0); 
   enable_interrupts(GLOBAL); 
     while(1){
      //adc();
}
 }
 
Moderatör tarafında düzenlendi:
Kesme gerçekleşiyor ama siz i değişkenini bir taraftan adc() fonksiyonunda for döngüsünde, bir taraftan da kesme fonksiyonunda led yakıp söndürme için sayac olarak kullanıyorsunuz.
i hiçbir zaman 20 sayısına ulaşamadığı için kesme fonksiyonunda led yanmıyor.
Kesmede sayaç olarak başka değişken tanımlayıp kullanın.
 
cevabınız için çok teşekkür ediyorum.ben kendim yazmama rağmen hiç dikkat etmedim gerçekten tebrik ediyorum.
 

Yeni mesajlar

Forum istatistikleri

Konular
129,800
Mesajlar
930,203
Kullanıcılar
452,597
Son üye
BLacKSTaiNNN

Yeni konular

Geri
Üst