Hi, ich fange gerade erst an mich mit C zu befassen und wollte nun mal etwas mit UART probieren, dazu habe ich im Internet folgenden Quellcode gefunden: /*********************************************************************** ***** UART.c ------ Übungsprojekt zum Empfang von Daten mit dem UART. Eine LED an Pin 0 von Port B soll gesteuert werden beim Empfang folgender Zeichen: '1' - LED ein. '0' - LED aus. Autor: Christian Schifferle Datum: November 2002 Software: AVR-GCC needed ************************************************************************ ****/ #include <io.h> // Wir brauchen Zugriff auf die I/O's des Controllers #define F_CPU 8000000 /* 8Mhz */ #define UART_BAUD_RATE 9600 /* 9600 baud */ // Berechnung des Inhalts des UBBR-Registers #define UART_BAUD_SELECT (F_CPU/(UART_BAUD_RATE*16l)-1) // Datentypdefinitionen typedef unsigned char BYTE; typedef unsigned short WORD; int main (void) /*********************************************************************** ***** Hier ist der Programmeinstiegspunkt. */ { /* UART Control Register laden. Wir verwenden (noch) keine Interrupts. Hier wollen wir nur empfangen, also wird nur das Receiver Enable Flag gesetzt. */ outp ((1 << RXEN), UCR); /* Baudrate einstellen */ outp ((BYTE) UART_BAUD_SELECT, UBRR); // Port B als Ausgang konfigurieren outp (0xff, DDRB); // Hier machen wir einmal etwas anderes zur Realisierung der // Endlosschleife. Wir setzen zu Beginn der Schleife ein Label. // Am Schleifenende springen wir direkt zu diesem Label. // Nicht schön, aber unheimlich schnell. LOOP: // Prüfen, ob ein Zeichen empfangen wurde. if (inp (USR) & (1 << RXC)) { // Bit RXC im USR gesetzt ? switch (inp (UDR)) { // Datenregister auslesen case '1': // LED einschalten sbi (PORTB, PINB0); break; case '0': // LED ausschalten cbi (PORTB, PINB0); break; default: // Bei allen anderen Zeichen nichts tun break; } } goto LOOP; } /* end of main */ Leider kriege ich wenn ich auf Build klicke folgende Meldungen: rm -rf uart.o uart.elf dep/ uart.hex uart.eep Build succeeded with 0 Warnings... avr-gcc -mmcu=atmega8 -Wall -gdwarf-2 -DF_CPU=8000000000 -O0 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wp,-M,-MP,-MT,uart.o,-MF,dep/uart.o.d -c ../uart.c ../uart.c:17:70: io.h: No such file or directory ../uart.c: In function `main': ../uart.c:39: warning: implicit declaration of function `outp' ../uart.c:39: error: `RXEN' undeclared (first use in this function) ../uart.c:39: error: (Each undeclared identifier is reported only once ../uart.c:39: error: for each function it appears in.) ../uart.c:39: error: `UCR' undeclared (first use in this function) ../uart.c:42: error: `UBRR' undeclared (first use in this function) ../uart.c:46: error: `DDRB' undeclared (first use in this function) ../uart.c:55: warning: implicit declaration of function `inp' ../uart.c:55: error: `USR' undeclared (first use in this function) ../uart.c:55: error: `RXC' undeclared (first use in this function) ../uart.c:56: error: `UDR' undeclared (first use in this function) ../uart.c:58: warning: implicit declaration of function `sbi' ../uart.c:58: error: `PORTB' undeclared (first use in this function) ../uart.c:58: error: `PINB0' undeclared (first use in this function) ../uart.c:61: warning: implicit declaration of function `cbi' make: *** [uart.o] Error 1 Build failed with 12 errors and 4 warnings... Leider weiß ich nicht woran das liegt...hat evtl. jemand einen Tipp für mich?
Das kann gar nicht gehen: 1. #include <io.h> --> #include <avr/io.h> 2. outp und inp gibts nicht mehr. Der Source ist schon ein bisschen angestaubt. 3. Die F_CPU-Angabe im Makefile kann auch nicht stimmen. Hier der korrigierte Source (untestet): /*********************************************************************** ***** UART.c ------ Übungsprojekt zum Empfang von Daten mit dem UART. Eine LED an Pin 0 von Port B soll gesteuert werden beim Empfang folgender Zeichen: '1' - LED ein. '0' - LED aus. Autor: Christian Schifferle Datum: November 2002 Software: AVR-GCC needed ************************************************************************ ****/ #include <avr/io.h> // Wir brauchen Zugriff auf die I/O's des Controllers #define F_CPU 8000000 /* 8Mhz */ #define UART_BAUD_RATE 9600 /* 9600 baud */ // Berechnung des Inhalts des UBBR-Registers #define UART_BAUD_SELECT (F_CPU/(UART_BAUD_RATE*16l)-1) // Datentypdefinitionen typedef unsigned char BYTE; typedef unsigned short WORD; int main (void) /*********************************************************************** ***** Hier ist der Programmeinstiegspunkt. */ { /* UART Control Register laden. Wir verwenden (noch) keine Interrupts. Hier wollen wir nur empfangen, also wird nur das Receiver Enable Flag gesetzt. */ //outp ((1 << RXEN), UCR); UCR |= 1<<RXEN; /* Baudrate einstellen */ //outp ((BYTE) UART_BAUD_SELECT, UBRR); UBRR = UART_BAUD_SELECT; // Port B als Ausgang konfigurieren //outp (0xff, DDRB); DDRB = 0xff; //LOOP: while(1) { // Prüfen, ob ein Zeichen empfangen wurde. if (USR & (1 << RXC)) { // Bit RXC im USR gesetzt ? switch (UDR) { // Datenregister auslesen case '1': // LED einschalten //sbi (PORTB, PINB0); PORTB |= 1<<PINB0; break; case '0': // LED ausschalten //cbi (PORTB, PINB0); PORTB & = ~ (1<<PINB0); break; default: // Bei allen anderen Zeichen nichts tun break; } } } //goto LOOP; // Goto geht schon mal gar nicht!
Hi, schonmal danke für die Hilfe, die meisten Fehler sind jetzt weg, leider sind da immer noch zwei Build started 30.10.2006 at 20:56:59 makefile:39: /avrfreaks/avr_make: No such file or directory make: *** No rule to make target `/avrfreaks/avr_make'. Stop. Build failed with 2 errors and 0 warnings... Mit denen ich nichts anfangen kann :-(
# Makefile für die Übung Empfangen mit dem UART. # (c) Christian Schifferle Oktober 2002 #Hier muss der verwendete AVR-Controller eingetragen werden #(at90s8515, at90s8535, attiny22, atmega603 etc.). MCU = atmega8 #Hier wird die Zieldatei definiert (ohne Namenserweiterung). TRG = UART #Hier kommen die Quelldateien hin, wobei auf bereits definierte #Symbole zugegriffen werden kann. SRC = $(TRG).c #Wenn zusätzlich Assembler-Codedateien eingebunden werden sollen #müssen diese hier angegeben werden. ASRC = #Ebenso kann mit zusätzlichen Bibliotheks- und Objektdateien verfahren #werden. LIB = #Und auch zusätzliche Include-Dateien INC = #Hier definieren wir Einstellungen (Flags) für den Assembler, ASFLAGS = -Wa, -gstabs #den Compiler CPFLAGS = -g -Os -Wall -Wstrict-prototypes -Wa,-ahlms=$(<:.c=.lst) #und den Linker LDFLAGS = -Wl,-Map=$(TRG).map,--cref ########### Die folgende Zeile sollte nicht geändert werden ############# ########### Hier werden die Systemdateien integriert ############# include $(AVR)/avrfreaks/avr_make ###### Hier werden die Abhängigkeiten definiert ################### $(TRG).o : $(TRG).c
include $(AVR)/avrfreaks/avr_make Die Datei geht ab. Ich würde dir empfehlen, dich erst einmal mit avr-gcc und den Makefiles zu beschäftigen: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Exkurs:_Makefiles Du kannst auch das Beispielmakefile vom WinAVR-GCC verwenden. Mit kleinen Anpassungen versteht sich.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.