Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
;----------------------------------------------------------------------------
.def adc0 = r2
.def adc1 = r3
.def tmpl = r4
.def tmph = r5
.def result = r6
.def temp = r16
;----------------------------------------------------------------------------
; result = (char)(200*adc0/adc1). 89 clock cycles (~11 uS @ 8 MHz Mega8), 14 Flash words
getratio:
ldi temp,200 ; r1..r0 = adc0*200
mul adc0,temp ;
movw tmpl,r0 ; tmph..tmpl = adc0*200
div16x8: ; Unsigned 16/8 divide, result = tmph:tmpl/adc1
clr result ; result = 0
ldi temp,0x80 ; temp = 0b10000000
d16loop:
or result,temp ; result |= temp
mul result,adc1 ; r1..r0 = result*adc1
cp r0,tmpl ; if r1..r0 > tmph..tmpl
cpc r1,tmph ; {
brcs nextmask
eor result,temp ; result ^= temp}
nextmask:
lsr temp ; temp >>= 1
brcc d16loop ; if(temp != 0) goto d16loop
ret
;----------------------------------------------------------------------------