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

 
 
> Умножение + перекодировка на 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
Ответов
pavel-pervomaysk
сообщение Aug 26 2008, 08:17
Сообщение #2


Местный
***

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



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 //

// registers
// 28 27 26
// 1 55 CC = 87.500
// 1 86 A0 = 100.000
// 1 A5 E0 = 108.000

ldi r26, 0xA0 // отнимаем 100 000
ldi r27, 0x86
ldi r28, 0x01
rcall dec_char
mov dig_1,loop // сохраняем результат первой цыфры

ldi r26, 0x10 // отнимаем 10 000
ldi r27, 0x27
clr r28
rcall dec_char
mov dig_2,loop // сохраняем результат второй цыфры

ldi r26, 0xE8 // отнимаем 1 000
ldi r27, 0x03
rcall dec_char
mov dig_3,loop // сохраняем результат третьей цыфры

ldi r26, 0x64 // отнимаем 100
clr r27
rcall dec_char
mov dig_4,loop // сохраняем результат четвертой цыфры


ldi r26, 0x0A // отнимаем 10
clr r27
rcall dec_char
mov dig_5,loop // сохраняем результат пятой цыфры

// Перекодировка HEX -> DEC

dec_char: //
ldi loop,-1 // загружаем значение и отнимаем от него 1
char_no:
sub r22, r26 //
sbc r23, r27 //
sbc r24, r28 //
dec loop //
brsh char_no // перейти если больше без знака
ret //

пробую так , не выходит , может я не так заганяю значение в loop ?
Сколько раз нужно отнять значение 100 000 ? потому что если отнимать его 256 раз проц затухает примерно на 1 секунду sad.gif .
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Aug 26 2008, 08:38
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(Павлик @ Aug 26 2008, 12:17) *
Сколько раз нужно отнять значение 100 000 ? потому что если отнимать его 256 раз проц затухает примерно на 1 секунду sad.gif .

А что у Вас с сторожевым таймером (watchdog)?
Ведь если он активен, то его надо сбрасывать периодически (инструкцией wdr) smile.gif
Это может явятся причиной "затухания".


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post



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

 


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


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