Все что находится в скобках мне непонятно.
в общем непонятен олгаритм программы что куда и почему.
	.include "c:\avr\avrasm\appnotes\tn2313def.inc"

					; Арифметические регистры

	.def	temp=r16		; Заменил на temp, чтобы мне было удобней
	.def	temp1=r17		; Аналогично
	.def	temp2=r25		; Аналогично
	.def	temp3=r18		; Добавил для понимания
	.CSEG				; Начало программы сигмента
(.org 0)				; Задаёт начальный адрес (такой код есть ниже, но почему здесь он не нужен?)
(rjmp Reset            
rjmp INT_0
rjmp INT_1
rjmp Timer1_capt1
rjmp Timer1_comp1
rjmp Timer1_OVF1
rjmp Timer0_OVF0
rjmp UART_RX
rjmp UART_UDRE
rjmp UART_TX
rjmp ANA_COMP)				; я имею в виду вот эти вектора
	RESET:				; метка вектора прерывания ресет (а где сами вектора прерывания? т.е. rjmp Reset (или вектора прерывания ставит сам компилятор?))
									
		RJMP	START		; переход на метку старт
		RETI			; On Interrupt 0 (откуда компилятор узнает без вектора, что при прерывании int0 он должен перейти сюда?)
		RETI			; On Interrupt 1 (аналогичный вопрос)

		IJMP	(метка)		; Переход на обработчик по адресу в паре ZH,ZL (нет метки, куда он перейдёт?)
		RETI			; Timer 1A compare                             (нет вектора) 
		ADIW	XL,1		; Timer 1 overflow простое наращивание старшей части счетчика длительности (Сложить непосредственное значение со словом, т.е. получается (XL)+1 на выходе, зачем?)
		RETI			; Timer 0 overflow			       (нет вектора)
;************************************************
;Fo:
;	.DB	$01,$31, $2D,$00	; Fo=20'000'000 Hz (это как я понимаю нужно разкоментировать и подставить свои значения?)
;************************************************
	START:
		CLI			; Глобальный запрет прерываний
		LDI	temp,LOW(RAMEND); (можно записать вот так (ldi Temp,RamEnd) или разница есть?) инициализация стека
		OUT	SPL,temp	; вывод в SPL

		CLR	temp1		; Очистка R17 т.е. 00000000
		SER	temp		; Установить все биты регистра т.е. 0b11111111
		OUT	PORTD,temp	; Выводим на индикацию в порд D 0b11111111(зачем?)
		OUT	DDRD,temp	; Настраиваем порт D на выход
		LDI	temp,0b00000001 ; Загружаем константу 0b00000001
		OUT	DDRD,temp       ; опять настраиваем порт D так чтобы все кроме PD1 работали на вход. (зачем? если уже ранее настроили все на вывод? Тем более нам как раз PD1 нужен как вход)
		
;**********************************************************************
	SCHIT:				; Метка
		CLI			; глобальный запрет прерывания
		LDI	temp2,0b00000001; Загружаем константу 0b00000001

		CLR	temp1           ; Очистка R17 т.е. 0b00000000
		OUT	TCCR1B,temp1	; Если прочитать эту страничку "http://radiokot.ru/start/mcu_fpga/avr/11/"
		OUT	TCCR1A,temp1    ; станет ясно, что этот регистр отвечает за управление таймером 1. вводя значение 0b00000000, мы просто всё отклюачаем.(или я не прав?)

		OUT	TCNT1H,temp1    ; Обнуление теймера
		OUT	TCNT1L,temp1	;
		
		CLR	XH
		CLR	XL		; старшая часть счетчика длительности (обнуляем счётчик)

		LDI	temp,0b00100000
		OUT	MCUCR,temp	; разрешение SLEEP IDLE
		
		LDI	temp3,0b10001000; OVER_T1+CAPT
		OUT	TIMSK,temp3	; 1)разрешение прерывания защелки 1-го таймера 2)разрешение прерывания по переполнению 1-го таймера (как я понимаю именно здесь назначается что прерывание будет по спаду или импульсу?)
							
		LDI	temp,0b10000000	;
		OUT	TCCR1B,temp	; подготовка к приему фронта сигнала на ICP разрешаем бит ICNC1 который отвечает по датащиту за "фильтр" (прошу прощение за перевод с АНГ.)
					
		
		CLT			; сброс пользовательского флага, по которому программа (где об этом можно подробно прочитать не понимаю зачем это здесь!?)
					; определяет конец измерения. См. ниже

		LDI	ZH,HIGH(CAPT)	;
		LDI	ZL,LOW (CAPT)	; Установка адреса, по которому будет переход на обработчик
					; прерывания CAPT по фронту сигнала по команде IJMP
		
		SER	temp		; Установка всех битов регистра т.е. 0b11111111
		OUT	TIFR,temp	; сброс FLAG's (почему сброс если наоборт выводим 0b11111111?)
		
		SEI			; Разрешить прерывания, глобально
	WAIT:
		SLEEP			; Ждем'с прерываний
		BRTC	WAIT		; было прерывание, но Т-флаг очищен- переход на ожидание

		CLI			; Т-флаг установлен, значит конец измерения (запрет глобального прерывания?)
		CLT			; T флаг очищен (вообще не понимаю то очищен то установлен???????)

	
		RJMP	SCHIT
;************************************************
;************************************************
	CAPT:
		OUT	TCCR1B,temp2	; ((старт T1 с 0 и установка режима срабатывания CAPT по спаду импульса, какое значение отвечает за то , что это именно спад???)).

 (здесь назначаем бит CS10 который отвечает за предделитель
 CS12 CS11 CS10 Description
  0    0    0   No clock source (Timer/Counter stopped).	вырезка из датащит обоих камней
  0    0    1   clkI/O/1 (No prescaling)

так как приходит 0b0000(001) значит нет делителя.??)



;		ADIW	ZL,0b00010000   ; опять складываем значение (ZL) с $10 (зачем?)
		LDI	ZH,HIGH(CAPT2)
		LDI	ZL,LOW (CAPT2)	; Установка адреса, по которому будет переход на обработчик
					; Прерывания CAPT по спаду сигнала по команде IJMP
		SER	temp		; устанавливаем все биты регистра т.е. 0b11111111		
		OUT	TIFR,temp	; Сброс FLAG's (почему сброс если наоборт выводим 0b11111111?)

		RETI			; Выход из программы прерывания, все глобальные прерывания разрешены.
;	.ORG	CAPT+$10
	CAPT2:
		OUT	TCCR1B,temp1	; Конец измерения. Останавливаем таймер и 
		OUT	TIMSK,temp1	; Запрещаем от него прерывания
		
		IN	R4,ICR1L	; Вообще не понимаю эти 4-и строчки
		IN	R3,ICR1H	; Длительность импульса
		MOV	R2,XL
		MOV	R1,XH
		
		SET			; установка Т-флага, свидетельстующего об окончании измерения

		RETI			; Выход из программы прерывания, все глобальные прерывания разрешены.
;************************************************
;************************************************

