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

 
 
> Преобразвание bin-hex, Из bin на 7-сегментный индикатор
Kuznec9999
сообщение Apr 29 2008, 22:42
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 47
Регистрация: 29-04-08
Пользователь №: 37 157



Проблема следующая. После оцифровки сигнала в АЦП, в регистре имеется 8бит данных. Задача преобразовать этот двоичный регистр в три, к которые будут отображаться на трёх семисегментных индикаторах соответственно. В индикаторах должен отображаться десятичный эквивалент сигнала (0-255). Подскажите, легко ли это реализовать на ассемблере, и где про это можно почитать? Спасибо.

Сообщение отредактировал Kuznec9999 - Apr 29 2008, 22:43
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
TarasH
сообщение Apr 30 2008, 06:26
Сообщение #2





Группа: Новичок
Сообщений: 6
Регистрация: 20-03-05
Из: Ukraina
Пользователь №: 3 527



Смотри сюда http://www.atmel.ru/Articles/Atmel13.htm


--------------------
Терпи, терпи — терпець тебе шліфує,
сталить твій дух — тож і терпи, терпи.
В.Стус
Go to the top of the page
 
+Quote Post
777777
сообщение Apr 30 2008, 06:40
Сообщение #3


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

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(TarasH @ Apr 30 2008, 10:26) *


Цитата
В данной статье рассматривается программа "bin16bcd5" (см. Приложение, Программа 1), написанная Терешкиным А. В. согласно алгоритму, изложенному в [1], и выполняющая ту же задачу.
Последняя программа по быстродействию, длине кода и количеству используемых регистров оказалась более эффективной, чем первая.


Че-то я не представляю как она могла оказаться быстрее, если в ней требуется выполнить до 10 вычитаний на каждую цифру, т.е. всего 50, плюс кучу проверок, а в avr204.asm коротенький цикл выполняется лишь 16 раз.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Apr 30 2008, 08:34
Сообщение #4


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(777777 @ Apr 30 2008, 09:40) *
Че-то я не представляю как она могла оказаться быстрее, если в ней требуется выполнить до 10 вычитаний на каждую цифру, т.е. всего 50, плюс кучу проверок, а в avr204.asm коротенький цикл выполняется лишь 16 раз.

Ну так сравнить код и всё!
В avr204.asm цикл для bin2BCD16 не такой и коротенький.
Внутри 16 проходов цикла сдвига делается ещё десятичная коррекция, команды для которой у AVR нет. Это у 51-го можно коррекцию делать во время сдвига, выходит аккуратно и быстро.
Коррекция там сама сделана как цикл по байтам результата, итого это три прохода.
Это, конечно, быстрее, чем делением на 10, но в целом отвратительная реализация, попытка перенести на архитектуру AVR решение, которое на неё плохо ложится.
Во внутреннем цикле два вычитания, итого уже 16*3*2 = 96 гарантированных вычитаний.
Ещё там максимум четыре косвенных обращения к регистрам как к памяти через указатель Z, которые вместе эквивалентны четырём словным вычитаниям. Ещё эквивалент максимум 16*3*4 = 192 вычитания.
Итого 288 макс.

И Вы говорите, что 50 _максимум_ это много?
Ну и их там не 50. Для последней цифры единички вычитать не нужно вообще, для предпоследней вычитания байтовые, а не словные, для первой будет вычитаться максимум 7 раз. Ну там ещё компенсационные сложения для восстановления числа, итого там "лень считать, но в переводе на словные вычитания точно не больше 40".
Итого: avr204.asm
Код
;* 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

25 слов, 9 регистров, больше 750 тактов.

Метод вычитания с atmel.ru
Код
;* Количество слов кода            :25 + возврат
;* Количество циклов               :25/176 (Мин/Макс) + возврат
;* Использованные младшие регистры :нет
;* Использованные старшие регистры :4(fbinL,fbinH/tBCD0,tBCD1,tBCD2)
;* Использованные указатели        :нет

Столько же слов, в два раза меньше регистров, минимум в четыре раза быстрее.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Kuznec9999   Преобразвание bin-hex   Apr 29 2008, 22:42
- - rezident   Ключевое слово для поиска по форуму - BCD. Вот в т...   Apr 29 2008, 22:59
|- - Kuznec9999   Цитата(rezident @ Apr 30 2008, 02:59) Клю...   Apr 29 2008, 23:03
|- - Сергей Борщ   Цитата(Kuznec9999 @ Apr 30 2008, 02:03) Ж...   Apr 29 2008, 23:49
|- - rezident   Цитата(Kuznec9999 @ Apr 30 2008, 05:03) С...   Apr 29 2008, 23:54
|- - 777777   Цитата(Kuznec9999 @ Apr 30 2008, 03:03) С...   Apr 30 2008, 04:52
- - domowoj   Есть много методов преобр. Самый быстрый - табличн...   Apr 30 2008, 01:33
|- - MrYuran   Цитата(domowoj @ Apr 30 2008, 04:33) Есть...   Apr 30 2008, 05:24
|- - 777777   Цитата(MrYuran @ Apr 30 2008, 09:24) не п...   Apr 30 2008, 05:43
- - blackfin   Ещё пару ссылок: int >> str itoa на asm, и...   Apr 30 2008, 06:58
- - MrYuran   ЦитатаЭто, конечно, быстрее, чем делением на 10 А ...   Apr 30 2008, 08:49
|- - ReAl   Цитата(MrYuran @ Apr 30 2008, 11:49) А чт...   Apr 30 2008, 13:00
- - Kuznec9999   Попробовал avr204.asm, а именно bin2bcd8... На вых...   Apr 30 2008, 12:08
- - singlskv   Цитата(Kuznec9999 @ Apr 30 2008, 02:42) П...   Apr 30 2008, 15:30
- - singlskv   Цитата(singlskv @ Apr 30 2008, 19:30) 16 ...   Apr 30 2008, 18:43
- - Kuznec9999   Цитата(singlskv @ Apr 30 2008, 22:43) Код...   Apr 30 2008, 19:27
- - 777777   Цитата(singlskv @ Apr 30 2008, 22:43) Код...   May 2 2008, 15:07
- - singlskv   Цитата(777777 @ May 2 2008, 19:07) А нель...   May 2 2008, 16:38


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

 


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


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