[an error occurred while processing this directive]
Могу предложить на АСМе, (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено dsp 17 декабря 2002 г. 14:48
В ответ на: Подскажите плз красивый вариант конвертации числа в строку ASCII кодов (нпр 125 -> 0х31, 0х32, 0х35). Спасибо. отправлено allmaker 17 декабря 2002 г. 14:16

в аккурат сегодня ночью проверял... :-)
;*********************************************************************************
; Процедура преобразования двоичного числа (1 байт) в его строковое представление.
; Результат записывает сразу в область BCDstring, завершая нулевым байтом.
; Если старшие байты - нулевые, заменяет их пробелами
; исходное число - в temp0; для промежуточных результатов задействованы
; temp1, temp2
;*********************************************************************************

bin_to_string:
push temp1 ;
push temp2 ;
clr temp2 ;highest byte of result;
clr temp1 ;middle byte
FirstLoop:
subi temp0, 10 ;input = input - 10
brcs exit_first ;
inc temp1 ;
rjmp FirstLoop ;
exit_first:
subi temp0, -10 ;
Second_Loop:
subi temp1, 10 ;if middle byte is greater than 10...
brcs exit_second ;
inc temp2 ;
rjmp Second_Loop ;
exit_second:
subi temp1, -10 ;
;next, make ASCII codes...
tst temp2
breq Zero2
ori temp2, 0x10 ;if not zero - make digit code
ori temp1, 0x10 ;and prevent "Space" in middle, even it is equal to Zero
Zero2:
ori temp2, 0x20 ;
tst temp1
breq Zero1
ori temp1, 0x10 ;
Zero1:
ori temp1, 0x20 ;
;lowest byte don`t replaced with "Space", if is Zero
ori temp0, 0x30 ;
sts BCDstring, temp2 ;
sts BCDstring+1, temp1 ;
sts BCDstring+2, temp0 ;
clr temp0;
sts BCDstring+3, temp0 ;
pop temp2 ;
pop temp1 ;
ret


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

Ответы



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

E-mail: info@telesys.ru