
.include "m8def.inc"	;AT8-16, кварц4МГц, угол 30


.org 0				;начало кода
	rjmp start
.org 1				;нога int0
	rjmp datchik1
.org 2				;нога int1
	rjmp datchik2
.org 6				;Output Compare1A Interrupt Vector Address
	rjmp timer1compare
.org 8				;переполнение timer1
	rjmp timer1
.org 14				;прер. АЦП
	rjmp adc_complete;подпрограмма АЦП (срабатывает редко)


start:
;=========Стек===========
ldi R16, low(RAMEND) ;низ стека
out SPL, R16 
ldi R16, high(RAMEND);верх стека
out SPH, R16
;====установка портов====
ldi R16, 0b00000011    
out ddrC, R16		;PC
ldi R16, 0b11111100     ;Pc0-flyback,Pc1-слеп2,
out PortC, R16		;
ldi R16, 0b01010010     ;PD4-слеп1,PD6-stopDC
out ddrD, R16	  ;PD2,PD3-signal
ldi R16, 0b01101101 
out PortD, R16	  ;подтягивающие резиторы
ldi R16, 0b00000111     ;pb0-искра,pb1-тиристор,Pb2-диод
out ddrB, R16	 
ldi R16, 0b11111010   
out PortB, R16		;подтягивающие резисторы
sbi ACSR, ACD       ;отключаем компаратор
;========регистры========
clr R0				;умножение
clr R1				;умножение
clr R2				;"0",математика
clr R3                 
clr R4				;АЦП
clr R5              ;trolling
clr R6              ;trolling
clr R7				;OCR1AH
clr R8				;OCR1AL,искра
clr R9				;TCNT1H
clr R10				;TCNT1L,датчик1
clr R11				;TCNT1H
clr R12				;TCNT1L,датчик2
clr R13				;дат.2
clr R14				;дат.2
clr R15				;sreg
clr R16
clr R17
clr R18             ;задержка опускания искры
clr R19			
ldi R20,0b10000000	        ;РОН статуса
clr R21				;РОН рассчета задержки для ОЗУ
clr R22			
ldi R23,40		    ;длинна метки,х0.7°,160=112°
clr R24				;1023/длина метки
clr R25				;множитель задержки из ОЗУ
clr R26				;РОН "lowX",адресация ОЗУ,LD
clr R27				;POH "highX",адресация ОЗУ,LD
clr R28             
ldi R29,8			;Ацп среднее при пуске
clr R30
;===таблица в озу===
rcall FuozTable1
rcall FuozTable2
rcall FuozTable3	;таблицы задержек в ОЗУ
;1023/R23=R24
ldi R16, high(1023)
ldi R17, low(1023)
divide:			;цикл деления
cp R17,R23		;сравниваем младшие
cpc R16,R2		;и старшие байты
brlo exit_		;если делимое меньше,выход
sub R17,R23		;иначе вычитаем
sbc R16,R2		;младшие и старшие байты
inc R24			;+1 к результату
rjmp divide		;возвращаемся к началу цикла
exit_:			;метка выхода из цикла
;========Timer=======
ldi R16, 0b00000010	;задержка 8,для счета при 4МГц
out TCCR1B, R16 	;пуск таймера 16-бит
ldi R16, 0b00010100
out TIMSK, R16 		;настройки 16-бит счетчика
;=========АЦП========
ldi R16, 0b01100010	;AD_Converter ADMUX byte
out ADMUX, R16
ldi R16, 0b10001101	;AD_Converter ADCSRA byte,125kHz
out ADCSRA, R16		;первый замер АЦП 800т,следующие 416т
;===прерывания ног===
ldi R16, 0b11000000
out GICR, R16		;вкл.прерывания по int0,int1
ldi R16, 0b00001110
out MCUCR, R16		;прерывание по падающему фронту
sei 				;вкл. прерывания в ЦП
;==конец инициализации устройств, далее основной код==
//////////////////////////////////////////////////////////
;таблица контрольных бит,РОН20,УОЗ
;R20/7-холостые обороты,переполнение 16-бит счетчика
;R20/6-
;R20/5-обработан импульс датчика1,счет математики разрешен
;R20/4-расчет искры завершен,вкл.сравнение счетчика
;R20/3-холостые обороты,датчик2[1-разр,0-зап]
;R20/2-обработан импульс датчика2,счет математики разрешен
;R20/1-АЦП,коректор,замер сделан
;R20/0-
//////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////
main:
;задержка искры и flyback(6mks/1)
;не отнимая времени ЦП на выполнение кода
sbic PinC,0		;выполнить если бит порта "1"
inc R18		;+1
cpi R18, 75	;100mks,искра
brlo main2		;перейти если меньше - или откл искру
cbi PortB,0	 ;лог"0"на выход "искра"
cbi PortC,0	;лог"0"на выход "flyback"
clr R18			
main2:

