
main.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000092  00000000  00000000  00000074  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .bss          00000002  00800060  00800060  00000106  2**0
                  ALLOC
  2 .debug_aranges 00000020  00000000  00000000  00000106  2**0
                  CONTENTS, READONLY, DEBUGGING
  3 .debug_pubnames 00000024  00000000  00000000  00000126  2**0
                  CONTENTS, READONLY, DEBUGGING
  4 .debug_info   00000106  00000000  00000000  0000014a  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_abbrev 000000c1  00000000  00000000  00000250  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_line   00000101  00000000  00000000  00000311  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_frame  00000020  00000000  00000000  00000414  2**2
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_str    000000c4  00000000  00000000  00000434  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_loc    00000038  00000000  00000000  000004f8  2**0
                  CONTENTS, READONLY, DEBUGGING

Disassembly of section .text:

00000000 <__vectors>:
   0:	12 c0       	rjmp	.+36     	; 0x26 <__ctors_end>
   2:	1f c0       	rjmp	.+62     	; 0x42 <__bad_interrupt>
   4:	1e c0       	rjmp	.+60     	; 0x42 <__bad_interrupt>
   6:	1d c0       	rjmp	.+58     	; 0x42 <__bad_interrupt>
   8:	1c c0       	rjmp	.+56     	; 0x42 <__bad_interrupt>
   a:	1b c0       	rjmp	.+54     	; 0x42 <__bad_interrupt>
   c:	1a c0       	rjmp	.+52     	; 0x42 <__bad_interrupt>
   e:	19 c0       	rjmp	.+50     	; 0x42 <__bad_interrupt>
  10:	18 c0       	rjmp	.+48     	; 0x42 <__bad_interrupt>
  12:	17 c0       	rjmp	.+46     	; 0x42 <__bad_interrupt>
  14:	16 c0       	rjmp	.+44     	; 0x42 <__bad_interrupt>
  16:	15 c0       	rjmp	.+42     	; 0x42 <__bad_interrupt>
  18:	14 c0       	rjmp	.+40     	; 0x42 <__bad_interrupt>
  1a:	13 c0       	rjmp	.+38     	; 0x42 <__bad_interrupt>
  1c:	12 c0       	rjmp	.+36     	; 0x42 <__bad_interrupt>
  1e:	11 c0       	rjmp	.+34     	; 0x42 <__bad_interrupt>
  20:	10 c0       	rjmp	.+32     	; 0x42 <__bad_interrupt>
  22:	0f c0       	rjmp	.+30     	; 0x42 <__bad_interrupt>
  24:	0e c0       	rjmp	.+28     	; 0x42 <__bad_interrupt>

00000026 <__ctors_end>:
  26:	11 24       	eor	r1, r1
  28:	1f be       	out	0x3f, r1	; 63
  2a:	cf ed       	ldi	r28, 0xDF	; 223
  2c:	cd bf       	out	0x3d, r28	; 61

0000002e <__do_clear_bss>:
  2e:	10 e0       	ldi	r17, 0x00	; 0
  30:	a0 e6       	ldi	r26, 0x60	; 96
  32:	b0 e0       	ldi	r27, 0x00	; 0
  34:	01 c0       	rjmp	.+2      	; 0x38 <.do_clear_bss_start>

00000036 <.do_clear_bss_loop>:
  36:	1d 92       	st	X+, r1

00000038 <.do_clear_bss_start>:
  38:	a2 36       	cpi	r26, 0x62	; 98
  3a:	b1 07       	cpc	r27, r17
  3c:	e1 f7       	brne	.-8      	; 0x36 <.do_clear_bss_loop>
  3e:	02 d0       	rcall	.+4      	; 0x44 <main>
  40:	26 c0       	rjmp	.+76     	; 0x8e <_exit>

00000042 <__bad_interrupt>:
  42:	de cf       	rjmp	.-68     	; 0x0 <__vectors>

