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

 
 
> Преобразвание 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
Ответов
MrYuran
сообщение Apr 30 2008, 08:49
Сообщение #2


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата
Это, конечно, быстрее, чем делением на 10

А что вас так смущает деление на 10?
В пределах байта это 4 сдвига и 4 сложения
Равно как и умножение


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
ReAl
сообщение Apr 30 2008, 13:00
Сообщение #3


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

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



Цитата(MrYuran @ Apr 30 2008, 11:49) *
А что вас так смущает деление на 10?
В пределах байта это 4 сдвига и 4 сложения
Равно как и умножение
Ну, тут плавно перешли к полуоффтопикув виде сравнения преобразования 16-битного числа в avr204.asm и на сайте atmel.ru. Там "деление" на 10 несколько подлиннее будет. Хотя с учётом наличия команд умножения у мег и для 16 бит "деление" на 10 по скорости гораздо выгоднее, чем avr204.asm, а в одном из вариантов выгоднее и чем вычитания, но длиннее по коду.
Ну а avr204.asm для 16 бит соревнуется по тормознутости с именно делением на число, в качестве которого в процедуру передаётся 10.

Кстати, для вывода как правило удобнее иметь сразу распакованный BCD или ASCII, это тоже можно сделать вычитаниями, там получается приблизительно те же числа (26 слов, от 32 до 183 циклов в зависимости от числа, исходник, кажется, от =AVR=, пробегал по форуму на телесисемамах лет 5 назад).
Если слегка модифицировать алгоритм - убрать восстановление остатка после циклов вычитаний и циклы через один сделать циклами сложения, то это будет ещё короче при приблизительно тех же временах, только минимум будет не для 0, а для 9090..9099, а максимум не для 59999, а для 60900..60909.
Код
;Converts unsigned integer value of bin_h:bin_l to ASCII or unpacked BCD
;Only upper registers can be used, bin_h/asc4 and bin_l/asc5
;variable pairs must share common register each.
;21 words, max/min cycles with rcall/ret: 183(60900..60909)/27(9090..9099)
;No other registers used;)
;  ascii/unpacked BCD in "reversed" order - leftmost digit stored in r20, rightmost one - in r16

; use for BIN to ASCII
.set ZERO='0'
.set NINE='9'

; use for BIN to unpacked BCD
;.set ZERO=0
;.set NINE=9

.def    asc1    =r20
.def    asc2    =r19
.def    asc3    =r18
;
.def    asc4    =r17
.def    bin_h    =r17
;
.def    asc5    =r16
.def    bin_l    =r16
;

itoa:
    ldi    asc1,ZERO-1;Will be '0' after 1st increment
sub10k:
    inc    asc1;'0','1','2','3','4','5','6'
    subi    bin_l,low(10000)
    sbci    bin_h,high(10000)
    brsh    sub10k
;
    ldi    asc2,NINE+1
add1k:
    dec    asc2;'9','8','7','6','5','4','3','2','1','0'
    subi    bin_l,low(-1000)
    sbci    bin_h,high(-1000)
    brlo    add1k
;
    ldi    asc3,ZERO-1
sub100:
    inc    asc3;'0','1','2','3','4','5','6','7','8','9'
    subi    bin_l,low(100)
    sbci    bin_h,high(100)
    brsh    sub100
;
    ldi    asc4,NINE+1;Re-use bin_h as ASC4
add10:
    dec    asc4;'9','8','7','6','5','4','3','2','1','0'
    subi    bin_l,-10;Re-use bin_l as ASC5
    brlo    add10
    subi    asc5,-(ZERO);convert to ASCII
;
    ret


--------------------
Ну, я пошёл… Если что – звоните…
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
- - TarasH   Смотри сюда http://www.atmel.ru/Articles/Atmel1...   Apr 30 2008, 06:26
|- - 777777   Цитата(TarasH @ Apr 30 2008, 10:26) Смотр...   Apr 30 2008, 06:40
|- - ReAl   Цитата(777777 @ Apr 30 2008, 09:40) Че-то...   Apr 30 2008, 08:34
- - blackfin   Ещё пару ссылок: int >> str itoa на asm, и...   Apr 30 2008, 06:58
- - 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 Текстовая версия Сейчас: 23rd July 2025 - 00:52
Рейтинг@Mail.ru


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