Hi,
ich hab das unten angehangene Program auf meinen ATMega32 gefalshed ich bekomme allerdings egal welches zeichen ich sende immer das gleiche zurück (À).
SYSCLK und BAUD sind natürlich angepasst
Code:#include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #define SYSCLK 7372800 #define BAUD 38400UL #define UBRR_BAUD ((SYSCLK/(16*BAUD))-1) /* USART initialisieren */ void uart_init(void); void init(void); int main(void) { /* USART initialisieren */ uart_init(); sei(); /* Nichts tun. Die Interrupts erledigten den Rest */ while (1) ; } void uart_init(void) { /* Baudrate einstellen ( Normaler Modus ) */ UBRRH = (unsigned char) (UBRR_BAUD>>8); UBRRL = (unsigned char) UBRR_BAUD; /* Aktivieren des Empfängers, des Senders und des "Daten empfangen"-Interrupts */ UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN); /* Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit */ UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); } /* Interrupt wird ausgelöst sobald neue Daten im USART-Empfangspuffer liegen */ SIGNAL(SIG_UART_RECV) { unsigned char buffer; /* Daten aus dem Puffer lesen ... */ buffer = UDR; /* ... warten bis der Sendepuffer leer ist ... */ while ( !( UCSRA & (1<<UDRE)) ) ; /* ... und gleich wieder zurück schicken */ UDR = buffer; } void init(void) { DDRB = 0xff; // PortB als Ausgang deklarieren PORTB = 0x00; // Ports auf LOW schalten }







Zitieren

Lesezeichen