реклама на сайте
подробности

 
 
> Умножение + перекодировка на AVR, не могу понять
pavel-pervomaysk
сообщение Aug 26 2008, 07:47
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 253
Регистрация: 28-12-07
Из: Украина г. Первомайск
Пользователь №: 33 716



Всем привет , не могу никак понять как написать подпрограмму перекодировки значения для LM7001
Пример такой

значение 0x0F 0xA0 умножаем на 25 DEC or 0x19 HEX

clr tmp2
ldi tmp, 0x19 // загружаем константу

add_25: //
add r22, 0xA0 // умножаем на 25 DEC / 19 HEX
adc r23 , 0x0F //
adc r24, tmp2 //
dec tmp //
brne add_25 //

После умножения получаем число трех байтовое r24 = 0x01 r23 = 0x86 r22 = 0xА0
как мне из него сделать десятичное число 100 000 ? потом после этого мне каждый символ нужно вывести на ЖКИ 44780 , в ASCII , это уже допишу сам .
Буду рад пинку в нужном направлении . smile.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Syberian
сообщение Aug 26 2008, 11:23
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 68
Регистрация: 29-12-06
Из: Омск
Пользователь №: 23 999



100 000 в данном случае десятичное smile.gif

Без деления не обойтись. Стандартные процедуры деления есть в аппноутах AVR.

Берешь число, делишь на 100тыщ, к результату + #30 и на индикатор готовый символ.
Остаток деления делишь на 10 тыщ, и то же самое....
Повторить с 1000, 100, 10, и остаток от деления на 10 - тоже туда же.

Чтобы умножить число, совсем не нужно 25 раз складывать его с собой smile.gif

аппаратное умножение есть почти во всех мегах.
http://atmel.com/dyn/products/app_notes.asp?family_id=607

Смотри апноты AVR200...AVR204
Go to the top of the page
 
+Quote Post
Maik-vs
сообщение Aug 26 2008, 11:55
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 246
Регистрация: 4-12-06
Пользователь №: 23 101



Цитата(Syberian @ Aug 26 2008, 15:23) *
Без деления не обойтись. Стандартные процедуры деления есть в аппноутах AVR.

07.gif
Зачем же путать начинающего? Конечно, легко и приятно написать a=b/100000; (Догадались? следующая строка будет a=b%100000;) Но потом надо посмотреть, во что это превращается на ассемблере. Тут и поможет вычитание. Сравните код, станет всё ясно. Для 6-разрядного десятичного числа максимальное количество вычитаний - всего 45; при этом тысячи вычитаются из 2-х байт, а десятки - из одного.

Цитата(Syberian @ Aug 26 2008, 15:23) *
Чтобы умножить число, совсем не нужно 25 раз складывать его с собой smile.gif

аппаратное умножение есть почти во всех мегах.
Смотри апноты AVR200...AVR204

Это да!

Сообщение отредактировал Maik-vs - Aug 26 2008, 11:58
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 13:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.01399 секунд с 7
ELECTRONIX ©2004-2016