|
.def value = r8 //unsigned char value, real_value, tbl_index, tbl_value, temp, byte
.def real_value = r11
.def tbl_index = r12
.def tbl_value = r13
.def temp = r16
.def byte = r18;------- skip -----------
Interpolate:
mov tbl_index,real_value //tbl_index = (real_value >> 3) + 0x1F
lsr tbl_index
lsr tbl_index
lsr tbl_index
ldi temp,0x1F
add tbl_index,temp
ee_loop:
sbic EECR,EEWE //while(EECR & (1 << EEWE);
rjmp ee_loopout EEAR,tbl_index //EEAR = (unsigned int)tbl_index;
sbi EECR,EERE //EECR |= (1 << EERE);
in value,EEDR //value = EEDRldi temp,7
and temp,real_value
brne Inter2 //if(real_value & 0x07){
retInter2:
inc tbl_index
out EEAR,tbl_index // EEAR = ++tbl_index
sbi EECR,EERE // EECR |= (1 << EERE);
in tbl_value,EEDR // tbl_value = EEDR;mov temp,tbl_value
sub temp,value // temp = tbl_value - value;
clr byte // byte = 0x00
sbrc real_value,0 // if(real_value & 0x01)
add byte,temp // byte += temp;
lsl temp // temp <<= 1;
sbrc real_value,1 // if(real_value & 0x02)
add byte,temp // byte += temp;
lsl temp // temp <<= 1;
sbrc real_value,2 // if(real_value & 0x04)
add byte,temp // byte += temp;asr byte // byte >>= 3;
asr byte
asr byte
add value,byte // value += byte
//}
ret //return;;------- skip -----------
E-mail: info@telesys.ru