Gast
#2563575
Hey, ich probiere grad meine UART aus. Habe ein ATmega8 auf dem Pollin-Board. Das senden von Zeichen und Strings funktioniert klasse. Nur ich empfange einfach nix. Jemand ne Ahnung was falsch ist? PD5&PD6 sind LED's zur Anzeige ob das Programm weiter läuft (und PD6 bleibt aus). /* * UART_IN.c * * Created: 23.02.2012 19:53:10 * Author: Cris */ #include <avr/io.h> #define F_CPU 16000000UL #define BAUD 9600UL #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) void uart_init(void); int uart_putc(unsigned char c); uint8_t uart_getc(void); int main(void) { uart_init(); DDRD = 0b11100000; uint8_t c; while(1) { PORTD |= (1 << PD5); c = uart_getc(); PORTD |= (1<< PD6); while (!(UCSRA & (1<<UDRE))) // warten bis Senden moeglich { } uart_putc(c + '0'); } } void uart_init(void) { UBRRH = UBRR_VAL >> 8; UBRRL = UBRR_VAL & 0xFF; UCSRB |= (1<<TXEN) | (1<<RXEN); // Frame Format: Asynchron 8N1 UCSRC = (1<<URSEL)|(1 << UCSZ1)|(1 << UCSZ0); // Asynchron 8N1 } int uart_putc(unsigned char c) { while (!(UCSRA & (1<<UDRE))) /* warten bis Senden moeglich */ { } UDR = c; /* sende Zeichen */ return 0; } uint8_t uart_getc(void) { while (!(UCSRA & (1<<RXC))) // warten bis Zeichen verfuegbar ; return UDR; // Zeichen aus UDR an Aufrufer zurueckgeben }