AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
30.11.2012, 11:29
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Преобразование двоичного числа в двоично-десятичное: от К580 к AVR Mega16
Может так будет работать?
//======= r16:r17:r18 = (R16:r17)
.MACRO daa
subi @0,-3
sbrs @0,3
subi @0,3
subi @0,-0x30
sbrs @0,7
subi @0,0x30
.ENDMACRO
BinDec:
push r19
push r20
push r21
movw r21:r20,r17:r16
clr r16
clr r17
clr r18
ldi r19,16
BinDec_loop:
lsl r20
rol r21
rol r16
rol r17
rol r18
dec r19
breq BinDec_exit
daa r16
daa r17
daa r18
jmp BinDec_loop
BinDec_exit:
pop r21
pop r20
pop r19
ret
|
|
|
|
30.11.2012, 13:23
|
|
Прохожий
Регистрация: 21.09.2009
Сообщений: 7
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Преобразование двоичного числа в двоично-десятичное: от К580 к AVR Mega16
|
|
|
|
30.11.2012, 14:39
|
|
Прохожий
Регистрация: 24.09.2007
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Преобразование двоичного числа в двоично-десятичное: от К580 к AVR Mega16
в отличие от К580 в AVR нет десятичной коррекции, так что сначала разберитесь с DAA
если очень нужно могу найти свои исходники ..
Последний раз редактировалось trassertrasser; 30.11.2012 в 14:44.
|
|
|
|
30.11.2012, 15:49
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Преобразование двоичного числа в двоично-десятичное: от К580 к AVR Mega16
Сообщение от trassertrasser
|
так что сначала разберитесь с DAA
если очень нужно могу найти свои исходники ..
|
Это кому совет?
|
|
|
|
30.11.2012, 18:34
|
|
Вид на жительство
Регистрация: 14.07.2009
Сообщений: 322
Сказал спасибо: 103
Сказали Спасибо 109 раз(а) в 56 сообщении(ях)
|
Re: Преобразование двоичного числа в двоично-десятичное: от К580 к AVR Mega16
Сообщение от ut1wpr
|
Ведь даже мозг особо подключать не надо, лишь глаза и пальцы. Остальное доделает Гугл...
|
.
Вот уж действительно! Зачем учить таблицу умножения, если есть калькулятор!
Только вопрос: А кто же составит эту таблицу, если все будут надеяться на гугл...? И отучатся мозг подключать!? А потом вдруг обнаружишь что смотришь в эту таблицу как баран и ни чего не понимаешь.
|
|
|
|
30.11.2012, 18:58
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,613
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: Преобразование двоичного числа в двоично-десятичное: от К580 к AVR Mega16
Сообщение от alex1_09
|
.
Вот уж действительно! Зачем учить таблицу умножения, если есть калькулятор!
Только вопрос: А кто же составит эту таблицу, если все будут надеяться на гугл...? И отучатся мозг подключать!? А потом вдруг обнаружишь что смотришь в эту таблицу как баран и ни чего не понимаешь.
|
Не совсем понял метафору. Если это про давно созданную таблицу умножения - зачем учится ее создавать снова? Для заглядывания в таблицу умножения мозг подключать? Явный перебор в поисках метафор. Насчет "мозг подключать" возражений нет. Все остальное - из области "поговорить".
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
30.11.2012, 19:31
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Преобразование двоичного числа в двоично-десятичное: от К580 к AVR Mega16
Вспомнил детство! Учитель математики учил нас -"Известно как вскипятить воду - взять со стола пустой чайиник,налить в чайник воды, зажечь газ, поставить чайник на плиту, когда вскипел - выключить газ. Поэтому, если Вам захотелось чаю, а на плите стоит чайник, то .......... вылейте из него воду и поставьте на стол - ибо задача вскипятить его уже давно решена!!!"
Поэтому прежде чем начать решать задачу,- надо постараться найти уже готовое решение или разбить ее на куски, которые уже решены.
Единственное, что чуток смущает, так это то, что профи не тратят время на выкладывание в инете своих трудов. Поэтому надо еще уметь оценить то что тут выставляют.
|
|
|
Сказали "Спасибо" Boba_spb
|
|
|
30.11.2012, 20:02
|
|
Вид на жительство
Регистрация: 14.07.2009
Сообщений: 322
Сказал спасибо: 103
Сказали Спасибо 109 раз(а) в 56 сообщении(ях)
|
Re: Преобразование двоичного числа в двоично-десятичное: от К580 к AVR Mega16
Сообщение от ut1wpr
|
Не совсем понял метафору. Если это про давно созданную таблицу умножения - зачем учится ее создавать снова? Для заглядывания в таблицу умножения мозг подключать? Явный перебор в поисках метафор. Насчет "мозг подключать" возражений нет. Все остальное - из области "поговорить".
|
.
А смысл в том, что если будеш отключать мозг и надеется на гугол - то великим программистом не станеш!!! (однажды отключишь, а включить будет уже лень...)
Все начинается с малого, с решения 2+2=, и если понадеешся на гугол, то и это не научишся решать!
Топик стартер между прочим написал " ...Решил в познавательных целях перенести алгоритм преобразования двоичного числа в три десятичные цифры ..."
Мое мнение такое - и правильно сделал что решил перевести САМ, и не надеется на гугол! Вот так понемножку привыкнет чтобы мозг был включен ПОСТОЯННО в любых ситуациях.
А там, смотришь, и какой-нибудь новый алгоритм придумает (если, конечно, не будет надеятся на кого то)
|
|
|
|
01.12.2012, 01:09
|
|
Прописка
Регистрация: 11.11.2007
Сообщений: 143
Сказал спасибо: 15
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
|
Re: Преобразование двоичного числа в двоично-десятичное: от К580 к AVR Mega16
=GM=, Спасибо за поправку, но, к сожалению, после аргумента 230 в сотнях ошибка - выдает 0.
Хочу пояснить, что я не технарь, а юрист. МК-дилетантское увлечение.
Спасибо всем, кто ответил по существу! Разбираюсь...
|
|
|
|
01.12.2012, 11:26
|
|
Временная регистрация
Регистрация: 15.05.2010
Адрес: г. Липецк
Сообщений: 88
Сказал спасибо: 8
Сказали Спасибо 16 раз(а) в 10 сообщении(ях)
|
Re: Преобразование двоичного числа в двоично-десятичное: от К580 к AVR Mega16
Есть несколько алгоритмов преобразования числа из двоичного в двоично-десятичное. Простое переложение с ассемблера а51 на AVR слишком накладно из-за разных систем команд. Для AVR я пользуюсь таким:
Код:
|
; ************************************************** ************************
.MACRO BinToBCD ; двоично-десятичное преобразование
; BinToBCD kff, reg; r16 - исходный двоичный байт
; kff - делитель; reg - BCD результат
ldi @1, -1 ;
$MCR_DGT:
inc @1 ;
subi r16, @0 ;
brsh MCR_DGT ;
subi r16, -@0 ;
.ENDM
; ************* Применение макро BinToBCD **********************************
BinToBCD 100, r18 ; BCD старшая цифра
BinToBCD 10, r17 ; BCD средняя цифра
; ; BCD младшая цифра осталась в r16
; ************************************************** ************************ |
Это если надо преобразовать один байт, для двухбайтового числа алгоритм тот же, немного сложнее, для 4 байтового BCD числа (9999):
Код:
|
; ************************************************** ************************
.DEF BCD_0 = R7 ; цифра 2 разряда, BCD формат
.DEF BCD_1 = R8 ; цифра 3 разряда, BCD формат
.DEF BCD_2 = R9 ; цифра 4 разряда, BCD формат
.DEF VALUEL = R24 ; младший байт суммы замеров
.DEF VALUEH = R25 ; старший байт суммы замеров
LDIL BCD_2, -1
OP_1:
INC BCD_2
SUBI VALUEL, Low(1000)
SBCI VALUEH, High(1000)
BRSH OP_1
SUBI VALUEL, Low(-1000)
SBCI VALUEH, High(-1000)
LDIL BCD_1, -1
OP_2:
INC BCD_1
SUBI VALUEL, Low(100)
SBCI VALUEH, High(100)
BRSH OP_2
SUBI VALUEL, -100
LDIL BCD_0, -1
OP_3:
INC BCD_0
SUBI VALUEL, 10
BRSH OP_3
SUBI VALUEL, -10
; ; BCD младшая цифра осталась в VALUEL
; ************************************************** ************************ |
Если нужен полный диаппазон 2х байтового числа, добавить делитель 10000.
Возможно кого то собьет с толку строка
LDIL BCD_0, -1
Нет, новых команд в ассемблере AVR не появилось, это равнозначно
LDI BCD_0, -1
Просто дергал из листинга...
Последний раз редактировалось anakost; 01.12.2012 в 20:08.
|
|
|
Сказали "Спасибо" anakost
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:41.
|
|