mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik WinAvr USART problem


Autor: axel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

was ist dem an dem Code Falsch?
Als Compiler verwnde ich WinAvr
#include <avr/io.h>

#define USART_BAUDRATE 9600
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)

int main (void)
{
   char ReceivedByte;

   UCSRB |= (1 << RXEN) | (1 << TXEN);   // Turn on the transmission and reception circuitry
   UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1); // Use 8-bit character sizes

   UBRRL = BAUD_PRESCALE; // Load lower 8-bits of the baud rate value into the low byte of the UBRR register
   UBRRH = (BAUD_PRESCALE >> 8); // Load upper 8-bits of the baud rate value into the high byte of the UBRR register

   for (;;) // Loop forever
   {
      while ((UCSRA & (1 << RXC)) == 0) {}; // Do nothing until data have been recieved and is ready to be read from UDR
      ReceivedByte = UDR; // Fetch the recieved byte value into the variable "ByteReceived"

      while ((UCSRA & (1 << UDRE)) == 0) {}; // Do nothing until UDR is ready for more data to be written to it
      UDR = ReceivedByte; // Echo back the received byte back to the computer
   }   
} 


Als Fehlermeldung erhalte ich:

main.c:10: error: 'UCSRB' undeclared (first use in this function)
main.c:10: error: (Each undeclared identifier is reported only once
main.c:10: error: for each function it appears in.)
main.c:11: error: 'UCSRC' undeclared (first use in this function)
main.c:11: error: 'URSEL' undeclared (first use in this function)
main.c:13: error: 'UBRRL' undeclared (first use in this function)
main.c:14: error: 'UBRRH' undeclared (first use in this function)
main.c:18: error: 'UCSRA' undeclared (first use in this function)
main.c:19: error: 'UDR' undeclared (first use in this function)

Und zwar immer wenn ich den USART beutzen möcht auch bei anderen Codes.

mfg alex

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welcher Porzessor?
Manche AVR haben 2 USART. Dann heissen die Register nicht mehr UDR 
sondern UDR0 und UDR1, je nachdem welcher USART benutzt werden soll.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sourcecode passt nicht zum eingestellten (definierten) AVR

Autor: axel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für dei Antworten.
Ich verwende den Atmega32.

mfg axel

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
axel schrieb:

> Ich verwende den Atmega32.

Bei dem gibt es z.B. UCSRB

Prüfe in den Compileroptionen (AVR Studio+WinAVR) oder im Makefile 
(Beispiel Makefile) (WinAVR) ob der Atmega32 als MCU richtig 
eingegeben ist.

Autor: mikmik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schau in das makefile welcher MCU dort eingestellt ist.
-und du verwendest nicht wii-avr als compiler sondern avr-gcc.

Autor: axel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Makefile hab ich den Atmega32 eingestellt.

# MCU name
MCU = atmega32

UCSRB anstatt UCSRA nützt auch nichts.

mfg axel

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> UCSRB anstatt UCSRA nützt auch nichts.

Das kann auch logisch nichts bringen. Das würde eine ganz andere 
Funktionsweise im Programm auslösen.

Es liegt ein heftigeres Problem vor. Es kann sein, dass nicht das 
erwartete Makefile benutzt wird oder die MCU betreffende Zeile im 
Compileraufruf falsch ist. Hänge mal das Makefile an. Rufe mal make mit 
der -d Option auf.

Autor: Alex G. (alex94) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier mal das Makfile.

(Ich hab mein passwort wieder :) )

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso hat dein Makefile die Endung .lib?

Ein Makefile hat keine Endung (oder eine leere Endung, je nachdem wie 
man das sehen will). Kann es sein, dass du eine andere Datei 'Makefile' 
auf deinem Verzeichnis hast? (Das würde dann von make benutzt werden und 
dein Makefile.lib ist zwar nett aber nutzlos)

Autor: Alex G. (alex94) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank.
Oh mann bin ich dumm :D
Ich habe hier mehrere Makefiles.

Makefile.wpo
Makefile.lib

und eben

Makefile

Ich habe die ganze Zeit in Makefile.wpo und .lib herumgedreht :D

Nochmal vielen Dank!

mfg Alex

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.