Pepisoft ich hab grad bisschen Code geschrieben, müsste eigentlich funktionieren kanns aber nicht testen, hab kein srf04.
Code:
// Für ATMega8, benutzt wir Input Capture von Timer1, auf 8Mhz geändert
#include <io.h>
#include <avr/delay.h>
#define US_PORT            PORTD
#define US_PORT_RICHTUNG   DDRD
#define US_PIN             PD7         // Der Pin kommt zum Trigger-Puls Eingang  

unsigned char start_messung(void)
{
    unsigned char wert,wert_in_cm;
	US_PORT|=(1<<US_PIN);     // Trigger-Puls auf high  
	
	// PD6 ist Input Capture Pin beim ATMega8, hier kommt der Echo-Pulse Ausgang hin
	TIMSK|= (1<<TICIE1);           // Input Capture Interrupt enable
	TCCR1B|= (1<<CS11); // Prescaler 8, damit dauert ein Tackt  1 micro sekunden
	
	_delay_us(15);          // Laut Datenblatt Trigger-Puls min 10us auf high
	US_PORT&=~(1<<US_PIN);   // Trigger-Puls Eingang wieder auf low
	while ( !(TIFR & (1<<ICF1 )) ) ;  // Warten bis Echo-Puls Ausgang auf low --> Messung beendet
	wert=172*ICR1/10000;   // wert ist nun in cm  
                TIFR|=(1<<ICF1);  // ICF1 Bit wieder löschen durch schreiben einer logischen 1
	TCCR1B&= ~(1<<CS12) & ~(1<<CS11) & ~(1<<CS10);     // Timer wieder aus 

   return wert;
}


void main (void)
{
    unsigned char wert;
	US_PORT_RICHTUNG|=(1<<US_PIN);         // US_PIN auf Ausgang
    wert=start_messung();
}
Gruß Muraad

EDIT: Mir ist grad noch was aufgefallen. Wenn er garkein Echo empfängt also kein Objekt vor dem Sensor ist bleibt er durch die Zeile
while ( !(TIFR & (1<<ICF1 )) ) ; // Warten bis Echo-Puls
glaub ich in einer Endlosschleife. Besser währe es mit der Funktion nur die Messung zu starten, um auf das Input Capture Signal zu "warten" sollte man aber den Interrupt SIG_INPUT_CAPTURE1 verwenden.