Hallo Forum, ich habe heute morgen versucht mein Programm zu ordnen. Ich habe mir einen Artikel über Header durchgelesen und dann die beiden Dateien fabriziert. Leider kommen immer die Fehlermeldungen:
1 | Error 1 'UBRR0H' undeclared (first use in this function) C:\Users\Timm\Documents\AVRStudio\test uart\test uart\uart_timmy.c 7 3 test uart |
2 | Error 2 each undeclared identifier is reported only once for each function it appears in C:\Users\Timm\Documents\AVRStudio\test uart\test uart\uart_timmy.c 7 3 test uart |
3 | Error 3 'F_CPU' undeclared (first use in this function) C:\Users\Timm\Documents\AVRStudio\test uart\test uart\uart_timmy.c 7 13 test uart |
4 | Error 4 'BAUD' undeclared (first use in this function) C:\Users\Timm\Documents\AVRStudio\test uart\test uart\uart_timmy.c 7 13 test uart |
5 | Error 5 'UBRR0L' undeclared (first use in this function) C:\Users\Timm\Documents\AVRStudio\test uart\test uart\uart_timmy.c 8 3 test uart |
6 | Error 6 'UCSR0B' undeclared (first use in this function) C:\Users\Timm\Documents\AVRStudio\test uart\test uart\uart_timmy.c 9 3 test uart |
7 | Error 7 'TXEN0' undeclared (first use in this function) C:\Users\Timm\Documents\AVRStudio\test uart\test uart\uart_timmy.c 9 17 test uart |
8 | Error 8 'RXEN0' undeclared (first use in this function) C:\Users\Timm\Documents\AVRStudio\test uart\test uart\uart_timmy.c 9 30 test uart |
9 | Error 9 'UCSR0C' undeclared (first use in this function) C:\Users\Timm\Documents\AVRStudio\test uart\test uart\uart_timmy.c 11 3 test uart |
10 | Error 10 'UCSZ01' undeclared (first use in this function) C:\Users\Timm\Documents\AVRStudio\test uart\test uart\uart_timmy.c 11 16 test uart |
11 | Error 11 'UCSZ00' undeclared (first use in this function) C:\Users\Timm\Documents\AVRStudio\test uart\test uart\uart_timmy.c 11 28 test uart |
12 | Error 12 'UCSR0A' undeclared (first use in this function) C:\Users\Timm\Documents\AVRStudio\test uart\test uart\uart_timmy.c 17 14 test uart |
13 | Error 13 'UDRE0' undeclared (first use in this function) C:\Users\Timm\Documents\AVRStudio\test uart\test uart\uart_timmy.c 17 27 test uart |
14 | Error 14 'UDR0' undeclared (first use in this function) C:\Users\Timm\Documents\AVRStudio\test uart\test uart\uart_timmy.c 21 5 test uart |
15 | Error 15 'UCSR0A' undeclared (first use in this function) C:\Users\Timm\Documents\AVRStudio\test uart\test uart\uart_timmy.c 38 14 test uart |
16 | Error 16 'RXC0' undeclared (first use in this function) C:\Users\Timm\Documents\AVRStudio\test uart\test uart\uart_timmy.c 38 27 test uart |
17 | Error 17 'UDR0' undeclared (first use in this function) C:\Users\Timm\Documents\AVRStudio\test uart\test uart\uart_timmy.c 40 12 test uart |
18 | Warning 18 control reaches end of non-void function C:\Users\Timm\Documents\AVRStudio\test uart\test uart\uart_timmy.c 41 1 test uart |
Leider finde ich den Fehler nicht. Falls einer gerade Zeit hat, könnte er sich das ja mal ansehen. Vielen Dank im voraus!! Datein:
1 | /*
|
2 | * uart_timmy.h
|
3 | *
|
4 | * Created: 10.12.2012 12:03:14
|
5 | * Author: Timm
|
6 | */
|
7 | |
8 | |
9 | #ifndef UART_TIMMY_H_
|
10 | |
11 | #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)
|
12 | #define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))
|
13 | #define BAUD_ERROR ((BAUD_REAL*1000)/BAUD)
|
14 | |
15 | #define UART_TIMMY_H_
|
16 | |
17 | extern void uart_init(void); |
18 | extern int uart_putc(unsigned char c); |
19 | extern void uart_puts (char *s); |
20 | extern char uart_getc(void); |
21 | extern void uart_gets( char* Buffer, uint8_t MaxLen ); |
22 | |
23 | #endif /* UART_TIMMY_H_ */ |
1 | #include <avr/io.h> |
2 | #include "uart_timmy.h" |
3 | |
4 | |
5 | void uart_init(void) |
6 | {
|
7 | UBRR0H = (UBRR_VAL>>8); |
8 | UBRR0L = UBRR_VAL; |
9 | UCSR0B |= (1<<TXEN0) | (1<<RXEN0);// | (1<<RXCIE0); |
10 | // Frame Format: Asynchron 8N1
|
11 | UCSR0C = (1<<UCSZ01)|(1<<UCSZ00); |
12 | }
|
13 | |
14 | |
15 | int uart_putc(unsigned char c) |
16 | {
|
17 | while (!(UCSR0A & (1<<UDRE0))) /* warten bis Senden moeglich */ |
18 | {
|
19 | }
|
20 | |
21 | UDR0 = c; /* sende Zeichen */ |
22 | return 0; |
23 | }
|
24 | |
25 | |
26 | /* puts ist unabhaengig vom Controllertyp */
|
27 | void uart_puts (char *s) |
28 | {
|
29 | while (*s) |
30 | { /* so lange *s != '\0' also ungleich dem "String-Endezeichen" */ |
31 | uart_putc(*s); |
32 | s++; |
33 | }
|
34 | }
|
35 | |
36 | char uart_getc(void) |
37 | {
|
38 | while (!(UCSR0A & (1<<RXC0))) // warten bis Zeichen verfuegbar |
39 | ;
|
40 | return UDR0; // Zeichen aus UDR an Aufrufer zurueckgeben |
41 | }
|
42 | |
43 | void uart_gets( char* Buffer, uint8_t MaxLen ) |
44 | {
|
45 | uint8_t NextChar; |
46 | uint8_t StringLen = 0; |
47 | |
48 | NextChar = uart_getc(); // Warte auf und empfange das nächste Zeichen |
49 | |
50 | // Sammle solange Zeichen, bis:
|
51 | // * entweder das String Ende Zeichen kam
|
52 | // * oder das aufnehmende Array voll ist
|
53 | while( NextChar != '\n' && StringLen < MaxLen - 1 ) { |
54 | *Buffer++ = NextChar; |
55 | StringLen++; |
56 | NextChar = uart_getc(); |
57 | }
|
58 | |
59 | // Noch ein '\0' anhängen um einen Standard
|
60 | // C-String daraus zu machen
|
61 | *Buffer = '\0'; |
62 | }
|
63 | |
64 | // Passende Größe des Arrays wählen!
|
65 | // char Line[40]; // String mit maximal 39 zeichen
|
66 | // uart_gets( Line, sizeof( Line ) );
|