;дальше условия счета математики искры
sbrs R20, 2		;if bitX,n='0' then do
rjmp main
rcall norm		;счет математики
rjmp main
nop
nop
nop
;-------------------------------------------------------------
;----------------далее только подпрограммы--------------------
;-------------------------------------------------------------
;==переполнение 16-бит счетчика==
;переполнение означает что частота оборотов ниже 480/мин
timer1:
in R15,SREG		;сохраним SREG
ori R20, 0b10000000	;sbiR20/7,контроль
out SREG,R15	;восстановим SREG
reti

;=совпадение сравнения OCR1A, 16-бит счетчика=
;нормальная,расчетная искра по счетчику
timer1compare:
in R15,SREG		;сохраним SREG
sbrs R20, 4		;if bitX,n='0' then do
rjmp d1propusk
sbi PortC,0		;лог"1"на выход "flyback"
sbi PortB,0	     ;лог"1"на выход "искра"
andi R20, 0b11001011;cbiR20/4,искра
out SREG,R15	;восстановим SREG
reti

;===первый сигнал датчика===
datchik1:
in R15,SREG		;сохраним SREG
out TCNT1H, R2	;R2=0
out TCNT1L, R2	;обнуляем счетчик
ori R20, 0b00100000	;sbiR20/5, контроль
d1propusk:
out SREG,R15	;восстановим SREG
reti

;===второй сигнал датчика===
datchik2:
in R15,SREG		;сохраним SREG
in R12, TCNT1L
in R11, TCNT1H	;считываем показания счетчика
sbrs R20, 5		;первая метка была?
rjmp d1propusk	;ошибка,вых.
;если есть разрешение,считаем 0.7°

mul R11,R24		;угол*n/256=2.8°
mov R13,R1		;Hbyte
mov R14,R0		;Lbyte
mul R12,R24
add R14,R1
adc R13,R2		;R2=0
lsr R13
ror R14  		;2.8°/2=1.4°
mov R9,R14		;расчетные с метки
cp R13,R2		;R13=0
breq da			;если обороты<480/мин
ser R16			;РОН=0xFF
mov R9,R16
da:
ori R20,  0b00000100              ;sbiR20/52,контроль
andi R20, 0b10000111             ;cbiR20/3,контроль
;показания счетчика записаны,контрольный бит
;готовности расчета по второму сигналу
out SREG,R15	;восстановим SREG
reti


;====АЦП замер сделан====
adc_complete:
in R15,SREG		
in R4, ADCL	
in R4, ADCH
lsr R4			;1/2=128
lsr R4			;1/2=64
lsr R4			;1/2=32
lsr R4			;1/2=16
ori R20, 0b00000010;sbiR20/1,АЦП,контроль
out SREG,R15	
reti


