Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Преобразование BIN->7сегм. код, ? 
:(
    Опции темы
quarz
  Дата 15.1.2005, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 7.1.2005

Репутация: нет
Всего: 3



У меня есть переменная. 1 байт. Ее мне нужно вывести на семисегментный индикатор.
Я знаю как перекинуть бинарную переменную на индикатор если она не больше .9
Код


[code=asm]
Tbl
           addwf    PCL,1      ; W + PC -> PC
           retlw      b'00111111'; ..FEDCBA = '0'
           retlw      b'00000110'; .....CB. = '1'
           retlw      b'01011011'; .G.ED.BA = '2'
           retlw      b'01001111'; .G..DCBA = '3'
           retlw      b'01100110'; .GF..CB. = '4'
           ...
           ...
           retlw      b'01101111'; .GF.DCBA = '9'


а если больше, то придется подключать второй индикатор, третий, и так до 255?

PM MAIL   Вверх
rcdimon
Дата 15.1.2005, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 766
Регистрация: 12.7.2004
Где: Москва

Репутация: нет
Всего: 2



Что то я не понял твой вопрос. Если больше, чем 9, то эту обнуляешь, а к старшей +1. А потом уже на дешифрацию.
PM MAIL ICQ   Вверх
PILOT
Дата 15.1.2005, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


производство
****


Профиль
Группа: Модератор
Сообщений: 2724
Регистрация: 4.4.2002
Где: москва

Репутация: 20
Всего: 54



Это преобразование в семисегментный код:
Код

.db $40,$79,$24,$30,$19,$12,$02,$78,$00,$10,$08,$03,$46,$21,$06,$0E


Это преобразование из бинарного в BCD формат (для вывода на 7LEDs):
Код

.def    fASCIIL =r11
.def    tASCII0 =r11
.def    fASCIIH =r12
.def    tASCII2 =r13
.def    tASCII3 =r14
.def    tASCII4 =r15
.def    tASCII1 =r16
.def    cnt16a  =r16
.def    tmp16a  =r17
.def    tmp16b  =r18

INIT:     LdI         R16,high($045F);                «ß¡«ó¡«⌐ µ¿¬½ »α«úαá¼¼δ
         Out         SPH,R16;                             ¿¡¿µ¿á½¿ºáµ¿∩ ßΓѬá
         LdI         R16,low($045F)
         Out         SPL,R16
         LdI         cnt16a,20
         Mov         fASCIIL,cnt16a;
         LdI         cnt16a,0
         Mov         fASCIIH,cnt16a
         RCall       bin2ASCII16

Main:  
       RJmp Main;
bin2ASCII16:
       ldi     tmp16a, low(10000)
       ldi     tmp16b, high(10000)
       rcall   bin2ASCII_digit
       mov     tASCII4, cnt16a
       ldi     tmp16a, low(1000)
       ldi     tmp16b, high(1000)
       rcall   bin2ASCII_digit
       mov     tASCII3, cnt16a
       ldi     tmp16a, low(100)
       ldi     tmp16b, high(100)
       rcall   bin2ASCII_digit
       mov     tASCII2, cnt16a
       ldi     tmp16a, low(10)
       ldi     tmp16b, high(10)
bin2ASCII_digit:
       ldi     cnt16a, -1
bin2ASCII_digit_loop:
       inc     cnt16a
       sub     fASCIIL, tmp16a
       sbc     fASCIIH, tmp16b
       brsh    bin2ASCII_digit_loop
       add     fASCIIL, tmp16a
       adc     fASCIIH, tmp16b
       ret
.Exit


СУВ.




--------------------
тут могла быть Ваша реклама...
PM MAIL WWW ICQ   Вверх
quarz
Дата 15.1.2005, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 7.1.2005

Репутация: нет
Всего: 3



PILOT насколько я понимаю это не пиковский асм. Как эта штука работает? Или хотя бы объясни, где в этом коде исходный регистр, который мы преобразовываем и в каких переменных выходные данные? Что значит команда Ldi? Покопался, аналогов у i286 асма не нашел.
PM MAIL   Вверх
PILOT
Дата 16.1.2005, 01:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


производство
****


Профиль
Группа: Модератор
Сообщений: 2724
Регистрация: 4.4.2002
Где: москва

Репутация: 20
Всего: 54



Это ассемблер AVR.

Вот документация с алгоритмами.

СУВ.

Присоединённый файл ( Кол-во скачиваний: 12 )
Присоединённый файл  AVR204_BCD.pdf


--------------------
тут могла быть Ваша реклама...
PM MAIL WWW ICQ   Вверх
quarz
Дата 16.1.2005, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 7.1.2005

Репутация: нет
Всего: 3



Спасибо буду разбираться
PM MAIL   Вверх
rcdimon
Дата 17.1.2005, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 766
Регистрация: 12.7.2004
Где: Москва

Репутация: нет
Всего: 2



А вот какой способ переделать байт в несколько десятичных цифр придумал я. Это метод может и не очень крассив с точки зраения алгоритма, он он работает. На вход нашей процедуре подаем байт, который и нужно преобразовать. Это должна быть копия стчетчика TMR0. Еще должно быть например 3 переменные, хранящие в себе двоичное значение цифр, которые нужно отобразить на индикаторе.

Мы инкрементируем полученный байт дотех пор, пока он не будет равн нулю. То есть столько раз, какое хранится в байте число. А в теле цикла инкрементируем самую младшую переменную
индикатора, пусть это будет ind_1 - переменная первого индикатора. А после инкремента проверяем на равно сть 10. Если это так, то мы ее обнуляем и инкрементируем более старшую и опять проверяем на 10 и так до тех пор, пока не кончатся разряды.

То есть по сути это то же, что и следить за таймером и при переходе за 9 увеличивать более старший разряд. Но может получиться так, что Он не успеет понять, что это 10 и число проскочит за 10. И будет равно, например, 16. Тогда он все равно его обнулит, а старший инкрементирует, но 6 импульсов будут потеряны. И точность вашего частотомера будет никакой. А так, мы даже не пытаемся следить за таймером, а уже после его работы смотрим сколько он насчитал. То есть прокручиваем то же самое, но в темпе, который удобен для микроконтроллера. Как ускоренная съемка и замедленный просмотр. Никто и не пытается что то увидеть, пока это событие снимает камера, а потом, во время просмотра люди прокручивают по кадрам, как им удобно.
PM MAIL ICQ   Вверх
PILOT
Дата 17.1.2005, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


производство
****


Профиль
Группа: Модератор
Сообщений: 2724
Регистрация: 4.4.2002
Где: москва

Репутация: 20
Всего: 54



Описанный способ:
1) задействует таймер, а этого, мягко скажем, лучше не делать.
2) какой-то сложный... гораздо проще вычитать 10, 100, 1000 и т.д. в зав-ти от разрядности.

СУВ.


--------------------
тут могла быть Ваша реклама...
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0876 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.