Hallo zusammen,
mein Ziel ist es, ein beliebigen String über UART zu senden. Meine ersten C Gehversuche sahen aus wie unten im Code. Jedoch erreicht mich am PC immer nur ein "Ha". Sieht also aus, als passt das was mit dem Speicher nicht? Aber müsste der Pointer nicht einfach immer hochgezählt werden? Den ganzen String durch?
Vielleicht könnt ihr mir helfen.
Code:
#include <avr/io.h>
#include <avr/interrupt.h>
#define BAUD 19200UL
#define UBRR_BAUD ((F_CPU/(16UL*BAUD))-1)
/*************************************************************************
Initialisierung vom UART Interface
*************************************************************************/
void uart_init(void)
{
// Baudrate einstellen (Normaler Modus)
UBRRH = (unsigned char) (UBRR_BAUD>>8);
UBRRL = (unsigned char) (UBRR_BAUD & 0x0ff);
// Aktivieren des Empfängers, des Senders und des "Daten empfangen"-Interrupts
UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
// Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
// Flush Receive-Buffer (entfernen evtl. vorhandener ungültiger Werte)
do
{
// UDR auslesen (Wert wird nicht verwendet)
UDR;
}
while (UCSRA & (1<<RXC));
// Rücksetzen von Receive Complete Flag
UCSRA = (1<<RXC);
}
/*************************************************************************
String senden
*************************************************************************/
void uart_send(const char *string)
{
do
{
// ... warten bis der Sendepuffer leer ist ...
while (!( UCSRA & (1<<UDRE)))
;
UDR = (const unsigned char)*string;
}
while (*string++);
}
/*************************************************************************
UART Empfangs Interrupt ISR
*************************************************************************/
ISR(SIG_UART_RECV)
{
unsigned char buffer;
// Daten aus dem Puffer lesen ...
buffer = UDR;
}
Code:
void uart_init(void);
void uart_send(const char *string);
Code:
uart_send("Hallo!" "\r\n");
Das ist uart.c, uart.h und der Aufruf der Methode in main.c
Danke schonmal für eure Hilfe
Grüße,
hacker
Lesezeichen