Свежие обсуждения
Микроконтроллеры

Преобразовать HEX в DEC за минимальное число тактов

1 2

Нужно преобразовать однобайтное число (00h-FFh) в десятичное представление его в виде 3х разрядов (каждый в своем байте (0-9)) за минимальное число тактов (и желательно независящее от числа). На ассемблере AVR.

 

по таблице

Wladimir_TS: тактов независящее от числа ... нужно освободить память программ

один фанат давно-давно перевёл байт в линию, но сейчас уже не найду, не вспомню...

 

Так и сделано, но нужно освободить память программ.

 

birua: по таблице

Именно так.

Wladimir_TS: Так и сделано, но нужно освободить память программ.

За все надо платить. Самые быстрые,- табличные преобразования. На размещение таблиц нужна память.
Поищите по интернету. Спросите у GM, ему приходилось "дожимать" программы и искать эффективные решения на АSSM для AVR, по времени и памяти.

 

Вот какой применил пока :
LDI R22, 8 ;R16 - Входной байт R17,R18 - выходные (в R17 два полубайта)
CLR R17
CLR R18
RJMP BITSDW

BITOBR: SUBI R18, -$33
SUBI R17, -$33
SBRS R18, 3
SUBI R18, $03
SBRS R17, 3
SUBI R17, $03
SBRS R18, 7
SUBI R18, $30
SBRS R17, 7
SUBI R17, $30
BITSDW:
LSL R16
ROL R17
ROL R18
DEC R22
BRNE BITOBR

 

Wladimir_TS: за минимальное число тактов

раскройте цикл и не делайте ненужных на данный момент коррекций

 

Wladimir_TS: Нужно преобразовать однобайтное число (00h-FFh) в десятичное представление его в виде 3х разрядов (каждый в своем байте (0-9)) за минимальное число тактов (и желательно независящее от числа). На ассемблере AVR.

Тут правильно говорят про таблицы.

Когда-то, в дни туманной молодости, когда я мастерил себе некое чудо на К580ВМ80, я делал аппаратное умножение 4х4 разряда с применением ПЗУ. Два множителя подавались на адрес, а из восьмиразрядной ячейки считывалось произведение. Собирался и деление сделать, да руки не дошли...

 

Я как-то 16х16 видел на массиве РТ7ых.... Блок внушал уважение. Потом ставили какие-то импортные ПЗУшки по моему 8 корпусами обходились. Использовалось в большой станионарной РЛС с ФАР. У меня была таблица для 2х младших цифр (256 байт) и условия для выбора старшей, но у Tiny13 так мало памяти....

А по приведенном отрывку - я нашел это в интернете, но как работает понять не могу.

 

И сколько мин-мах тактов реально получается?

 

Wladimir_TS: Нужно преобразовать однобайтное....

Почитайте тут: http://electronix.ru/forum/lofiversion/index.php/t81129.html