hier ist der code:
Code:
#include <inttypes.h> 
#include <avr/io.h> 
#include <avr/delay.h> 
#include <avr/interrupt.h> 
#include <avr/signal.h>
#include <string.h> 
#include <delay.c>   // das unterprogramm warte
#include <stdint.h>

#define READ  1 
#define WRITE 2 

#define USART_BAUD_RATE 	19200 
#define USART_BAUD_SELECT 	(F_CPU/(USART_BAUD_RATE*16l)-1) 

#define US_PORT  PORTD 
#define US_PORT_RICHTUNG   DDRD 
#define US_PIN  PD7         // Der Pin kommt zum Trigger-Puls Eingang  


void usart_init(int Enable, int Interupts) 
{ 
     if (Enable & READ)         UCSRB = (1<<RXEN); 
     if (Enable & WRITE)       UCSRB |= (1<<TXEN); 

    if (Interupts & READ)      UCSRB |= (1<<RXCIE); 
    if (Interupts & WRITE)     UCSRB |= (1<<TXCIE); 
    UBRRL = (unsigned char) USART_BAUD_SELECT; 
} 

void usart_writeChar(unsigned char c) 
{ 
    while (!(UCSRA & (1<<UDRE))) {} 
    UDR = c; 
    while(!(UCSRA & (1<<TXC))) {} 
} 

void usart_writeString(unsigned char *string) { 
    while (!(UCSRA & (1<<UDRE))) {} 
     while ( *string) 
    usart_writeChar(*string++); 
} 

uint8_t start_messung(void) 
{ 
   uint8_t 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) & ~(CS10);     // Timer wieder aus 

   return wert; 
} 

int main (void) 
{   
    US_PORT_RICHTUNG|=(1<<US_PIN);         // US_PIN auf Ausgang            
    char s[10];
    uint8_t wert_1; 
    usart_init( (READ + WRITE) , READ); 

   for (;;) {
	
    wert_1=start_messung(); 

    itoa( wert_1, s, 10);
    usart_writeString(s);
    usart_writeString("\n\r");
    warte(20000);

 	}
}
vielen dank für deine mühe.
mfg pebisoft