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

 
 
> AVR204, Непонятки
ILYAUL
сообщение Apr 17 2011, 10:08
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Всем привет!

Месяца два назад звонил знакомый с вопросом по этому произведению фирмы Atmel. Тогда я не придал этому значения- просто дал рабочий код , но мыслишка осталась.
Разбирая по папкам данные на компе- порядок наводил, наткнулся на AVR204 и решил взглянуть поближе на сей код.
И хотя в описании алгоритма работы есть строчки: Add $03 to result byte2 и т.д. в коде я этого не вижу. Регистр tmp16a (судя по коду) всегда содержит 0 или я что-то не понял

Весь код:

Код
;***************************************************************************
;*
;* "bin2BCD16" - 16-bit Binary to BCD conversion
;*
;* This subroutine converts a 16-bit number (fbinH:fbinL) to a 5-digit
;* packed BCD number represented by 3 bytes (tBCD2:tBCD1:tBCD0).
;* MSD of the 5-digit number is placed in the lowermost nibble of tBCD2.
;*
;* Number of words    :25
;* Number of cycles    :751/768 (Min/Max)
;* Low registers used    :3 (tBCD0,tBCD1,tBCD2)
;* High registers used  :4(fbinL,fbinH,cnt16a,tmp16a)    
;* Pointers used    :Z
;*
;***************************************************************************

;***** Subroutine Register Variables

.equ    AtBCD0    =13;address of tBCD0
.equ    AtBCD2    =15;address of tBCD1

.def    tBCD0    =r13;BCD value digits 1 and 0
.def    tBCD1    =r14;BCD value digits 3 and 2
.def    tBCD2    =r15;BCD value digit 4
.def    fbinL    =r16;binary value Low byte
.def    fbinH    =r17;binary value High byte
.def    cnt16a    =r18;loop counter
.def    tmp16a    =r19;temporary value

;***** Code

bin2BCD16:
    ldi    cnt16a,16                  ;Init loop counter    
    clr    tBCD2;clear result (3 bytes)
    clr    tBCD1        
    clr    tBCD0        
    clr    ZH;clear ZH (not needed for AT90Sxx0x)
bBCDx_1:lsl    fbinL;shift input value
    rol    fbinH;through all bytes
    rol    tBCD0;
    rol    tBCD1
    rol    tBCD2
    dec    cnt16a;decrement loop counter
    brne    bBCDx_2;if counter not zero
    ret    ;   return

bBCDx_2:ldi    r30,AtBCD2+1;Z points to result MSB + 1
bBCDx_3:
    ld    tmp16a,-Z                  ;get (Z) with pre-decrement
;----------------------------------------------------------------
;For AT90Sxx0x, substitute the above line with:
;
;    dec    ZL
;    ld    tmp16a,Z
;
;----------------------------------------------------------------
    subi    tmp16a,-$03;add 0x03
    sbrc    tmp16a,3                  ;if bit 3 not clear
    st    Z,tmp16a;store back
    ld    tmp16a,Z                  ;get (Z)
    subi    tmp16a,-$30;add 0x30
    sbrc    tmp16a,7                  ;if bit 7 not clear
    st    Z,tmp16a                ;store back
    cpi    ZL,AtBCD0                  ;done all three?
    brne    bBCDx_3;loop again if not
    rjmp    bBCDx_1

Прикрепленные файлы
Прикрепленный файл  AVR204_BCD_Arithmetics.pdf ( 94.37 килобайт ) Кол-во скачиваний: 13
 


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Sergey_Aleksandr...
сообщение Apr 20 2011, 10:09
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 168
Регистрация: 8-10-08
Из: РФ Смоленск
Пользователь №: 40 764



Десятая команда снизу subi tmp16a,-$03;add 0x03

В AVR нет встроенной инструкции "Сложение РОН с константой", поэтому используют "Вычитание константы из РОН" - вычитают из регистра константу с противоположным знаком, что эквивалентно сложению.
По поводу данной аппноты не скажу, а вот по умножению/делению 16 битных чисел со знаком и без в своё время повторял, работало без нареканий. Так что сомнения в работоспособности приведённого кода излишние.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Apr 20 2011, 11:56
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(Sergey_Aleksandrovi4 @ Apr 20 2011, 14:09) *
Десятая команда снизу subi tmp16a,-$03;add 0x03