;====нормальные обороты=====
;=определяем задержку искры=
norm:
mov R21, R9		;скопируем значение счетчика 16-бит,Hbyte
com R21			;инвертируем число
;теперь имеем 255 значений счетчика оборотов
;наименьшее значение - медленные обороты, большее - большие
;для усреднения ступенек таблицы выборка делаеться
;через некоторое число точек, для равномерности
cpi R21, 236	;сравнение РОН с контстантой
brsh rpm6100	;если больше или равно
cpi R21, 234	;сравнение РОН с контстантой
brsh rpm5600	;если больше или равно
cpi R21, 232	;сравнение РОН с контстантой
brsh rpm5100	;если больше или равно
cpi R21, 230	;сравнение РОН с контстантой
brsh rpm4700		;если больше или равно
cpi R21, 227	;сравнение РОН с контстантой
brsh rpm4200	;если больше или равно
cpi R21, 225	;сравнение РОН с контстантой
brsh rpm3900	;если больше или равно
cpi R21, 222	;сравнение РОН с контстантой
brsh rpm3500		;если больше или равно
cpi R21, 218	;сравнение РОН с контстантой
brsh rpm3200		;если больше или равно
cpi R21, 216	;сравнение РОН с контстантой
brsh rpm3000		;если больше или равно
cpi R21, 213	;сравнение РОН с контстантой
brsh rpm2800		;если больше или равно
cpi R21, 210	;сравнение РОН с контстантой
brsh rpm2600		;если больше или равно
cpi R21, 208	;сравнение РОН с контстантой
brsh rpm2500		;если больше или равно
cpi R21, 206	;сравнение РОН с контстантой
brsh rpm2400		;если больше или равно
cpi R21, 204	;сравнение РОН с контстантой
brsh rpm2300		;если больше или равно
cpi R21, 202	;сравнение РОН с контстантой
brsh rpm2200		;если больше или равно
cpi R21, 199	;сравнение РОН с контстантой
brsh rpm2100		;если больше или равно
cpi R21, 196	;сравнение РОН с контстантой
brsh rpm2000		;если больше или равно
cpi R21, 193	;сравнение РОН с контстантой
brsh rpm1900		;если больше или равно
cpi R21, 190	;сравнение РОН с контстантой
brsh rpm1800		;если больше или равно
cpi R21, 186	;сравнение РОН с контстантой
brsh rpm1700		;если больше или равно
cpi R21, 182	;сравнение РОН с контстантой
brsh rpm1600		;если больше или равно
cpi R21, 177	;сравнение РОН с контстантой
brsh rpm1500		;если больше или равно
cpi R21, 171	;сравнение РОН с контстантой
brsh rpm1400		;если больше или равно
cpi R21, 165	;сравнение РОН с контстантой
brsh rpm1300		;если больше или равно
cpi R21, 157	;сравнение РОН с контстантой
brsh rpm1200		;если больше или равно
cpi R21, 148	;сравнение РОН с контстантой
brsh rpm1100		;если больше или равно
cpi R21, 138	;сравнение РОН с контстантой
brsh rpm1000		;если больше или равно
cpi R21, 125	;сравнение РОН с контстантой
brsh rpm900		;если больше или равно
cpi R21, 109	;сравнение РОН с контстантой
brsh rpm800		;если больше или равно
cpi R21, 60	;сравнение РОН с контстантой
brsh rpm600		;если больше или равно
cpi R21, 21	;сравнение РОН с контстантой
brsh rpm500		;если больше или равно
clr R26			;если 460 и меньше об/мин
rjmp RpmEnd		;всего 32строки
////////////////////////////////////////////////////////
rpm6100:		;обороты
ldi R26, 0x1F	;задаем адрес ОЗУ "lowХ"
rjmp RpmEnd		;метка "дальше"
rpm5600:
ldi R26, 0x1E
rjmp RpmEnd
rpm5100:
ldi R26, 0x1D
rjmp RpmEnd
rpm4700:
ldi R26, 0x1C
rjmp RpmEnd
rpm4200:
ldi R26, 0x1B
rjmp RpmEnd
rpm3900:
ldi R26, 0x1A
rjmp RpmEnd
rpm3500:
ldi R26, 0x19
rjmp RpmEnd
rpm3200:
ldi R26, 0x18
rjmp RpmEnd
rpm3000:
ldi R26, 0x17
rjmp RpmEnd
rpm2800:
ldi R26, 0x16
rjmp RpmEnd
rpm2600:
ldi R26, 0x15
rjmp RpmEnd
rpm2500:
ldi R26, 0x14
rjmp RpmEnd
rpm2400:
ldi R26, 0x13
rjmp RpmEnd
rpm2300:
ldi R26, 0x12
rjmp RpmEnd
rpm2200:
ldi R26, 0x11
rjmp RpmEnd
rpm2100:
ldi R26, 0x10
rjmp RpmEnd
rpm2000:
ldi R26, 0x0F
rjmp RpmEnd
rpm1900:
ldi R26, 0x0E
rjmp RpmEnd
rpm1800:
ldi R26, 0x0D
rjmp RpmEnd
rpm1700:
ldi R26, 0x0C
rjmp RpmEnd
rpm1600:
ldi R26, 0x0B
rjmp RpmEnd
rpm1500:
ldi R26, 0x0A
rjmp RpmEnd
rpm1400:
ldi R26, 0x09
rjmp RpmEnd
rpm1300:
ldi R26, 0x08
rjmp RpmEnd
rpm1200:
ldi R26, 0x07
rjmp RpmEnd
rpm1100:
ldi R26, 0x06
rjmp RpmEnd
rpm1000:
ldi R26, 0x05
rjmp RpmEnd
rpm900:
ldi R26, 0x04
rjmp RpmEnd
rpm800:
ldi R26, 0x03
rjmp RpmEnd
rpm600:
ldi R26, 0x02
rjmp RpmEnd
rpm500:
ldi R26, 0x01
;адрес ОЗУ "lowХ" определен
;задействованно ОЗУ 0х0100-0х011F,32строки
RpmEnd:
;выбор таблицы УОЗ тумблером на"0"
;приоритет у нижних таблиц
ldi R27, 1		;задаем "highX"таблица№1
sbis PinC,5		;выполнить если бит порта "0"
ldi R27, 2		;задаем "highX"таблица№2
sbis PinC,4		;выполнить если бит порта "0"
ldi R27, 3		;задаем "highX"таблица№3
;адрес ОЗУ "HighХ" определен, чтение ОЗУ
ld R25, X		;байт из ОЗУ-R27:26 загружается в РОН25


