
main.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         0000008a  00000000  00000000  00000074  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .bss          00000002  00800060  00800060  000000fe  2**0
                  ALLOC
  2 .debug_aranges 00000020  00000000  00000000  000000fe  2**0
                  CONTENTS, READONLY, DEBUGGING
  3 .debug_pubnames 00000024  00000000  00000000  0000011e  2**0
                  CONTENTS, READONLY, DEBUGGING
  4 .debug_info   000001cd  00000000  00000000  00000142  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_abbrev 00000127  00000000  00000000  0000030f  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_line   000001c0  00000000  00000000  00000436  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_frame  00000020  00000000  00000000  000005f8  2**2
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_str    00000116  00000000  00000000  00000618  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_loc    00000028  00000000  00000000  0000072e  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_ranges 00000048  00000000  00000000  00000756  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:	22 c0       	rjmp	.+68     	; 0x86 <_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
     return resl;// в случае успешного приема данных возвращает 1 байт данных
    }
  while (1)//задаем бесконечный цикл
  
   {  USART_Receive();// прослушиваем линию на прием данных
    PORTB=resl;//если данные приняты запишем их в регистр PORTB
  5e:	20 91 60 00 	lds	r18, 0x0060
    milliseconds can be achieved.
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
  62:	48 ec       	ldi	r20, 0xC8	; 200
  64:	50 e0       	ldi	r21, 0x00	; 0
    {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 нет непрочитанных данных
  66:	5f 9b       	sbis	0x0b, 7	; 11
  68:	fe cf       	rjmp	.-4      	; 0x66 <main+0x22>
     resl=UDR;//если в регистре UDR есть непрочитанные данные записывает в переменную значение регистра
  6a:	8c b1       	in	r24, 0x0c	; 12
     if(UCSRB&((1<<FE)|(1<<DOR)|(1<<UPE))){return -1;}// при ошибке кадрирования, переполнении или ошибке в принятых данных, функция приема вернет значение -1
  6c:	8a b1       	in	r24, 0x0a	; 10
     return resl;// в случае успешного приема данных возвращает 1 байт данных
    }
  while (1)//задаем бесконечный цикл
  
   {  USART_Receive();// прослушиваем линию на прием данных
    PORTB=resl;//если данные приняты запишем их в регистр PORTB
  6e:	28 bb       	out	0x18, r18	; 24
  UCSRA=0x00;// все флаги регистра  сброшены в ноль, удвоение скорости нет, режим мультипроцессорного обмена выключен
  UCSRB=0x18;//включение приемника и передатчика USART
  UCSRC=0x06;//асинхронный режим,нет проверки на четность,1 стоповый бит,8 бит данных 
  
void USART_Transmit (unsigned int data)//функция отправки данных по интерфейсу USART
    {while (!(UCSRA&(1<<UDRE))){};// бесконечный цикл, если регистр данных UDR полон
  70:	5d 9b       	sbis	0x0b, 5	; 11
  72:	fe cf       	rjmp	.-4      	; 0x70 <main+0x2c>
     UDR=data;// если регистр данных пуст запись в регистр данных UDR данных для отправки по USART
  74:	2c b9       	out	0x0c, r18	; 12
  76:	88 e8       	ldi	r24, 0x88	; 136
  78:	93 e1       	ldi	r25, 0x13	; 19
  7a:	fa 01       	movw	r30, r20
  7c:	31 97       	sbiw	r30, 0x01	; 1
  7e:	f1 f7       	brne	.-4      	; 0x7c <main+0x38>
		__ticks = (uint16_t) (__ms * 10.0);
		while(__ticks)
		{
			// wait 1/10 ms
			_delay_loop_2(((F_CPU) / 4e3) / 10);
			__ticks --;
  80:	01 97       	sbiw	r24, 0x01	; 1
		__ticks = 1;
	else if (__tmp > 65535)
	{
		//	__ticks = requested delay in 1/10 ms
		__ticks = (uint16_t) (__ms * 10.0);
		while(__ticks)
  82:	d9 f7       	brne	.-10     	; 0x7a <main+0x36>
  84:	f0 cf       	rjmp	.-32     	; 0x66 <main+0x22>

00000086 <_exit>:
  86:	f8 94       	cli

00000088 <__stop_program>:
  88:	ff cf       	rjmp	.-2      	; 0x88 <__stop_program>
