изв. Спасибо. Я с угару на шару сделал так:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено LamerMSP430 04 ноября 2003 г. 00:16
В ответ на: Сасибо ! но там так отправлено LamerMSP430 04 ноября 2003 г. 00:11

BCD_to_BIN ; function converts BCD R6|R7 to BIN R8|R9 (421 cycles)
mov #8,R11 ; LOOP COUNTER ( 8 DIGITS )
clr R8
clr R9
clr R10
BCD_to_BIN_SHFT4:
mov #4,R14 ; loop counter
BCD_to_BIN_SHFT41:
rla R7 ; SHIFT LEFT DIGIT INTO R10
rlc R6
rlc R10
dec R14
jnz BCD_to_BIN_SHFT41
add R10,R9 ; XN+10XN+1
adc R8
clr R10
dec R11 ; THROUGH ?
jz BCD_to_BIN_END ; YES
MPY10:
rla R9 ; NO, MULTIPLICATION WITH 10
rlc R8
push R8 ; push doubled value to later add
push R9
rla R9
rlc R8
rla R9
rlc R8 ; now multiplyed by 8
add @SP+,R9
addc @SP+,R8 ; push with add
jmp BCD_to_BIN_SHFT4 ; NEXT DIGIT
BCD_to_BIN_END:
ret ; RESULT IS IN R8|R9

BIN_to_BCD ; converts binary R8|R9 to BCD R6|R7 (271 cycles)
mov #32,R14 ; LOOP COUNTER
clr R6 ; 0 –> RESULT MSD
clr R7 ; 0 –> RESULT LSD
BIN_to_BCD_loop:
rla R9 ; Binary MSB to carry
rlc R8
dadd R7,R7 ; RESULT x2 LSD
dadd R6,R6 ; MSD
dec R14 ; THROUGH?
jnz BIN_to_BCD_loop
ret
; а в теле программы :

call #BCD_to_BIN ; function converts BCD R6|R7 to BIN R8|R9
push R8
push R9 ; load readed and converted values onto stack
mov @R6+,R7 ; ENX_XD to R7
mov @R6,R6 ; ENX_XL to R6
call #BCD_to_BIN ; function converts BCD R6|R7 to BIN R8|R9
sub @SP+,R9
subc @SP+,R8 ; substract with poping

call #BCD_to_BIN
и тд
Отняло 1130 циклов!!!

Сам помню, что где-то выдел такой финт, но не мог вспомнить где :)
Спасибо.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru