Timer0 frekans metre ccsc compiler. %1 %2 kayıpla doğru ölçüm yapıyor. program içindeki delay ile doğru sonucu elde edebilirsiniz. Çeşitli programlarda kullanabilirsiniz.
#include <12f683.h>
#fuses INTRC_IO,NOWDT,PUT,NOPROTECT,noMCLR
#use delay(internal=4M)
#use RS232(baud=9600,xmit=pin_a4)
int8 lc=0; //Timer0 kesintisinden döngü sayacı
int16 f=0; //frekans
int8 tc=0; //timer0 sayıcı
#int_timer0 //timer0 kesme
void isr_timer0(void) { //256 sayılık döngü sayısı
set_timer0(0);
lc=lc+1; //Timer0 girişinin (1 sayı=1 Hz )
}
//================================
void main()
{
setup_comparator(NC_NC_NC_NC); //disable comaparators
setup_adc_ports(NO_ANALOGS); //disable ADC pinler
setup_timer_0 (RTCC_DIV_1 | RTCC_EXT_L_TO_H); //ön ölçekleyici yok, harici kaynak, yükselen kenar
set_timer0(0);
enable_interrupts(GLOBAL); //enable interrupts
while(TRUE)
{
lc=0; //Döngü sayıcı
tc=0; //timer0 sayıcı
f=0; //frekans
set_timer0(0); //ön ayar timer0
enable_interrupts(int_timer0); //timer0 için yazılım 'başlangıç'
delay_ms(985); //1 saniye bekleme
disable_interrupts(Int_timer0); //timer0 için yazılım 'sonu'
tc=get_timer0(); //get tiemr0 değer
f=(lc*256) + tc; //hesaplama frequency
printf("Dongu:lc %u Timer:tc %u frekans: %lu \n\r",lc,tc,f );
}
}
Hiç yorum yok:
Yorum Gönder
Her yorum bilgidir. Araştırmaya devam...