//#define F_OSC 2000000 unnötig da global via makefile angegeben #define UART_BAUD_RATE 2400 #define UART_BAUD_CALC(UART_BAUD_RATE,F_OSC) ((F_OSC)/((UART_BAUD_RATE)*16l)-1) void init_usart(void) { // baud Rate UBRRH = (uint8_t)(UART_BAUD_CALC(UART_BAUD_RATE,F_CPU)>>8); UBRRL = (uint8_t)UART_BAUD_CALC(UART_BAUD_RATE,F_CPU); // Receiver und Transmitter einschalten, RX Interrupt aktivieren UCSRB = (1 << RXEN) | (1 << TXEN) | (1 << RXCIE); //asyncron 8N1 (8 bit, keine Parität, 1 Stopbit) UCSRC = (1 << URSEL) | (3 << UCSZ0); } void usart_putc(unsigned char c) { // warten bis udr fertig while(!(UCSRA & (1 << UDRE))); UDR = c; // senden } void usart_puts (char *s) { // chars durchlaufen (bis *s != NULL) while (*s) { usart_putc(*s); s++; } } SIGNAL (SIG_UART_RECV) { // USART RX interrupt lcd_putc(UDR); } void hr20gettime(void) { lcd_clrscr(); usart_putc('r'); _delay_ms(5); usart_putc('1'); _delay_ms(5); usart_putc('3'); _delay_ms(5); usart_putc('6'); _delay_ms(5); usart_putc(13); _delay_ms(500); }