Цитата(Professor @ May 21 2006, 17:59)

Цитата(_artem_ @ May 21 2006, 12:52)

У атмела в аппликейшн нот уже есть готовая програмка на ассемблере. (see BCD conversion)
А по подробнее.. где этот код?
Код
/****************************************************************************
Вывод шестнадцатиричного числа на два индикатора
Выполняет преобразование шестнадцатиричного числа в неупакованное десятичное
и выводит в два индикатора по указателю. Если число отрицательное то функция
возвращает 1, иначе 0
****************************************************************************/
void View_Hex_To_2_Leds(signed char data, char volatile*pbuf)
{ signed char tens;
char count;
// преобразуем число в положительное, если оно отрицательное
g_System_Flags &= ~fNEGATIVE;
if(data < 0)
{ data = ~data + 1;
g_System_Flags |= fNEGATIVE;
}
// счетчик десятков = -1
tens = -1;
// подсчитываем количество единиц и десятков в числе
do
{ tens++;
data -= 10;
}
while(data >= 0);
data += 10;
// теперь data содержит единицы, а tens десятки шестнадцатиричного числа,
........................
Это я использовал в программе таймера. Смысл преобразования в том, что из числа (разрядность которого уже известно), последовательно вычитаются сначала, допустим, десятки тысяч, потом единицы, потом сотни единиц, десятки единиц, в остатке остаются единицы. Для каждого разряда организуется счетчик, число которого в конце цикла и есть искомое число. Вот ссылка на русский сайт Атмел:
http://atmel.ru/Articles/Articles.htm - сдесь очень много всего полезного начинающим, как раз и статья про преобразования HEX 2 BCD и даже че то с дробями)
http://atmel.ru/Articles/Atmel13.htm - это оно то что Вам надо, главное, все на ASM