amal
23.03.2011, 13:17
hallo,
ich sende eine Txt Code über USART, das Problem es liest nur 3 Zahlen dann hört er auf. wie kann man das machen.hier ist der code:
#include <avr/io.h>
#include <stdlib.h>
#include <stdint.h>
#include <avr/interrupt.h>
#include <util/delay.h>
// Berechnungen
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // clever runden
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) // Reale Baudrate
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) // Fehler in Promille, 1000 = kein Fehler.
#ifndef UART_H
#define UART_H
#define F_CPU 3686400UL
#define BAUD 9600UL
void uart_init(void)
{
UCSR0B |= (1<<TXEN0) |(1<<RXEN0)|(RXCIE0<<1); // UART TX einschalten
UCSR0C |= (1<<UMSEL01)|(1 << UCSZ01)|(1 << UCSZ00); // Asynchron 8N1
UBRR0H = UBRR_VAL >> 8;
UBRR0L = UBRR_VAL & 0xFF;
}
uint8_t uart_getc(void)
{
while (!(UCSR0A & (1<<RXC0)))
;
return UDR0;
}
void uart_gets( char* Buffer, uint8_t MaxLen )
{
uint8_t NextChar;
uint8_t StringLen = 0;
NextChar = uart_getc();
while (1)
{
while( NextChar != ',' && StringLen < MaxLen - 1 )
{
UDR0=NextChar+1;
PORTB=NextChar;
*Buffer++ = NextChar;
StringLen++;
NextChar = uart_getc();
}
}
*Buffer = '\0';
}
int main(void)
{
DDRB=0xFF;
char Line[40]; // String mit maximal 39 zeichen
uint8_t c;
uart_init();
uart_gets( Line, sizeof( Line ) );
while (1)
{
}
return 0; // never reached
}
#endif // UART_H
ich sende eine Txt Code über USART, das Problem es liest nur 3 Zahlen dann hört er auf. wie kann man das machen.hier ist der code:
#include <avr/io.h>
#include <stdlib.h>
#include <stdint.h>
#include <avr/interrupt.h>
#include <util/delay.h>
// Berechnungen
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // clever runden
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) // Reale Baudrate
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) // Fehler in Promille, 1000 = kein Fehler.
#ifndef UART_H
#define UART_H
#define F_CPU 3686400UL
#define BAUD 9600UL
void uart_init(void)
{
UCSR0B |= (1<<TXEN0) |(1<<RXEN0)|(RXCIE0<<1); // UART TX einschalten
UCSR0C |= (1<<UMSEL01)|(1 << UCSZ01)|(1 << UCSZ00); // Asynchron 8N1
UBRR0H = UBRR_VAL >> 8;
UBRR0L = UBRR_VAL & 0xFF;
}
uint8_t uart_getc(void)
{
while (!(UCSR0A & (1<<RXC0)))
;
return UDR0;
}
void uart_gets( char* Buffer, uint8_t MaxLen )
{
uint8_t NextChar;
uint8_t StringLen = 0;
NextChar = uart_getc();
while (1)
{
while( NextChar != ',' && StringLen < MaxLen - 1 )
{
UDR0=NextChar+1;
PORTB=NextChar;
*Buffer++ = NextChar;
StringLen++;
NextChar = uart_getc();
}
}
*Buffer = '\0';
}
int main(void)
{
DDRB=0xFF;
char Line[40]; // String mit maximal 39 zeichen
uint8_t c;
uart_init();
uart_gets( Line, sizeof( Line ) );
while (1)
{
}
return 0; // never reached
}
#endif // UART_H