cpi R25, 1		;"min" перейти если меньше
brlo iskra		;если задержка "0",искра без задержки

lsr R13
ror R14			;1.4°/2=0.7°
mul R14,R25
mov R8,R0
mov R7,R1
mul R13,R25
add R7,R0
add R8,R12		;прибавим счетчик
adc R7,R11
out OCR1AH, R7	;HighByte
out OCR1AL, R8	;LowByte
ori R20, 0b00010000	;sbiR20/4,контроль
andi R20,0b11010011;cbiR20/532,контроль
ret

;===искра без задержки,сразу по датчику===
;этот блок нужен когда задержка отсутствует
iskra:
sbi PortC,0		;лог"1"на выход "flyback"
sbi PortB,0		;лог"1"на выход "искра"
andi R20, 0b11000011;cbiR20/532,контроль
ret

//////////////////////////////////////////////////
//////////////////////////////////////////////////

;==таблица №1,углов опережения в ОЗУ==
;=======для метки 20°, шаг 0.7°=======
FuozTable1:
ldi R27, 0x01	;задаем "highX"=01
ldi R26, 0x00	;задаем "lowX"=00
;опережение при оборотах
;460 и ниже, об/мин
ldi R16, 56	;множитель
st X+, R16	;в ОЗУ, 0,8°
;500 об/мин
ldi R16, 55	;множитель
st X+, R16	;в ОЗУ, 1,5°
;600 об/мин
ldi R16, 54	;множитель
st X+, R16	;в ОЗУ, 2,2°
;800 об/мин
ldi R16, 53	;множитель
st X+, R16	;в ОЗУ, 2,9°
;900 об/мин
ldi R16, 52	;множитель
st X+, R16	;в ОЗУ, 3,6°
;1000 об/мин
ldi R16, 51	;множитель
st X+, R16	;в ОЗУ, 4,3°
;1100 об/мин
ldi R16, 51	;множитель
st X+, R16	;в ОЗУ, 4,3°
;1200 об/мин
ldi R16, 50	;множитель
st X+, R16	;в ОЗУ, 5°
;1300 об/мин
ldi R16, 49	;множитель
st X+, R16	;в ОЗУ, 5,7°
;1400 об/мин
ldi R16, 49	;множитель
st X+, R16	;в ОЗУ, 5,7°
;1500 об/мин
ldi R16, 48	;множитель
st X+, R16	;в ОЗУ, 6,4°
;1600 об/мин
ldi R16, 47	;множитель
st X+, R16	;в ОЗУ, 7,1°
;1700 об/мин
ldi R16, 46	;множитель
st X+, R16	;в ОЗУ, 7,8°
;1800 об/мин
ldi R16, 44	;множитель
st X+, R16	;в ОЗУ, 9,2°
;1900 об/мин
ldi R16, 41	;множитель
st X+, R16	;в ОЗУ, 11,3°
;2000 об/мин
ldi R16, 37	;множитель
st X+, R16	;в ОЗУ, 14,1°
;2100 об/мин
ldi R16, 33	;множитель
st X+, R16	;в ОЗУ, 16,9°
;2200 об/мин
ldi R16, 29	;множитель
st X+, R16	;в ОЗУ, 19,7°
;2300 об/мин
ldi R16, 26	;множитель
st X+, R16	;в ОЗУ, 21,8°
;2400 об/мин
ldi R16, 23	;множитель
st X+, R16	;в ОЗУ, 23,9°
;2500 об/мин
ldi R16, 20	;множитель
st X+, R16	;в ОЗУ, 26°
;2600 об/мин
ldi R16, 18	;множитель
st X+, R16	;в ОЗУ, 27,4°
;2800 об/мин
ldi R16, 14	;множитель
st X+, R16	;в ОЗУ, 30,2°
;3000 об/мин
ldi R16, 11	;множитель
st X+, R16	;в ОЗУ, 32,3°
;3200 об/мин
ldi R16, 9	;множитель
st X+, R16	;в ОЗУ, 33,7°
;3500 об/мин
ldi R16, 7	;множитель
st X+, R16	;в ОЗУ, 35,1°
;3900 об/мин
ldi R16, 6	;множитель
st X+, R16	;в ОЗУ, 35,8°
;4200 об/мин
ldi R16, 5	;множитель
st X+, R16	;в ОЗУ, 36,5°
;4700 об/мин
ldi R16, 4	;множитель
st X+, R16	;в ОЗУ, 37,2°
;5100 об/мин
ldi R16, 3	;множитель
st X+, R16	;в ОЗУ, 37,9°
;5600 об/мин
ldi R16, 3	;множитель
st X+, R16	;в ОЗУ, 37,9°
;6100 об/мин
ldi R16, 3	;множитель
st X+, R16	;в ОЗУ, 37,9°
ret		;возврат в программу

