Initializierung mikrocontroller 644p

Gast #2671949
Hallo,

ich arbeite Momentan mit einem Mikrocontrollerboard 644p. Der 
Mikrocontroller 644p besizt zwei USARTs. Eine der Schnittstelle (RS232) 
von USART dient zum Empfang von Daten (X und Y Koordinaten), die von PC 
gesendet wurden. Die Zweite Schnittstelle (RS485) von USART der 644p 
soll die Daten von Mikrocontrollerboard zu einem anderen Gerät 
übertragen.

Bevor ich die C-Code für die Datenübertragung schreibe, muss ich die 
USART von 644p initializieren. Ich habe selber versucht, die beide USART 
vom 644p zu initializieren und die C-Code lautet:

#include <avr/interrupt.h>
#include <util/delay.h>
#include <string.h>
#include <stdlib.h>
#include <avr/interrupt.h>
#include <util/delay.h>

#define FOSC 8000000 // Clock Speed
#define BAUD 9600UL

// Berechnungen zur Baudrate:

#define UBRR_VAL ((FOSC+BAUD*8)/(BAUD*16)-1)   // clever runden

// USART Initialization

void USART_Init (unsigned int ubrr)
{
/* Set baud rate */
UBRR0H = (unsigned char)(ubrr>>8);
UBRR0L = (unsigned char) ubrr;
UBRR1H = (unsigned char)(ubrr>>8);
UBRR1L = (unsigned char) ubrr;

/* Enable receiver, transmitter  */

UCSR0B = (1<<RXEN0)|(1<<TXEN0));
UCSR1B = (1<<RXEN1)|(1<<TXEN1);

/* Set frame format: 8data, 2stop bit */
 UCSR0C = (1<<USBS0)|(3<<UCSZ00);
 UCSR1C = (1<<USBS1)|(3<<UCSZ10);
}
/*============Erste USART=====================*/

/* Data Reception (The USART Receiver) */

unsigned char USART_Receive (void)
{
 /* Wait for data to be received */
  while(!(UCSR0A & (1<<RXC0)) );
/* Get and return received data from buffer */
return UDR0;
}

// Data Transmission (The USART Transmitter)

void USART_Transmit (unsigned char data)
{
/* Wait for empty transmit buffer */
while ( !(UCSR0A & (1<<UDRE0)) ); //warten bis Senden moeglich
/* Put data into buffer and sends the data */
UDR0 = data;
}

/*=============Zweite USART===========================*/

unsigned char USART_Receive (void)
{
 /* Wait for data to be received */
  while(!(UCSR1A & (1<<RXC1)) );
/* Get and return received data from buffer */
return UDR1;
}

// Data Transmission (The USART Transmitter)

void USART_Transmit (unsigned char data)
{
/* Wait for empty transmit buffer */
while ( !(UCSR1A & (1<<UDRE1)) ); //warten bis Senden moeglich
/* Put data into buffer and sends the data */
UDR1 = data1;
}

Kann jemand mir sagen, ob meine Initializierung stimmt.

Ich bitte Sie um Hilfe.

MFG Luffy
Gast
Du hast mehrere Funktionen mit gleichem Namen definiert!

Mach dir Paare:

unsigned char USART0_Receive (void)
unsigned char USART1_Receive (void)

void USART0_Transmit (unsigned char data)
void USART1_Transmit (unsigned char data)
Gast
Hallo nochmal,

du hast recht Krapao. Ich habe vergessen, die Funktionen anders zu 
definieren. Danke für die Bemerkung.

Gibt es sonst noch was in meinem C-Code zu modifizieren ?

Danke im Voraus.

Luffy.
Gast
Auf den ersten Blick verwendest du die gleiche Initialisierung, wie sie 
im Datenblatt auf Seite 177 zu sehen, ist mit dem Unterschied, dass du 
in einer Funktion beide UARTs initialisierst. Da ist IMHO nix 
problematisch dran. Von der Praxis her musst du halt sicher stellen, 
dass du genaue 8 MHz als Taktquelle hast. Das ist aber in der [[AVR 
Checkliste]] und wahrscheinlich auch in den diversen Tutorials zum AVR 
UART erläutert.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.