В AVR нет встроенной инструкции "Сложение РОН с константой", поэтому используют "Вычитание константы из РОН" - вычитают из регистра константу с противоположным знаком, что эквивалентно сложению.
По поводу данной аппноты не скажу, а вот по умножению/делению 16 битных чисел со знаком и без в своё время повторял, работало без нареканий. Так что сомнения в работоспособности приведённого кода излишние.

Вы , несколько заблуждаетесь по поводу subi tmp16a,-$03 . Регистр tmp16a описан в def как временный регистр - в который должны передоваться последовательно данные из tBCD0 - tBCD3 и производится необходимые действия . Весь вопрос и состоит в том , что в этот регистр данные из tBCD0 - tBCD3 , согласно приведённому коду НИКОГДА не попадут. А то что нет прямого сложения- известный факт


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Apr 20 2011, 12:04
Сообщение #4


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(ILYAUL @ Apr 20 2011, 15:56) *
Весь вопрос и состоит в том , что в этот регистр данные из tBCD0 - tBCD3 , согласно приведённому коду НИКОГДА не попадут.

Как так ? А это что:
CODE
bBCDx_3:
ld tmp16a,-Z ;get (Z) with pre-decrement

???
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ILYAUL   AVR204   Apr 17 2011, 10:08
|- - ILYAUL   Цитата(rx3apf @ Apr 20 2011, 16:04) Как т...   Apr 20 2011, 12:11
|- - rx3apf   Цитата(ILYAUL @ Apr 20 2011, 16:11) Я уве...   Apr 20 2011, 12:16
|- - ILYAUL   Цитата(rx3apf @ Apr 20 2011, 16:16) Какие...   Apr 20 2011, 12:54
|- - aaarrr   Цитата(ILYAUL @ Apr 20 2011, 16:54) Ладно...   Apr 20 2011, 13:00
||- - ILYAUL   Цитата(aaarrr @ Apr 20 2011, 17:00) Вам з...   Apr 20 2011, 13:25
||- - aaarrr   Цитата(ILYAUL @ Apr 20 2011, 17:25) Вы чт...   Apr 20 2011, 13:32
|||- - ILYAUL   Цитата(aaarrr @ Apr 20 2011, 17:32) Ничег...   Apr 20 2011, 13:37
|||- - rx3apf   Цитата(ILYAUL @ Apr 20 2011, 17:37) .def ...   Apr 20 2011, 13:40
|||- - ILYAUL   Цитата(rx3apf @ Apr 20 2011, 17:40) А это...   Apr 20 2011, 13:53
|||- - rx3apf   Цитата(ILYAUL @ Apr 20 2011, 17:53) Это з...   Apr 20 2011, 13:57
|||- - ae_   Цитата(ILYAUL @ Apr 20 2011, 22:53) И при...   Apr 20 2011, 14:03
||- - rx3apf   Цитата(ILYAUL @ Apr 20 2011, 17:25) Вы чт...   Apr 20 2011, 13:34
||- - ILYAUL   Цитата(rx3apf @ Apr 20 2011, 17:34) Ниско...   Apr 20 2011, 13:43
||- - rx3apf   Цитата(ILYAUL @ Apr 20 2011, 17:43) Прост...   Apr 20 2011, 13:47
||- - aaarrr   Цитата(ILYAUL @ Apr 20 2011, 17:43) Прост...   Apr 20 2011, 13:47
||- - ILYAUL   Цитата(aaarrr @ Apr 20 2011, 17:47) Прочи...   Apr 20 2011, 13:58
|- - rx3apf   Цитата(ILYAUL @ Apr 20 2011, 16:54) Ладно...   Apr 20 2011, 13:02
- - ILYAUL   Коллеги! Только не бейте сильно , я совсем за...   Apr 20 2011, 14:18


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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 19:44
Рейтинг@Mail.ru


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