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

 
 
> Динамическая индикация
Ich
сообщение Jan 12 2006, 21:15
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 12-05-05
Пользователь №: 4 962



Всем привет, пытаюсь написать прогу для пятиразрядного динамического индикатора на 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 Может быть есть более простые способы для того, чтобы разложить число из регистровой пары на пять разрядов и положить соответствующий разряд в свой регистр? Подскажите хотя бы... дальше я уж сам додумаю.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
defunct
сообщение Jan 12 2006, 22:19
Сообщение #2


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(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
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 28th July 2025 - 08:14
Рейтинг@Mail.ru


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