#include <avr/io.h>//подключаем библиотеку ATtiny2313
#include <Util/delay.h>//подключаем библиотеку функции задержки
#define F_CPU 8000000UL // кварц 8 MHz
void USART_Transmit (unsigned int data);//объявляем функцию передачи
unsigned int USART_Receive(void);//объявляем функцию приема
int unsigned resl;//объявляем беззнаковую целочисленную переменную resl
int main (void)// главная функция программы
{DDRB=0XFF;//порт В как выход (диоды)
 DDRD=0X00;//порт D как вход (кнопки)
 PORTB=0X00;// обнуляем порт B
 PORTD=0XFF;// осуществляем подтяжку внутреннего резистора 
 uint32_t baud=9600;// установка скорости передачи 9600 бит/с
 int baudrate=(F_CPU/(16*baud))-1; //вычисление значения для регистра скорости передачи UBRR 
 UBRRH = (unsigned char)(baudrate>>8);//присваивание значения старшему байту регистра UBRR
 UBRRL = (unsigned char) baudrate;//присваивание значения младшему байту регистра UBRR
 UCSRA=0x00;// все флаги регистра  сброшены в ноль, удвоение скорости нет, режим мультипроцессорного обмена выключен
 UCSRB=0x18;//включение приемника и передатчика USART
 UCSRC=0x06;//асинхронный режим,нет проверки на четность,1 стоповый бит,8 бит данных 
  
void USART_Transmit (unsigned int data)//функция отправки данных по интерфейсу USART
    {while (!(UCSRA&(1<<UDRE))){};// бесконечный цикл, если регистр данных UDR полон
     UDR=data;// если регистр данных пуст запись в регистр данных UDR данных для отправки по USART
    }
unsigned int USART_Receive(void)//функция приема данных по интерфейсу USART
    {unsigned int resl;//объявляет беззнаковую целочисленную переменную resl, размером 16 бит
     while (!(UCSRA&(1<<RXC))){};// бесконечный цикл, если в регистре UDR нет непрочитанных данных
     resl=UDR;//если в регистре UDR есть непрочитанные данные записывает в переменную значение регистра
     if(UCSRB&((1<<FE)|(1<<DOR)|(1<<UPE))){return -1;}// при ошибке кадрирования, переполнении или ошибке в принятых данных, функция приема вернет значение -1
     return resl;// в случае успешного приема данных возвращает 1 байт полученных данных
    }
while (1)//задаем бесконечный цикл
    { 
	 PORTB&=(1<<(USART_Receive()-48));// загорается соответсвующий отправленным данным номер светодиода
    }
 }