Gast
#6519470
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?