#include <avr/io.h>
#include <util/delay.h>
#define F_CPU 16000000UL
#define baud 9600
#define ubrr ((F_CPU / (baud * 16UL)) - 1)
void uart_init(void)
{
UBRR0H = (ubrr >> 8);
UBRR0L = ubrr;
UCSR0B |= (1 << RXEN0) | (1 << TXEN0);
UCSR0C |= (1 << UCSZ01) | (1 << UCSZ00);
}
void data_transmit(unsigned char data)
{
while(!(UCSR0A & (1 << UDRE0)));
UDR0 = data;
}
unsigned char data_recieve(void)
{
while(!(UCSR0A & (1 << RXC0)));
return UDR0;
}
void send_data(unsigned char *string)
{
while(*string != '\0')
{
data_transmit(*string++);
}
}
void flush_data(void)
{
while(UCSR0A & (1 << RXC0))
{
volatile unsigned char dummy = UDR0;
(void)dummy;
}
}
int main(void)
{
uart_init();
DDRD |= (1 << PD2);
PORTD &= ~(1 << PD2);
while(1)
{
unsigned char temp = data_recieve();
data_transmit(temp);
if(temp == '1')
{
PORTD |= (1 << PD2);
data_transmit('\r');
data_transmit('\n');
send_data("led turned on");
}
else if(temp == '0')
{
PORTD &= ~(1 << PD2);
data_transmit('\r');
data_transmit('\n');
send_data("led turned off");
}
data_transmit('\r');
data_transmit('\n');
}
return 0;
}