Hi.
Ich habe ein Problem.
Mein Uart geht im Echobetrieb ohne Probleme.
Also das was ich dem µC sende, kommt auch zurück.
Nur wenn ich noch etwas wie im Codebeispiel senden will dann kommt das
nicht an.
Es tut sich einfach nix am Empfänger.
Hat jemand eine Idee?
1 | #include <avr/io.h>
|
2 | #include <stdint.h>
|
3 |
|
4 | #ifndef F_CPU
|
5 | #define F_CPU 4000000
|
6 | #endif
|
7 | #define UART_BAUD_RATE 9600
|
8 | #define UART_BAUD_CALC(UART_BAUD_RATE,F_OSC) ((F_CPU) /
|
9 | ((UART_BAUD_RATE)*16L)-1)
|
10 |
|
11 | unsigned char get;
|
12 |
|
13 | void uart_putc(uint8_t c)
|
14 | {
|
15 | while (!(UCSRA & (1<<UDRE)));
|
16 | UDR = c;
|
17 | }
|
18 |
|
19 | int main(void)
|
20 | {
|
21 |
|
22 | UCSRB |= (1<<TXEN); //Transmitter Enabled
|
23 | UCSRC |= (1<<URSEL) | (3<<UCSZ0); //Asynchron 8N1
|
24 |
|
25 | UCSRB |= (1<<RXEN); //Emfpang enabled
|
26 |
|
27 | UBRRH=(uint8_t) (UART_BAUD_CALC(UART_BAUD_RATE,F_CPU)>>8);
|
28 | UBRRL=(uint8_t)UART_BAUD_CALC(UART_BAUD_RATE,F_CPU);
|
29 |
|
30 | DDRB = 0xFF;
|
31 | PORTB = 0xFF;
|
32 |
|
33 |
|
34 | while (!(UCSRA & (1<<UDRE)));
|
35 | UDR = 'h';
|
36 |
|
37 | while(1)
|
38 | {
|
39 |
|
40 | while(!(UCSRA & (1<<RXC)))
|
41 | {
|
42 | PORTB = ~get;
|
43 | }
|
44 | get = UDR;
|
45 | uart_putc(get);
|
46 |
|
47 | //WARUM SENDET ER DAS NICHT?
|
48 | uart_putc('T');
|
49 | //WARUM SENDET ER DAS NICHT?
|
50 |
|
51 |
|
52 | }
|
53 | }
|