Hallo,
kann mir einer helfen ich bin kurz vorm verzweifeln.
Ich möchte, wenn ein Zeichen über USART emfangen wurde, per Interrupt
ein Zeichen zurück gesendet bekommen, allerdings geht das nicht.
Wieso auch immer ka.
1 | #define F_CPU 16000000UL
|
2 |
|
3 | #include <avr/io.h>
|
4 | #include <avr/interrupt.h>
|
5 | #include <util/delay.h>
|
6 | #include <stdlib.h>
|
7 |
|
8 | //USART initialisieren
|
9 | void USART0_Init (int BaudRate)
|
10 | { int ubrr0 = (F_CPU / 16 / BaudRate - 1); // Baudrate UART0 einstellen
|
11 |
|
12 | UBRRH = (unsigned char)(ubrr0>>8);
|
13 | UBRRL = (unsigned char)ubrr0;
|
14 |
|
15 | UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); // UART0 Frame Format einstellen: 8data, 1 Stop-bit, keine Parity
|
16 | UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE); // UART0 Receiver und Transmitter einschalten inturrupt RXC eingeschaltet
|
17 | }
|
18 |
|
19 | //Prüfen, ob Zeichen empfangen wurde, dann Rückgabe, ansonsten Rückgabewert -1
|
20 | int16_t USART_Receive (void)
|
21 | { //prüfen, ob Zeichen empfangen wurde
|
22 | if (UCSRA & (1<<RXC))
|
23 | { return (UDR);
|
24 | }
|
25 | else
|
26 | { return (-1);
|
27 | }
|
28 | }
|
29 |
|
30 | //Zeichen senden
|
31 | void USART_Transmit( unsigned char data )
|
32 | { /* Wait for empty transmit buffer */
|
33 | while ( !( UCSRA & (1<<UDRE)) );
|
34 | {
|
35 | /* Put data into buffer, sends the data */
|
36 | UDR = data;
|
37 | }
|
38 | }
|
39 |
|
40 | /Gibt eine Zeichenkette mit maximal 29 Zeichen aus (realisiert mit char-Array)
|
41 | void USART_String_ausgeben (char Zeichenkette [30])
|
42 | { uint8_t i=0;
|
43 |
|
44 | while (Zeichenkette [i] != 0)
|
45 | { USART_Transmit (Zeichenkette [i]);
|
46 | i++;
|
47 | }
|
48 | }
|
49 |
|
50 | ISR(USART_RXC_vect)
|
51 | {
|
52 | USART_String_ausgeben("empfangen");
|
53 | USART_Transmit (13);
|
54 | }
|
55 |
|
56 | int main(void)
|
57 | {
|
58 | //Usart mit 9600 baud initalisieren
|
59 | USART0_Init(9600UL);
|
60 | sei();
|
61 | }
|
Gruß geist