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