Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
28.04.2011, 21:46
|
|
Частый гость
Регистрация: 18.01.2009
Сообщений: 22
Сказал спасибо: 4
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Преобразование 2-х байтного числа в набор десятизначных цифр (Assembler,PIC)
Преобразование 2-х байтного числа в набор ДЕСЯТИЧНЫХ цифр (Assembler,PIC)
Может, кто-нибудь писал на Assembler для PIC контролеров функцию преобразования числа, заданного 2 байтами NumH:NumL в число, выводимое на группу 7-сегментных индикаторов (или строку символов, или массив десятизначных цифр)?
Мало ли понадобится
Код:
|
;Коды цифр для 7-сегментного индикатора с общим анодом:
NUM7_1 EQU B'11111001'
NUM7_2 EQU B'10100100'
NUM7_3 EQU B'10110000'
NUM7_4 EQU B'10011001'
NUM7_5 EQU B'10010010'
NUM7_6 EQU B'10000010'
NUM7_7 EQU B'11111000'
NUM7_8 EQU B'10000000'
NUM7_9 EQU B'10010000'
NUM7_0 EQU B'11000000'
dat0 UDATA
ARR_7DIG_IND RES 8 ; массив (8 байт), хранящий показания 7-сегментного индикатора на 8 разрядов
NumH RES 1
NumL RES 1 |
P.S. У меня PIC18F4520.
Функцию вывода массива ARR_7DIG_IND на группу 7-сегментных индикаторов я написал. Надо заполнить массив.
Последний раз редактировалось Opasif; 28.04.2011 в 21:54.
|
|
|
|
28.04.2011, 23:53
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 8,003
Сказал спасибо: 0
Сказали Спасибо 4,946 раз(а) в 2,374 сообщении(ях)
|
Re: Преобразование 2-х байтного числа в набор десятизначных цифр (Assembler,PIC)
писал на основе стандартных некрочиповских аппнотов:
1, преобразование BIN › BCD - перевод 16разрядного двоичного числа в 5разрядное десятичное
2. преобразование BCD › 7SEGMENT - перевод каждого десятичного разряда в семисегментный код путем сложения базового адреса таблицы с числом в данном разряде (указатель на код)
|
|
|
|
29.04.2011, 10:08
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.02.2008
Адрес: Днепр. Украина
Сообщений: 3,294
Сказал спасибо: 442
Сказали Спасибо 1,048 раз(а) в 706 сообщении(ях)
|
Re: Преобразование 2-х байтного числа в набор десятизначных цифр (Assembler,PIC)
В двух словах алгоритм прост:
вычитаем из исходного числа последовательно 10000 1000 100 10 и подсчитывая количество циклов получаем каждую десятичную цифру.
Недостаток - долго и время счета сильно зависит от исходных данных, можно попробовать сразу делить, но как будет по времени нужно смотреть.
__________________
misterdi<@>i.ua
Последний раз редактировалось MisterDi; 29.04.2011 в 10:11.
|
|
|
|
29.04.2011, 10:57
|
|
Временная регистрация
Регистрация: 09.06.2006
Адрес: Lugansk
Сообщений: 75
Сказал спасибо: 0
Сказали Спасибо 26 раз(а) в 21 сообщении(ях)
|
Re: Преобразование 2-х байтного числа в набор десятизначных цифр (Assembler,PIC)
Готовые подпрограммы
Осталось подставить только свои коды цифр
Код:
|
;************************************************* ***************************;
;Название: bin2bcd bcd1, bcd2, bcd3 = bin1, bin2
;Входные данные: двоичное число в регистрах bin1, bin2. При этом bin1 - старший байт.
;Выходные: единицы будут в младшей тетраде регистра bcd3, десятки в старшей регистра bcd3,
;сотни в младшей тетраде регистра bcd2, тысячи в старшей bcd2,
;десятки тысяч будут находиться в младшей тетраде регистра bcd1.
;Используемые регистры: bin1, bin2, bcd1, bcd2, bcd3, ctr.
bin2bcd
movlw .16
movwf ctr
clrf bcd1
clrf bcd2
clrf bcd3
goto start
adjdec movlw 0x33
addwf bcd1,f
addwf bcd2,f
addwf bcd3,f
movlw 0x03
btfss bcd1,3
subwf bcd1,f
btfss bcd2,3
subwf bcd2,f
btfss bcd3,3
subwf bcd3,f
movlw 0x30
btfss bcd1,7
subwf bcd1,f
btfss bcd2,7
subwf bcd2,f
btfss bcd3,7
subwf bcd3,f
start rlf bin2,f
rlf bin1,f
rlf bcd3,f
rlf bcd2,f
rlf bcd1,f
decfsz ctr,f
goto adjdec
return
;************************************************* ****************************** |
Код:
|
ORG 0x160
;************************************************* ********************;
;=================== LCD TABLE ==================================
; Подпрограмма вывода на семисегментный индикатор
;порт В0 -А ........ В7 - Н
;Исходные данные: В регистре W число от 0 до 7F
;Выходные данные: В регистре W код для индикатора
LCDTable
; retlw ; ABCDEFGH = '8,' hXX
ADDLW .0
BTFSC STATUS,Z
retlw b'00000011' ; 0
ADDLW .255
BTFSC STATUS,Z
retlw b'10011111' ; 1
ADDLW .255
BTFSC STATUS,Z
retlw b'00100101' ; 2
ADDLW .255
BTFSC STATUS,Z
retlw b'00001101' ; 3
ADDLW .255
BTFSC STATUS,Z
retlw b'10011001' ; 4
ADDLW .255
BTFSC STATUS,Z
retlw b'01001001' ; 5
ADDLW .255
BTFSC STATUS,Z
retlw b'01000001' ; 6
ADDLW .255
BTFSC STATUS,Z
retlw b'00011111' ; 7
ADDLW .255
BTFSC STATUS,Z
retlw b'00000001' ; 8
ADDLW .255
BTFSC STATUS,Z
retlw b'00001001' ; 9
ADDLW .255
BTFSC STATUS,Z
retlw b'00010001' ; A
ADDLW .255
BTFSC STATUS,Z
retlw b'11000001' ; B
ADDLW .255
BTFSC STATUS,Z
retlw b'01100011' ; C
ADDLW .255
BTFSC STATUS,Z
retlw b'10000101' ; D
ADDLW .255
BTFSC STATUS,Z
retlw b'01100001' ; E
ADDLW .255
BTFSC STATUS,Z
retlw b'01110001' ; F
retlw b'00000011' ; 0
; ************************************************** *************************** |
__________________
picping.lg.ua
|
|
|
|
29.04.2011, 13:06
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Преобразование 2-х байтного числа в набор десятизначных цифр (Assembler,PIC)
Частотомер уж сразу...
MiniFmetr.zip
|
|
|
|
29.04.2011, 14:46
|
|
Супер-модератор
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,509 раз(а) в 956 сообщении(ях)
|
Re: Преобразование 2-х байтного числа в набор десятизначных цифр (Assembler,PIC)
Opasif, Вы бы название топика поправили, а то глаза режет и догадываться приходится - о чем речь. Цифры то все-таки десятичные, а не десятизначные.
|
|
|
|
29.04.2011, 19:52
|
|
Частый гость
Регистрация: 18.01.2009
Сообщений: 22
Сказал спасибо: 4
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Преобразование 2-х байтного числа в набор десятизначных цифр (Assembler,PIC)
Большое спасибо за помощь! Буду разбираться с кодом и воплощать в прошивку.
Halex07, как исправить название темы?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:44.
|
|