;==таблица №2,углов опережения в ОЗУ==
;=======для метки 20°, шаг 0.7°=======
FuozTable2:
ldi R27, 0x02	;задаем "highX"=02
ldi R26, 0x00	;задаем "lowX"=00
;опережение при оборотах
;460 и ниже, об/мин
ldi R16, 50	;множитель
st X+, R16	;в ОЗУ, 5°
;500 об/мин
ldi R16, 29	;множитель
st X+, R16	;в ОЗУ, 19,7°
;600 об/мин
ldi R16, 50	;множитель
st X+, R16	;в ОЗУ, 5°
;800 об/мин
ldi R16, 29	;множитель
st X+, R16	;в ОЗУ, 19,7°
;900 об/мин
ldi R16, 50	;множитель
st X+, R16	;в ОЗУ, 5°
;1000 об/мин
ldi R16, 29	;множитель
st X+, R16	;в ОЗУ, 19,7°
;1100 об/мин
ldi R16, 50	;множитель
st X+, R16	;в ОЗУ, 5°
;1200 об/мин
ldi R16, 29	;множитель
st X+, R16	;в ОЗУ, 19,7°
;1300 об/мин
ldi R16, 50	;множитель
st X+, R16	;в ОЗУ, 5°
;1400 об/мин
ldi R16, 29	;множитель
st X+, R16	;в ОЗУ, 19,7°
;1500 об/мин
ldi R16, 50	;множитель
st X+, R16	;в ОЗУ, 5°
;1600 об/мин
ldi R16, 29	;множитель
st X+, R16	;в ОЗУ, 19,7°
;1700 об/мин
ldi R16, 50	;множитель
st X+, R16	;в ОЗУ, 5°
;1800 об/мин
ldi R16, 29	;множитель
st X+, R16	;в ОЗУ, 19,7°
;1900 об/мин
ldi R16, 50	;множитель
st X+, R16	;в ОЗУ, 5°
;2000 об/мин
ldi R16, 29	;множитель
st X+, R16	;в ОЗУ, 19,7°
;2100 об/мин
ldi R16, 50	;множитель
st X+, R16	;в ОЗУ, 5°
;2200 об/мин
ldi R16, 29	;множитель
st X+, R16	;в ОЗУ, 19,7°
;2300 об/мин
ldi R16, 50	;множитель
st X+, R16	;в ОЗУ, 5°
;2400 об/мин
ldi R16, 29	;множитель
st X+, R16	;в ОЗУ, 19,7°
;2500 об/мин
ldi R16, 50	;множитель
st X+, R16	;в ОЗУ, 5°
;2600 об/мин
ldi R16, 29	;множитель
st X+, R16	;в ОЗУ, 19,7°
;2800 об/мин
ldi R16, 50	;множитель
st X+, R16	;в ОЗУ, 5°
;3000 об/мин
ldi R16, 14	;множитель
st X+, R16	;в ОЗУ, 30,2°
;3200 об/мин
ldi R16, 43	;множитель
st X+, R16	;в ОЗУ, 9,9°
;3500 об/мин
ldi R16, 14	;множитель
st X+, R16	;в ОЗУ, 30,2°
;3900 об/мин
ldi R16, 50	;множитель
st X+, R16	;в ОЗУ, 5°
;4200 об/мин
ldi R16, 7	;множитель
st X+, R16	;в ОЗУ, 35,1°
;4700 об/мин
ldi R16, 43	;множитель
st X+, R16	;в ОЗУ, 9,9°
;5100 об/мин
ldi R16, 14	;множитель
st X+, R16	;в ОЗУ, 30,2°
;5600 об/мин
ldi R16, 50	;множитель
st X+, R16	;в ОЗУ, 5°
;6100 об/мин
ldi R16, 0	;множитель
st X+, R16	;в ОЗУ, 40°
ret		;возврат в программу

