jagdfalke
26.11.2005, 19:31
#include <avr/io.h>
#include <avr/sfr_defs.h>
#define F_CPU 8000000 // 8MHz Taktfrequenz
#define BAUD_RATE 9600 // gewünschte Baud-Rate für UART
void uart_put(char c) {
loop_until_bit_is_set(UCSRA, UDRE);
UDR = c;
}
void uart_puts(char *s) {
while(*s) {
uart_put(*s);
s++;
}
uart_put('\n');
uart_put('\r');
}
uint8_t uart_get(void) {
loop_until_bit_is_clear(UCSRA, RXEN);
return UDR;
}
void uart_init(int tx, int rx) {
UBRRL = (F_CPU/(BAUD_RATE*16l)-1);
if(tx == 1) {
UCSRB |= (1<<TXEN);
}
if(rx == 1) {
UCSRB |= (1<<RXEN);
}
}
int main (void) {
uart_init(1, 1);
while(1)
{
char c = uart_get();
uart_put(c);
uart_put('\n');
uart_put('\r');
}
return 0;
}
Das Programm soll ein Zeichen empfangen und es gleich wieder ausgeben. Es funktioniert soweit ganz gut, aber wenn er einmal angefangen hat ein Zeichen auszugeben hört er nicht mehr auf damit. Woran liegt das?
mfg
jagdfalke
#include <avr/sfr_defs.h>
#define F_CPU 8000000 // 8MHz Taktfrequenz
#define BAUD_RATE 9600 // gewünschte Baud-Rate für UART
void uart_put(char c) {
loop_until_bit_is_set(UCSRA, UDRE);
UDR = c;
}
void uart_puts(char *s) {
while(*s) {
uart_put(*s);
s++;
}
uart_put('\n');
uart_put('\r');
}
uint8_t uart_get(void) {
loop_until_bit_is_clear(UCSRA, RXEN);
return UDR;
}
void uart_init(int tx, int rx) {
UBRRL = (F_CPU/(BAUD_RATE*16l)-1);
if(tx == 1) {
UCSRB |= (1<<TXEN);
}
if(rx == 1) {
UCSRB |= (1<<RXEN);
}
}
int main (void) {
uart_init(1, 1);
while(1)
{
char c = uart_get();
uart_put(c);
uart_put('\n');
uart_put('\r');
}
return 0;
}
Das Programm soll ein Zeichen empfangen und es gleich wieder ausgeben. Es funktioniert soweit ganz gut, aber wenn er einmal angefangen hat ein Zeichen auszugeben hört er nicht mehr auf damit. Woran liegt das?
mfg
jagdfalke