Так грамматически корректней ;-)))
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено 28 июля 2004 г. 15:19
В ответ на: AVRщики, переведите кусок асма на си. отправлено Alkur 28 июля 2004 г. 11:36


.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_loop

out EEAR,tbl_index //EEAR = (unsigned int)tbl_index;
sbi EECR,EERE //EECR |= (1 << EERE);
in value,EEDR //value = EEDR;

ldi temp,7
and temp,real_value
brne Inter2 //if(real_value & 0x07){
ret

Inter2:
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