Uart Atmega328p

Gast #6519470
Lesenswert?

Hallo,
ich möchte ganz simpel über Uart Zeichen einlesen und wieder 
zurücksenden. Bringe es aber nicht zum Laufen und verstehe nicht wo der 
Fehler begraben ist. "TEST" wird richtig gesendet also das passt, aber 
das Einlesen scheint nicht zu funktionieren.
Hier mein Code:

#define F_CPU 1600000UL
#include <xc.h>
#include <stdio.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

char text[30]="TEST";
char uart_rcv[30];
uint8_t uart_complete=0;

int uart_putc(unsigned char c);
void uart_puts (char *s);

int uart_putc(unsigned char c)
{
  while (!(UCSR0A & (1<<UDRE0)));
  UDR0= c;
  return 0;
}

void uart_puts (char *s)
{
  while (*s)
  {
    uart_putc(*s);
    s++;
  }
}

int main(void)
{
  UCSR0B|= (1<<RXEN0) | (1<<TXEN0) | (1<<RXCIE0);
  UCSR0C|= (1<<UCSZ00) | (1<<UCSZ01);
  UBRR0H=0;
  UBRR0L=103;    //9600Baud

  sei();

  uart_puts(text);

    while(1)
    {
    if (uart_complete==1)
    {
      uart_puts(uart_rcv);
      uart_complete=0;
    }
    }
}

ISR (USART_RX_vect)
{
  uint8_t i=0;

  uart_rcv[i]=UDR0;

  if (uart_rcv[i]=='.')
  {
    i=0;
    uart_complete=1;
    uart_rcv[i]='\0';
  }
  else
  {
    i++;
    uart_complete=0;
  }
}

Kann mir da bitte jemand weiterhelfen?

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