Hier wäre ein Beispiel ohne verwendung von Input Capture oder Externe Interrupts. Also wie du gemeint hast.
Code:
// für 8 Mhz, Timer1(16bit), Prescaler 8, Takt von 1us, Überlauf nach 65535us oder 65,535ms

#include <avr/io.h>
#include <avr/delay.h>

// Das mit PD1 auf PORTD ist nur ein Beispiel, jeder beliebige Pin kann gewält werden
#define    MESS_PORT           PORTD
#define    MESS_PORT_RICHTUNG  DDRD
#define    MESS_PIN            PIND
#define    MESS_BIT            PD1               // Echo-Trigger Eingang  oder einfach Messeingang

#define US_PORT                PORTD 
#define US_PORT_RICHTUNG       DDRD 
#define US_BIT                 PD2               // Der Pin kommt zum Trigger-Puls Eingang


unsigned int zeit_messung_us(void)
{
    unsigned int wert_us;               // Wert in 

	US_PORT_RICHTUNG|=(1<<US_PIN);         // US_PIN auf Ausgang
	US_PORT|=(1<<US_PIN);     // Trigger-Puls auf high  
                      
    _delay_us(15);            // Laut Datenblatt Trigger-Puls min 10us auf high 
    US_PORT&=~(1<<US_PIN);   // Trigger-Puls Eingang wieder auf low   
	
	// Wenn keine srf04 Messung dann einfach ab hier
	TCNT1=0;                   // Timerregister  auf 0
	TCCR1B|= (1<<CS11);;      // Timer starten
	while ( MESS_PIN & (1<<MESS_BIT));     // Warten bis Echo/Mess Eingang auf low
	wert=TCNT1;
	TCCR1B&= ~(1<<CS11);     // Timer wieder aus    
    	return wert;
}
Gruß Muraad