фильтр Калмана? вполне возможно осилить, пока нет нужды. имхо асмом тоже нужно уметь пользоваться. порой смотришь на асмовые исходники и приходишь к мысли что от машинных кодов они не далеко ушли. полином третьего порядка без гемора
;**********************************************************
; Constant
;**********************************************************
.equ k1 = 158850330 // 977DD1A
.equ k2 = 1104840 // 0x10DBC8
.equ k3 = 1373 // 0x55D
.equ k4 = 3
.equ kp1 = 10
.equ kp2 = 1000000000 // 0x3B9ACA00
.equ kt = 200 // 0xC8
;**********************************************************
; S - (k1 + k2*spt + k4*spt^3/kp1 - k3*spt^2 )*( temper - kt ) / kp2
;**********************************************************
; Data memory
;**********************************************************
.dseg
//spt_curr: .byte 2
spt_20: .byte 2
.cseg
;**********************************************************
; Macros
;**********************************************************
.macro summary
add_d dC, @1
adc_w D0, @0 // pre set D1 = 0
.endm
;**********************************************************
calc_sprt: clr_w D0
..........................................
; k1
ldi_d dE, k1
mov_d dC, dE // summary= k1
..........................................
; k2*spt
ldi_d dH, k2
lds_w E0, spt_curr
mul_d_w // G0 : dF = dH * E0
summary G0, dF // summary= k1 + k2*sprt
..........................................
; sprt^2
mov_w E1, E0
mul_w // dF = E1 * E0
push_d dF // story sprt^2
..........................................
; sprt^3
mov_d dH, dF
mul_d_w // G0 : dF = dH * E0// G0:dF = sprt^3
..........................................
; sprt^3*k4
ldi tmpA, k4
mov_d dH, dF
mul_d_b // G0 : dF = dH * tmpA
..........................................
; sprt^3*k4/kp1
ldi tmpA, kp1
div_wd_b // G0 : dF = G0 : dF / E0l
summary G0, dF // summary = k1 + k2*spt + sprt^3*k4/kp1
..........................................
; k3*spt^2
ldi_w E0, k3
pop_d dH // dH = sprt^2
mul_d_w // G0 : dF = dH * E0
sub_d dC, dF
sbc_w D0, G0 // summary = k1 + k2*spt + sprt^3*k4/kp1 - k3*spt^2
..........................................
; temper - kt
lds_w E0, temper
ldi_w E1, kt
sub_w E0, E1
..........................................
; (k1 + k2*spt + k4*spt^3/kp1 - k3*spt^2 )*( temper - kt )
mov_d dF, dC
muls_d_w // H0 : dG = dF * E0
..........................................
; (k1 + k2*spt + k4*spt^3/kp1 - k3*spt^2 )*( temper - kt ) / kp2
ldi_d dE, kp2
mov_d dF, dG
mov_w G0, H0
divs_wd_d // G0 : dF = G0 : dF / dE (signed)
..........................................
; S - (k1 + k2*spt + k4*spt^3/kp1 - k3*spt^2 )*( temper - kt ) / kp2
lds_w E0, spt_curr
sub_w E0, F0
sts_w spt_20, E0 // store result
ret