Например TDA7294

Форум РадиоКот • Просмотр темы - AVR Assembler, razyasnite plz (BIN2BCD16)
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Сб фев 27, 2021 05:04:50

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: AVR Assembler, razyasnite plz (BIN2BCD16)
СообщениеДобавлено: Сб янв 07, 2006 14:01:01 
Родился

Карма: -6
Рейтинг сообщений: -12
Зарегистрирован: Вс ноя 06, 2005 17:57:53
Сообщений: 12
Откуда: Ulan-Ude
Рейтинг сообщения: 0
Разбирался я тут с одной докой Atmel AVR204: BCD Arihmetics , преобразование 16 разрядного двоичного числа в десятично-двоичный код вот эта прцедурка

Код:
;***************************************************************************
;*
;* "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      


В упор не понял : .equ AtBCD0 =13 ;address of tBCD0
.equ AtBCD2 =15 ;address of tBCD1
откуда эти значения каков их смысл, соответственно непонятна эта строка
ldi r30,AtBCD2+1 ;Z points to result MSB + 1
после ее выполнения R30=10 ! как? И пожалуйста объясните как работает эта команда
ld tmp16a,-Z ;get (Z) with pre-decrement
Не конечно понятно что загружаем в регистр tmp16a (R19)
значение ячейки памяти данных адрес которой указан в Z,-1? Только где находится эта ячейка и что в ней?
[/code]

_________________
Данная эксклюзия является подмножеством астрациональных супремативных
монотенных федоний кадонарного экстрафазория


Вернуться наверх
 
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Сб янв 07, 2006 14:58:26 
Говорящий с текстолитом
Аватар пользователя

Карма: 5
Рейтинг сообщений: 4
Зарегистрирован: Пн авг 22, 2005 21:02:22
Сообщений: 1535
Откуда: Питер
Рейтинг сообщения: 0
Конструктор
.EQU Name = value
- присвоение константы.

Соответственно, выражением
ldi r30,AtBCD2+1
мы записываем в R30 значение константы AtDCD2, увеличенной на 1
В результате, в R30 имеем число 16 (десятичная нотация) или 0х10 в шестнадцатеричной

Z - это регистровая пара, состоящая из регистров ZH (R31) и ZL (R30)
То есть, загружая константу в R30, мы загрузили младшую половину пары Z.
В Z у нас лежит адрес какой-то ячейки ОЗУ. Командой ld, мы грузим содержимое этой ячейки в регистр.

_________________
Лучше быть первым в деревне, чем вторым в Риме


Вернуться наверх
 
Друзья! Скоро Новый Год! Китайский! Но мы работаем и в праздники тоже!

JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Отличное качество, подтвержденное более чем 600,000 пользователей! Более 10,000 заказов в день.

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Сб янв 07, 2006 15:43:47 
Родился

Карма: -6
Рейтинг сообщений: -12
Зарегистрирован: Вс ноя 06, 2005 17:57:53
Сообщений: 12
Откуда: Ulan-Ude
Рейтинг сообщения: 0
Цитата:
В результате, в R30 имеем число 16 (десятичная нотация) или 0х10 в шестнадцатерично

Конечно как я сразу не догадался, что то мозга заклинила увидел 10 подумал почему то что десятичная система Ж).

Но как же ld tmp16a,-Z если в Z , было 16D получается что мы загружаем данные находящиеся по адресу 15D(SRAM?) вот что тревожит а если у меня в главной программе используется эти ячейки? Почему тогда сразу не написать что эта подпрограмма использует 9 регистров и 16 ячеек памяти а то про регистры написали, а про ячейки памяти ни слова.

_________________
Данная эксклюзия является подмножеством астрациональных супремативных
монотенных федоний кадонарного экстрафазория


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения:
СообщениеДобавлено: Сб янв 07, 2006 17:06:14 
Говорящий с текстолитом
Аватар пользователя

Карма: 5
Рейтинг сообщений: 4
Зарегистрирован: Пн авг 22, 2005 21:02:22
Сообщений: 1535
Откуда: Питер
Рейтинг сообщения: 0
Ну застолби ты в главной программе эти адреса.

.DSEG
.ORG 0xff
Reserved: .byte 1

Начиная с адреса 0xff в ОЗУ, выделяем 1 байт памяти под переменную Reserved.

.DSEG прописывается до начала CSEG

_________________
Лучше быть первым в деревне, чем вторым в Риме


Вернуться наверх
 
В поисках идеального силового ключа

Выбор полупроводникового силового ключа зависит от его свойств, стоимости жизненного цикла преобразователя, а также цели его разработки и требований к производительности. Infineon предлагает целую линейку MOSFET и IGBT с широкой запрещенной зоной (SiC и GaN), продолжая при этом работать над их усовершенствованием.

Читать статью>>
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y