UART String senden

Gast #3046867
Lesenswert?

Ich mal wieder ;p
Ich wollte grad die Funktion meiner UART-Methoden erweitern und hab die 
Funktion hinzugefügt, einen String zu senden. Er soll mir einen String 
senden, sobald er etwas vom PC empfangen hat. Dies löse ich mit dem 
Interrupt. Wenn ich ein einzelnes Zeichen sende funktioniert das auch 
prima, doch wenn ich einen String zurücksenden möchte bekomme ich eine 
Endlosschleife.. Kann mir wer sagen woran dass liegt? Hier der Code:
1
#define F_CPU 16000000UL
2
#define BAUD 9600UL
3
#define MYUBRR F_CPU/16/BAUD-1
4

5
#include <avr/io.h>
6
#include <avr/delay.h>
7
#include <avr/interrupt.h>
8

9
void UART_init( unsigned int ubrr );
10
void UART_transmit( char send );
11
void UART_transmitString( char *s );
12
char UART_recive( void );
13

14
int main(void)
15
{
16
  sei();
17
  UART_init(MYUBRR);
18
    while(1)
19
    {
20
    
21
    }
22
}
23

24
void UART_init( unsigned int ubrr ) 
25
{
26
  // BAUD-Rate
27
  UBRR0H = (unsigned char) (ubrr >> 8);
28
  UBRR0L = (unsigned char) ubrr;
29
  
30
  // Senden/Empfangen aktivieren
31
  UCSR0B = (1 << RXEN0) | (1 << TXEN0) | (1 << RXCIE0);
32
  
33
  // 1 Stop-Bit und 8 Data-Bits
34
  UCSR0C = (3 << UCSZ00);
35
}
36

37
void UART_transmit( char send ) 
38
{
39
  // Warte auf leeren Transmitter-Buffer
40
  while( !(UCSR0A & (1 << UDRE0)));
41
  UDR0 = send;
42
}
43

44
void UART_transmitString(char *s)
45
{
46
  while(*s)
47
  {
48
    UART_transmit(*s);
49
    s++;
50
  }
51
}
52

53
char UART_recive( void )
54
{
55
  // Auf Daten warten
56
  while( !(UCSR0A & (1 << RXC0)));
57
  
58
  // Daten zurückgeben
59
  return UDR0;
60
}
61

62
ISR(USART_RX_vect)
63
{
64
  UART_transmitString("Hallo Welt!");
65
}
Gast #3046893
Lesenswert?

Ahhh, daran lag es, ich muss dass Zeichen erst einmal Auslesen. Es ging 
mit einem Zeichen, weil ich die Methode wie folgt benutzt hab:
UART_transmitString(UART_recive());
Hab jetzt einfach vorher einmal das Zeichen abgefragt und jetzt 
funktioniert es.
Dankeschön :)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren