Derleyicide RPM hesabı mantığı

Ezbere iş yapmışsın hiç mantık işletmemişsin.
 
Kod:
#use delay(clock=20000000)

int32 devir=0;
int32 sayac=0;
int32 rpm;


#int_ext
void ext_kesmesi()
{
 devir++;
}


#int_timer1
void timer1_kesmesi()
{
set_timer1(3035); //0.2us X 8 X 62500(65535-3035) = 0.1 sn 
sayac++;
}




void main()
{


   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
   setup_timer_2(T2_DISABLED,0,1);
   
   
   if(sayac==10) //10 tane timer1 kesmesi olunca 1 sn süre geçiyor.
   {
    rpm=devir*60; 
    devir=0; //1 sn geçince devir sıfırlanıyor.
    sayac=0; //1 sn geçince sayaç sıfırlanıyor.
    
   }
Peki hocam bu nasıl ?
 
#use delay(clock=20000000)

char pals=0,bitti=0;
unsigned int sure=0;
float rpm;




#int_ext
void ext_kesmesi()
{

if(pals==0) set_timer2(0); // ilk pals başlangıc


if(pals==10) {
sure=get_timer2(); // geçen zaman
disable_interrupts(INT_EXT); // okuma bitti kesmeye gerek kalmadı
bitti=1;



}

pals++; // her turda pals artırılır

}






void main()
{




setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
// setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
setup_timer_2(T2_DISABLED,0,1); // bu 1 sn civarında ayarlanacak

enable_interrupts(INT_EXT);

enable_interrupts(GLOBAL);





While(1)
{


if(bitti) //10 tur sayıldı
{

zaman=(float) sure/65536; // timer2 ye göre ayarlanacak

rpm=600.0/zaman;


printf ("%d",rpm);
pals=0;
bitti=0;
enable_interrupts(INT_EXT);
}
}

} // BU TARZ BİRŞEY OLMALI INCE AYAR LAZIM
 
Teşekkürler hocam yardımlarınız için. Yazdım programı sonunda


KontrolKalemi Mobile ile gönderildi.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…