Hi,
ich möchte zum Testen das Byte, das ich über UART an meinen ATMega16
sende, direkt im RX-Interrupt wieder zurücksenden.
Hier ist der Code:
1 | #ifndef F_CPU
|
2 | #define F_CPU 6000000
|
3 | #endif
|
4 |
|
5 |
|
6 | #define BAUD 14400
|
7 | #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)
|
8 |
|
9 | void uart_init(void)
|
10 | {
|
11 | uint8_t sreg = SREG;
|
12 |
|
13 | UBRRH = (unsigned char)(UBRR_VAL>>8);
|
14 | UBRRL = (unsigned char)UBRR_VAL;
|
15 |
|
16 | UCSRC |= (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
|
17 | UCSRB |= (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
|
18 |
|
19 | SREG = sreg;
|
20 | }
|
Inerrupt Service Request:
1 | ISR (USART_RXC_vect)
|
2 | {
|
3 | static uint8_t temp;
|
4 |
|
5 | temp=UDR;
|
6 | UDR=temp;
|
7 | }
|
In meinem Terminal Programm ist auch die richtige Baudrate eingestellt.
Wenn ich ein Byte sende kommt entweder nur 0x00 oder gar nichts zurück.
Hat jemand eine Idee, wo der Fehler liegt?