Hallo, wenn ich bei dem folgenden Code das _delay_ms rausnehme bekomme ich keinen String mehr zurückgesendet. Woran kann das liegen? Und wieso funktionieren die Abfragennicht?
1 | #define F_CPU 16000000UL
|
2 | |
3 | #define BAUD 19200UL
|
4 | |
5 | #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)
|
6 | #define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))
|
7 | #define BAUD_ERROR ((BAUD_REAL*1000)/BAUD)
|
8 | |
9 | #if ((BAUD_ERROR<990) || (BAUD_ERROR>1010))
|
10 | #error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch!
|
11 | #endif
|
12 | |
13 | #include <avr/io.h> |
14 | #include <util/delay.h> |
15 | #include <avr/pgmspace.h> |
16 | #include <avr/interrupt.h> |
17 | #include "spi.h" |
18 | #include "uart.h" |
19 | |
20 | void uart_gets( char* Buffer, uint8_t MaxLen ); |
21 | |
22 | void main(void) |
23 | {
|
24 | char buffer[20]; |
25 | |
26 | DDRA |= (1 << PA2)|(1 << PA3)|(1 << PA4)|(1 << PA6); |
27 | PORTA |= (1 << PA2)|(1 << PA3); |
28 | |
29 | REMAP = (1<<U0MAP); |
30 | |
31 | uart_init(UART_BAUD_SELECT(BAUD,F_CPU)); |
32 | |
33 | sei(); |
34 | |
35 | while(1) |
36 | {
|
37 | uart_gets(buffer, 20); |
38 | if(buffer[0] != 0x00) |
39 | uart_puts(buffer); |
40 | |
41 | _delay_ms(100); |
42 | |
43 | if(buffer == "A1") |
44 | PORTA &= ~(1 << PA2); |
45 | |
46 | if(buffer == "A0") |
47 | PORTA |= (1 << PA2); |
48 | |
49 | if(buffer == "B1") |
50 | PORTA &= ~(1 << PA3); |
51 | |
52 | if(buffer == "B0") |
53 | PORTA |= (1 << PA3); |
54 | |
55 | }
|
56 | }
|
57 | |
58 | void uart_gets( char* Buffer, uint8_t MaxLen ) |
59 | {
|
60 | uint8_t NextChar; |
61 | uint8_t StringLen = 0; |
62 | |
63 | NextChar = uart_getc(); // Warte auf und empfange das nächste Zeichen |
64 | |
65 | // Sammle solange Zeichen, bis:
|
66 | // * entweder das String Ende Zeichen kam
|
67 | // * oder das aufnehmende Array voll ist
|
68 | while( NextChar != '\n' && StringLen < MaxLen - 1 ) { |
69 | *Buffer++ = NextChar; |
70 | StringLen++; |
71 | NextChar = uart_getc(); |
72 | }
|
73 | |
74 | // Noch ein '\0' anhängen um einen Standard
|
75 | // C-String daraus zu machen
|
76 | *Buffer = '\0'; |
77 | }
|