Gast
#1361066
Hallo zusammen,
ich habe ein kleiner Programm für eine UART-Schnittstelle geschrieben
Leider wird über den TX-Pin nur 2 der 3 Zeichen gesendet. Es werden
immer nur die ersten 2 Zeichen gesendet. Hier mal mein Quellcode:
#include <avr/io.h>
#include <string.h> // Für "strcmp"
#include <stdlib.h> // Für "itoa"
#include <util/delay.h>
#define TAKT 16000000L
#define UART_BAUDRATE 9600
int i=0;
// Berechnung der Konfigurationsparameter
#define UART_SETTING ((TAKT/16L/UART_BAUDRATE)-1)
void setup_uart()
{
/* Baudrate einstellen */
UBRR1H = (char) (UART_SETTING >> 8);
UBRR1L = (char) (UART_SETTING);
/* Empfänger und Sender einschalten */
UCSR1B =(1<<RXEN1) | (1<<TXEN1);
/* Asynchron, 8N1 */
UCSR1C = (1<<UCSZ11)|(1<<UCSZ10);
}
void uart_send( uint8_t zeichen )
{
while (!UCSR1A&(1<<UDRE1)); // Warte, bis Puffer frei ist
UDR1 = zeichen; // jetzt das Byte ins UDR schreiben
}
void uart_putstring(char *str)
{
unsigned char i;
for (i=0;i<255;i++) /* Maximal 255 Zeichen ausgeben ... */
{
if (str[i] != 0)
uart_send(str[i]);
else
break; // Ende des Strings erreicht
}
}
char uart_getchar()
{
// Ist schon ein Zeichen im Buffer?
if (bit_is_set(UCSR1A, RXC))
return UDR1;
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)
{
setup_uart();
for(;;)
{
if (i==3000)
{
uart_send(0x04);
uart_send(0x55);
uart_send(0x42);
i=0;
}
i++;
}
return 0;
}
Also es wird nur die 0x04 und die 0x55 ausgegeben. Kann mir bitte jemand
sagen woran das liegt?
Vielen Dank!
Gruß Roman