--- /dev/null
+#include <avr/io.h>
+#include "serial.h"
+
+#define BIT(n) (1<<(n))
+
+void serial_init(uint16_t baud)
+{
+ DDRD = (DDRD&~0x03) | 0x02;
+ PORTD &= ~0x03;
+
+ baud = (F_CPU/16+baud/2)/baud-1;
+ UBRR0H = baud>>8;
+ UBRR0L = baud;
+ UCSR0C = BIT(UCSZ00) | BIT(UCSZ01); // 8N1
+ UCSR0B = BIT(RXEN0) | BIT(TXEN0) | BIT(RXCIE0);
+}
+
+void serial_write(uint8_t c)
+{
+ while(!(UCSR0A&(1<<UDRE0))) ;
+ UDR0 = c;
+}