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; }







Zitieren

Lesezeichen