Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Динамическая индикация
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Ich
Всем привет, пытаюсь написать прогу для пятиразрядного динамического индикатора на AVR mega16. Задача - в регистровой паре лежит число, его надо вывести на индикатор. Написал дешифратор - выводит на матрицы числа лежащие в соответствующих регистрах, далее от простого к сложному... начал с двух рязрядов, далее три... и тут...все - тупик sad.gif . Не могу перейти через 199, причина ясна - переполнение регистра. Но как перейти к регистровой паре в моем алгоритме не знаю, т. к. я понял что к ней можно прибавлять только константу до 63, а мне надо будет прибавлять 100, затем 1000 (конечно можно 20 раз по 50... но это не красиво). Вот текст программы которая раскладывает число лежащие в регистре r3, по разрядно в регистры r18:r21:r23 (пока только три smile.gif )

L12:ldi r16,100
add r5,r16
cp r3,r5
brlo L11
inc r18
rjmp L12
L11:sub r5,r16
mov r6,r3
sub r6,r5
L9: ldi r16,10
add r4,r16
cp r6,r4
brlo L10
inc r21
rjmp L9
L10:sub r4,r16
mov r23,r6
sub r23,r4

Если кто-то может помочь мне, то я бы был очен признателен... a14.gif Может быть есть более простые способы для того, чтобы разложить число из регистровой пары на пять разрядов и положить соответствующий разряд в свой регистр? Подскажите хотя бы... дальше я уж сам додумаю.
mse
Разбирацца лень. Вот ссылка, там два варианта. Один быстрый, другой чуть медленней, но компактней.
http://www.telesys.ru/wwwboards/mcontrol/2...es/141667.shtml
defunct
Цитата(Ich @ Jan 12 2006, 23:15) *
Если кто-то может помочь мне, то я бы был очен признателен... a14.gif Может быть есть более простые способы для того, чтобы разложить число из регистровой пары на пять разрядов и положить соответствующий разряд в свой регистр? Подскажите хотя бы... дальше я уж сам додумаю.


Вам нужно делить число на 10 5 раз, а остаток сохранять в буфер индикатора (в регистрах или в памяти). Быстрая функция деления на 10 16ти раздного числа:

Код
.def AH    = R25
.def AL    = R24
.def BH    = R23
.def BL    = R22
.def CH    = R21
.def CL    = R20
.def DH    = R1
.def DL    = R0
;-----------------------------------------------------
; Функция 16-ти разрядного целочисленного деления на 10
;---> BH:BL - Делимое
;<--- BH:BL - ОСТАТОК,  XH:XL - Частное
div10_16:
    ldi  AL, $CD
    mul  BL, AL
    mov  XL, DH
    mul  BH, AL
    ldi  XH, 0
    add  XL, DL
    adc  XH, DH

    ldi  AL, $CC
    mul  BL, AL
    add  DL, XL
    adc  DH, XH
    mov  XL, DH
    ldi  XH, 0
    adc  XH, XH
    mul  BH, AL
    add  XL, DL
    adc  XH, DH

    lsr  XH
    ror  XL
    lsr  XH
    ror  XL
    lsr  XH
    ror  XL

    ldi  AL, 10
    mul  XL, AL
    sub  BL, DL
    sbc  BH, DH
    mul  XH, AL
    sub  BH, DL  

    ret
prottoss
http://atmel.ru/Articles/Atmel13.htm
yung
Делал лет 8 назад, написано коряво, но работало.
Ich
Всем спасибо a14.gif очень помогли!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.