Ich hab mir deinen code jetzt nicht genauer angeschaut aber vielleicht hilft dir der code den ich mal für einen hc-sr04 (fake von srf04) geschrieben habe weiter. Die Trigger zeit musst du vermutlich ändern, der rest dürfte so funktionieren....

Code:
/******
atmega32@16MHZ
******/

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdlib.h>

 #include <lcd.h>  

volatile uint16_t timestamp_last = 0;
volatile uint16_t zeit = 0;

/*Messung starten*/
void trig(void)
{
  PORTC |= (1<<PC5);//Trig high
  _delay_us(12);
  PORTC &= ~(1<<PC5);//TRIG auf low
}



ISR(TIMER1_CAPT_vect)
{
  //Wenn steigende Flanke
  if(TCCR1B & (1<<ICES1))
  {
    //Flankenerkennung auf fallend
    TCCR1B ^= (1<<ICES1);
    //aktuelen timer-wert speichern
    timestamp_last = ICR1;
  }
  //fallende Flanke
  else
  {
    //Flankenerkennung auf steigend
    TCCR1B ^= (1<<ICES1);
    //Laufzeit = aktueller timerwert - vorheriger timerwert
    zeit = ICR1 - timestamp_last;
  }
  
}


int main(void)
{
  DDRC |= (1 << PC5);//Trig als Ausgang
  PORTC &= ~(1<<PC5);//TRIG auf low
  
  DDRD &= ~(1<<PD6);//Echo als Eingang
  PORTD &= ~(1<<PD6);//ECHO pullup AUS

  lcd_init(LCD_DISP_ON);
  
  lcd_puts("US Test");
  lcd_gotoxy(0,1);
  
  //Timer konfigurieren
  TCCR1A = 0;                      // normal mode, keine PWM Ausgänge
  //Noise Canceler aktivieren, Flankenerkennung auf steigende, Prescaler auf 64
  TCCR1B |= (1<<ICNC1) |       (1<<ICES1) |                     (1<<CS11) |(1<<CS10);
  
  //ICP Interrupt aktivieren
  TIMSK |= (1<<TICIE1);
  
  //Globale Interrupts aktivieren
  sei();

  while(1)
  {
    //Entfernung aus Laufzeit berechnen
    zeit = (zeit*4)/58;
    
    lcd_puts("                 ");
    lcd_gotoxy(0,1);
    lcd_put_uint16(zeit);
    lcd_gotoxy(0,1);

    //Messung auslösen
    trig();

     _delay_ms(50); //mit dem start der nächsten messung warten bis signal zerstreut
  }
   
   return 0;
}