int k;
void TIMER1_isr(void)
{
k=0;
}
void main()
{
setup_psp(PSP_DISABLED);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_ccp1(CCP_CAPTURE_DIV_4);
setup_CCP1(CCP_CAPTURE_RE);
setup_CCP2(CCP_PWM);
setup_timer_2(T2_DIV_BY_16,7,1);
set_pwm2_duty(7);
set_tris_a(0xFF);
set_tris_b(0x00);
set_tris_c(0x04); // RC2 giriş RC1 çıkış
lcd_init();
printf(LCD_PUTC, "\f Sonar Test");
delay_ms(1000);
enable_interrupts(GLOBAL);
while(1)
{
output_high(trig);
delay_us(250);
output_low(trig); // 250us suresince 40khz gönder.
enable_interrupts(INT_TIMER1);
set_timer1(0); // Timer başlasın
k=1;
while(!input(ECHO) && k); // Echo pini 1 volt olmadıysa ve timer overflow olmadıysa burda bekle
time=get_timer1(); // Hemen timeri okuyalım, nolur nolmaz.
disable_interrupts(INT_TIMER1); // Birşey oldu, interruptları durdur.
if (k==0) {
printf(LCD_PUTC, "\fSINYAL BULUNAMADI"); // overflow olmuş, ekoyu yakalayamadık.
goto son; // Hesap yapmaya gerek yok, yeni puls göndermek lazım.
}
// Echo gelmiş, o zaman hesap yapalım.
distance=time/38; // Mesafe hesapla cm olarak
printf(LCD_PUTC, "\fTime : %Lu \nDistance : %Lu",time,distance);
son:;
delay_ms(200);
}
}