00000044 <main>:
#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;//порт В как выход (диоды)
  44:	8f ef       	ldi	r24, 0xFF	; 255
  46:	87 bb       	out	0x17, r24	; 23
 DDRD=0X00;//порт D как вход (кнопки)
  48:	11 ba       	out	0x11, r1	; 17
 PORTB=0X00;// обнуляем порт B
  4a:	18 ba       	out	0x18, r1	; 24
 PORTD=0XFF;// осуществляем подтяжку внутреннего резистора 
  4c:	82 bb       	out	0x12, r24	; 18
 uint32_t baud=9600;// установка скорости передачи 9600 бит/с
 int baudrate=(F_CPU/(16*baud))-1; //вычисление значения для регистра скорости передачи UBRR 
 UBRRH = (unsigned char)(baudrate>>8);//присваивание значения старшему байту регистра UBRR
  4e:	12 b8       	out	0x02, r1	; 2
 UBRRL = (unsigned char) baudrate;//присваивание значения младшему байту регистра UBRR
  50:	83 e3       	ldi	r24, 0x33	; 51
  52:	89 b9       	out	0x09, r24	; 9
 UCSRA=0x00;// все флаги регистра  сброшены в ноль, удвоение скорости нет, режим мультипроцессорного обмена выключен
  54:	1b b8       	out	0x0b, r1	; 11
 UCSRB=0x18;//включение приемника и передатчика USART
  56:	88 e1       	ldi	r24, 0x18	; 24
  58:	8a b9       	out	0x0a, r24	; 10
 UCSRC=0x06;//асинхронный режим,нет проверки на четность,1 стоповый бит,8 бит данных 
  5a:	86 e0       	ldi	r24, 0x06	; 6
  5c:	83 b9       	out	0x03, r24	; 3
     if(UCSRB&((1<<FE)|(1<<DOR)|(1<<UPE))){return -1;}// при ошибке кадрирования, переполнении или ошибке в принятых данных, функция приема вернет значение -1
     return resl;// в случае успешного приема данных возвращает 1 байт полученных данных
    }
while (1)//задаем бесконечный цикл
    { 
	 PORTB&=(1<<(USART_Receive()-48));
  5e:	41 e0       	ldi	r20, 0x01	; 1
  60:	50 e0       	ldi	r21, 0x00	; 0
  62:	28 b3       	in	r18, 0x18	; 24
    {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 нет непрочитанных данных
  64:	5f 9b       	sbis	0x0b, 7	; 11
  66:	fe cf       	rjmp	.-4      	; 0x64 <main+0x20>
     resl=UDR;//если в регистре UDR есть непрочитанные данные записывает в переменную значение регистра
  68:	9c b1       	in	r25, 0x0c	; 12
     if(UCSRB&((1<<FE)|(1<<DOR)|(1<<UPE))){return -1;}// при ошибке кадрирования, переполнении или ошибке в принятых данных, функция приема вернет значение -1
  6a:	8a b1       	in	r24, 0x0a	; 10
  6c:	8c 71       	andi	r24, 0x1C	; 28
  6e:	19 f0       	breq	.+6      	; 0x76 <main+0x32>
  70:	8f ef       	ldi	r24, 0xFF	; 255
  72:	9f ef       	ldi	r25, 0xFF	; 255
  74:	02 c0       	rjmp	.+4      	; 0x7a <main+0x36>
     UDR=data;// если регистр данных пуст запись в регистр данных UDR данных для отправки по USART
    }
unsigned int USART_Receive(void)//функция приема данных по интерфейсу USART
    {unsigned int resl;//объявляет беззнаковую целочисленную переменную resl, размером 16 бит
     while (!(UCSRA&(1<<RXC))){};// бесконечный цикл, если в регистре UDR нет непрочитанных данных
     resl=UDR;//если в регистре UDR есть непрочитанные данные записывает в переменную значение регистра
  76:	89 2f       	mov	r24, r25
  78:	90 e0       	ldi	r25, 0x00	; 0
     if(UCSRB&((1<<FE)|(1<<DOR)|(1<<UPE))){return -1;}// при ошибке кадрирования, переполнении или ошибке в принятых данных, функция приема вернет значение -1
     return resl;// в случае успешного приема данных возвращает 1 байт полученных данных
    }
while (1)//задаем бесконечный цикл
    { 
	 PORTB&=(1<<(USART_Receive()-48));
  7a:	c0 97       	sbiw	r24, 0x30	; 48
  7c:	ba 01       	movw	r22, r20
  7e:	02 c0       	rjmp	.+4      	; 0x84 <main+0x40>
  80:	66 0f       	add	r22, r22
  82:	77 1f       	adc	r23, r23
  84:	8a 95       	dec	r24
  86:	e2 f7       	brpl	.-8      	; 0x80 <main+0x3c>
  88:	26 23       	and	r18, r22
  8a:	28 bb       	out	0x18, r18	; 24
  8c:	ea cf       	rjmp	.-44     	; 0x62 <main+0x1e>

0000008e <_exit>:
  8e:	f8 94       	cli

00000090 <__stop_program>:
  90:	ff cf       	rjmp	.-2      	; 0x90 <__stop_program>
