Forum: Mikrocontroller und Digitale Elektronik UART Fehlermeldung


von Timo (Gast)


Lesenswert?

Hi,
Möchte ein Zeichen "x" an die RS232 Schnittstelle senden und es mit 
einen Programm auslesen. Dass Programm auf dem PC geht zu 100%. Ich habe 
laut Toturial folgenden Quellcode für meinen ATMega16 geschrieben:
1
#include <avr/io.h>
2
3
#ifndef F_CPU
4
#define F_CPU 8000000UL  //Einstellen der Oszillator - Frequenz in Hz 
5
#endif              
6
7
8
#define UART_UBRR_CALC(BAUD_,FREQ_) )((FREQ_)/((BAUD_)*16L)-1
9
10
#define UART_BAUD_RATE 9600 //Einstellen der Baudrate 
11
12
13
int main (void)
14
{
15
//Initialisieren des UART´s 
16
17
18
UCSRB  |=  (1<<TXEN); //UART TX einschalten
19
UCSRC  |=  (1<<URSEL)  |  (3<<UCSZ0); //Asynchron 8N1
20
21
//Einstellen der Baudregister
22
23
UBRRH  =  (uint8_t)(UART_UBRR_CALC(UART_BAUD_RATE, F_CPU) >> 8);
24
UBRRL  =  (uint8_t)  UART_UBRR_CALC(UART_BAUD_RATE, F_CPU);
25
26
//Senden einzelner Zeichen
27
28
while (!(UCSRA & (1<<UDRE)))  //Warten, bis das Senden möglich ist
29
{
30
31
}
32
33
34
35
UDR    =  'x'; //Schreiben des Zeichens 'x' auf die RS232 - Schnittstelle
36
37
return (0);
38
39
}

Ich kann ihn aber nicht übersetzten. Bekomme immer Fehlermeldungen. Was 
mache ich falsch?

von Michael U. (Gast)


Lesenswert?

Hallo,

immer diese C-Übungen für mich (nur ASM-Programmierer...) ;)

Zähle und sortiere mal Deine Klammern
#define UART_UBRR_CALC(BAUD_,FREQ_) )((FREQ_)/((BAUD_)*16L)-1

und auch hier mit der Ersetzung:
UBRRH  =  (uint8_t)(UART_UBRR_CALC(UART_BAUD_RATE, F_CPU) >> 8);

zumindest mault der Compiler bei mir darüber.

Gruß aus Berlin
Michael


von Timo (Gast)


Lesenswert?

Danke. Es waren die Klammern :D

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
Noch kein Account? Hier anmelden.