Hy

ich habe folgenden Code auf deinem Mega8 laufen. PWM funktioniert auch wunderbar aber jedesmal, wenn ich neue Werte per RS-232 (Hterm in Hex) senden will, bleibt das Prog hängen.

ich finde den Fehler nicht!! könnt ihr mir helfen?


Code:
#define 	F_CPU 8000000UL					// MP-Takt
#include	<avr/io.h>
#include	<stdio.h>
#include	<stdlib.h>
#include 	<inttypes.h>
#include 	<avr/interrupt.h>
#include 	<avr/wdt.h>


#define BAUD     19200UL					//Baundrate definieren

#define UBRR_BAUD  ((F_CPU)/(16*(BAUD))-1)	//Autoberechnung bei Änderung des MP-Takt



char 				out[15];
int 		in 		=  1;
int 		Zahl 	= 15;
long int 	i		=  1;
int 		n 		=  1;
int 		Daten 	=100;


// Ausgaberoutinen

int uart_putc(unsigned char c)
{
  while (!(UCSRA & (1<<UDRE)));

  UDR = c;
  return 0;
}

int uart_puts( char* str )
{
  while( *str )
    uart_putc( *str++ );
	return 0;
}

int wait()
{
for (i=0;i<200000;)
	{
	i=i+1;
	}
}

//	Main-Funktion
int main (void) 
{

//	Programm

// RS232 aktivieren	
	UCSRB   |= (1 << TXEN) | ( 1 << RXEN ) | ( 1 << RXCIE ) ; 				 // UART TX, RX einschalten
 	UCSRC   |= ( 1 << URSEL ) | ( 1<<UCSZ1 ) | ( 1<<UCSZ0 ) | ( 1<<UPM1 ); 	 // Asynchron 8N1, Parity even
 	UBRRH  = (uint8_t) (UBRR_BAUD>>8); 			 // USART Baud
  	UBRRL  = (uint8_t) UBRR_BAUD;

	TCCR1A = (1 << WGM11) | (1 << WGM10) | ( 1 << COM1A1);
	TCCR1B =  ( 1 << CS11) ;
	OCR1A = 0;

	sei(); 	
	DDRB	= 0xFF;

	for (;;) 
	{
		while (!(UCSRA & (1<<UDRE)));
  		UDR 	= Daten;
		OCR1A 	= Daten;
		wait();
		Daten=Daten+20;
	}			
}



ISR(SIG_USART_RECV)
{
Daten = UDR;
}