[an error occurred while processing this directive]
Ответ:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено -=ВН=- 20 февраля 2005 г. 14:23
В ответ на: округление до десятки на асм. как ? отправлено nestandart снаружи бронепоезда 20 февраля 2005 г. 02:25

Поделить на 10, частное умножить на 10.
Если все-таки округление, то перед делением к делимому прибавить 5,
но т.к. 255+5=260, то нужна особая проверка на 250 и более, если нельзя за 8 бит вылезать.
Ниже - программка деления беззнакового чара на 10. На C, avr не знаю. По сути - обычное деление столбиком, которому в школе учили. Только раком. Преимуществ перед неизвращенным делением столбиком наверное не имеет, не проверял. Так, воскресное извращение.
Умножение на 6 - два сдвига и сложение. Сдвиг вправо на 4 - ну иногда есть к-да смены полубайт, можно ее использовать. while можно циклом for до 4 заменить.



unsigned char div10(unsigned char dividend)
{
unsigned char quotien,reminder,tmp;
quotien=0;
reminder=dividend;
while ((tmp=((reminder&0xf0)>>4))!=0)
{
quotien+=tmp;
reminder&=0xf;
reminder+=(tmp*6);
}
if(reminder>=10)
{
quotien+=1;
reminder-=10;
}
return quotien;
}






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

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


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

E-mail: info@telesys.ru