;==таблица №3,углов опережения в ОЗУ==
;=======для метки 20°, шаг 0.7°=======
FuozTable3:
ldi R27, 0x03	;задаем "highX"=03
ldi R26, 0x00	;задаем "lowX"=00
;опережение при оборотах
;460 и ниже, об/мин
ldi R16, 57	;множитель
st X+, R16	;в ОЗУ, 0,1°
;500 об/мин
ldi R16, 57	;множитель
st X+, R16	;в ОЗУ, 0,1°
;600 об/мин
ldi R16, 56	;множитель
st X+, R16	;в ОЗУ, 0,8°
;800 об/мин
ldi R16, 55	;множитель
st X+, R16	;в ОЗУ, 1,5°
;900 об/мин
ldi R16, 54	;множитель
st X+, R16	;в ОЗУ, 2,2°
;1000 об/мин
ldi R16, 53	;множитель
st X+, R16	;в ОЗУ, 2,9°
;1100 об/мин
ldi R16, 53	;множитель
st X+, R16	;в ОЗУ, 2,9°
;1200 об/мин
ldi R16, 52	;множитель
st X+, R16	;в ОЗУ, 3,6°
;1300 об/мин
ldi R16, 51	;множитель
st X+, R16	;в ОЗУ, 4,3°
;1400 об/мин
ldi R16, 51	;множитель
st X+, R16	;в ОЗУ, 4,3°
;1500 об/мин
ldi R16, 50	;множитель
st X+, R16	;в ОЗУ, 5°
;1600 об/мин
ldi R16, 49	;множитель
st X+, R16	;в ОЗУ, 5,7°
;1700 об/мин
ldi R16, 48	;множитель
st X+, R16	;в ОЗУ, 6,4°
;1800 об/мин
ldi R16, 47	;множитель
st X+, R16	;в ОЗУ, 7,1°
;1900 об/мин
ldi R16, 44	;множитель
st X+, R16	;в ОЗУ, 9,2°
;2000 об/мин
ldi R16, 40	;множитель
st X+, R16	;в ОЗУ, 12°
;2100 об/мин
ldi R16, 37	;множитель
st X+, R16	;в ОЗУ, 14,1°
;2200 об/мин
ldi R16, 34	;множитель
st X+, R16	;в ОЗУ, 16,2°
;2300 об/мин
ldi R16, 31	;множитель
st X+, R16	;в ОЗУ, 18,3°
;2400 об/мин
ldi R16, 27	;множитель
st X+, R16	;в ОЗУ, 21,1°
;2500 об/мин
ldi R16, 25	;множитель
st X+, R16	;в ОЗУ, 22,5°
;2600 об/мин
ldi R16, 22	;множитель
st X+, R16	;в ОЗУ, 24,6°
;2800 об/мин
ldi R16, 18	;множитель
st X+, R16	;в ОЗУ, 27,4°
;3000 об/мин
ldi R16, 15	;множитель
st X+, R16	;в ОЗУ, 29,5°
;3200 об/мин
ldi R16, 13	;множитель
st X+, R16	;в ОЗУ, 30,9°
;3500 об/мин
ldi R16, 11	;множитель
st X+, R16	;в ОЗУ, 32,3°
;3900 об/мин
ldi R16, 9	;множитель
st X+, R16	;в ОЗУ, 33,7°
;4200 об/мин
ldi R16, 8	;множитель
st X+, R16	;в ОЗУ, 34,4°
;4700 об/мин
ldi R16, 7	;множитель
st X+, R16	;в ОЗУ, 35,1°
;5100 об/мин
ldi R16, 6	;множитель
st X+, R16	;в ОЗУ, 35,8°
;5600 об/мин
ldi R16, 5	;множитель
st X+, R16	;в ОЗУ, 36,5°
;6100 об/мин
ldi R16, 5	;множитель
st X+, R16	;в ОЗУ, 36,5°
ret		;возврат в программу
