#define F_CPU 1000000UL // 1 MHz #define BAUD 2400 #include #include #include #include #include #include #define RX_BUFFER_SIZE 128 #ifndef cbi #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) #endif #ifndef sbi #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) #endif void beginSerial(long); void serialWrite(unsigned char); int serialAvailable(); int serialRead(); void serialFlush(); unsigned char rx_buffer[RX_BUFFER_SIZE]; int rx_buffer_head = 0; int rx_buffer_tail = 0; void beginSerial(long baud) { #if defined(__AVR_ATmega168__) UBRR0H = ((F_CPU / 16 + baud / 2) / baud - 1) >> 8; UBRR0L = ((F_CPU / 16 + baud / 2) / baud - 1); // enable rx and tx sbi(UCSR0B, RXEN0); sbi(UCSR0B, TXEN0); // enable interrupt on complete reception of a byte sbi(UCSR0B, RXCIE0); #else UBRRH = ((F_CPU / 16 + baud / 2) / baud - 1) >> 8; UBRRL = ((F_CPU / 16 + baud / 2) / baud - 1); // UCSRB = (1<