ccs ile timer0 kesmesi

sfarbac

Üye
Katılım
27 Kas 2012
Mesajlar
24
Puanları
1
Yaş
31
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.
 

Forum istatistikleri

Konular
128,164
Mesajlar
915,595
Kullanıcılar
449,927
Son üye
yusuf2023

Yeni konular

Geri
Üst