Gast
#2682600
Schönen Guten Abend!
Habe ein problem mit atmega324p uart,
code:
#include <avr/io.h>
#include <string.h>
#include <util/delay.h>
#include <avr/pgmspace.h>
#define TAKT 16000000
#define UART_BAUDRATE 19200
#define UART_SETTING ((TAKT/16L/UART_BAUDRATE)-1)
void setup_uart()
{
DDRD = (0<<PD0) | (1<<PD1);
/* Baudrate einstellen */
UBRR0H = (char) (UART_SETTING >> 8);
UBRR0L = (char) (UART_SETTING);
/* Empfänger und Sender einschalten */
UCSR0B = (1<<RXEN0) | (1<<TXEN0)| (1 << RXCIE0);
/* Asynchron, 8N1 */
UCSR0C = (1<<USBS0)|(3<<UCSZ00);
}
void uart_putchar(char c)
{
// Warten bis Buffer bereit ...
while (!(UCSR0A & (1 << UDRE0)))
;
// Senden...
UDR0 = c;
}
void uart_putstring(char *str)
{
unsigned char i;
for (i=0;i<255;i++) /* Maximal 255 Zeichen ausgeben ... */
{
if (str[i] != 0)
uart_putchar(str[i]);
else
break; // Ende des Strings erreicht
}
}
char uart_getchar()
{
// Ist schon ein Zeichen im Buffer?
if (bit_is_set(UCSR0A, RXC0))
return UDR0;
else
return -1;
}
void uart_readline(char *str)
{
char c;
unsigned char index;
index = 0;
while (1)
{
c = uart_getchar();
if (c != -1)
{
if (c == 13) /* ASCII: NewLine */
{
/* Ende der Zeile erreicht,
also String abschließen */
str[index] = 0;
/* Funktion beenden */
return;
}
else /* Normales Zeichen, anhängen an die Zeichenkette */
{
str[index] = c;
index++;
}
}
}
}
int main(void)
{
char kommando[255];
/* RS232 einschalten ... */
setup_uart();
uart_putstring(_DATE__ __TIME_);
uart_putstring("\r\n");
while (1)
{
/* Auf komplettes Kommando warten ... */
uart_readline(kommando);
char *puffer_a;
char *puffer_b;
char *puffer_c;
char *saveptr = NULL;
if( ( puffer_a = strtok_r( kommando, ":", &saveptr ) )
&&
( puffer_b = strtok_r( NULL, ":", &saveptr ) )
&&
( puffer_c = strtok_r( NULL, ":", &saveptr ) )
)
/* ==== BEFEHL: "test" */
if (strcmp(puffer_a, "test")==0)
{
uart_putstring("anwort\r\n");
}
else if (strcmp(puffer_a, "test2")==0)
{
uart_putstring("anwort2\r\n");
}
}
return 0;
}
Wenn uC "test:a:b:" bekommt, soll er "antwort" zurücktschicken.
Bist jetzt reagiert leider der uc nicht, kann jemand helfen?
Vielen Dank & Gruß