Показано с 1 по 2 из 2
  1. #1
    Без позывного
    Регистрация
    21.01.2006
    Сообщений
    28
    Поблагодарили
    0
    Поблагодарил
    0

    Вопрос опять арифметика, что то не складывается

    просьба о помощи. не могу сообразить в том как сделать так что бы
    цифры по отдельности после преобразования составляли число.
    1,5,0,0 в итоге 1500 (DEC) 05DC(HEX)
    пример:
    var:.byte 1
    var1:.byte 1
    var2:.byte 1
    var3:.byte 1 ;выделяем для каждого числа байт, это потом будет
    выведено на ЖКИ индикатор к примеру число 1500
    ldi temp,1
    sts var,temp
    ldi temp,5
    sts var1,temp
    .set pl1 = var*1000
    .set pl2 = var1*100
    .set pl = pl1+pl2
    ldi r17,low(pl);младший
    ldi r18,high(pl);старший
    (это число мне нужно для дальнейших вычислений и потом как то
    надо опять его преобразовать в отдельные цифры уже вычисленные т.е.
    другое число 1500-1=1499 (1,4,9,9) )
    только после всего этого какая то ерунда получается.
    за ранее благодарен за помощь.
    все эти var-ы применяются как буферы получения с клавиатуры
    некоторой цифры (1-10) (10 - является как ноль).
    микроконтроллер использую AVR 8535


  2. #2
    Low Power
    Регистрация
    15.07.2004
    Адрес
    Харьков
    Сообщений
    89
    Поблагодарили
    0
    Поблагодарил
    0
    Насколько я понял, тебе требуется преобразование в BCD?
    Тогда это выглядит примерно так:

    ;---------------------------------------
    ; В данной процедуре мы переводим Bin (4 байта) в BCD.
    ; Вход - регисты Bin0, Bin1, Bin2, Bin3.
    ; Bin0 - младший.
    ; Выход - 10 байт ОЗУ: 61-6A
    ; 236/600 циклов, 78 слов памяти.
    ; 37,5 мкс (для 16 МГц).

    .def Bin0 = R11
    .def Bin1 = R12
    .def Bin2 = R13
    .def Bin3 = R14
    .def ASCII0 = R17
    .def ASCII1 = R18
    .def ASCII2 = R19
    .def ASCII3 = R20
    .def Count = R21

    .CSEG

    BinToBCD_4:
    push ASCII0
    push ASCII1
    push ASCII2
    push ASCII3
    push Count

    ldi ASCII0,$00 ; 1 000 000 000
    ldi ASCII1,$CA
    ldi ASCII2,$9A
    ldi ASCII3,$3B
    rcall BinToBCD4_digit
    sts (BCD4+0),Count

    ldi ASCII0,$00 ; 100 000 000
    ldi ASCII1,$E1
    ldi ASCII2,$F5
    ldi ASCII3,$05
    rcall BinToBCD4_digit
    sts (BCD4+1),Count

    ldi ASCII0,$80 ; 10000000
    ldi ASCII1,$96
    ldi ASCII2,$98
    ldi ASCII3,$00
    rcall BinToBCD4_digit
    sts (BCD4+2),Count

    ldi ASCII0,$40 ; 1000000
    ldi ASCII1,$42
    ldi ASCII2,$0F
    ldi ASCII3,$00
    rcall BinToBCD4_digit
    sts (BCD4+3),Count

    ldi ASCII0,$A0 ; 100000
    ldi ASCII1,$86
    ldi ASCII2,$01
    ; ldi ASCII3,$00 ; Для экономии памяти, обнуленные регистры больше не трогаем.
    rcall BinToBCD4_digit
    sts (BCD4+4),Count

    ldi ASCII0,$10 ; 10000
    ldi ASCII1,$27
    ldi ASCII2,$00
    ; ldi ASCII3,$00
    rcall BinToBCD4_digit
    sts (BCD4+5),Count

    ldi ASCII0,$E8 ; 1000
    ldi ASCII1,$03
    ; ldi ASCII2,$00
    ; ldi ASCII3,$00
    rcall BinToBCD4_digit
    sts (BCD4+6),Count

    ldi ASCII0,$64 ; 100
    ldi ASCII1,$00
    ; ldi ASCII2,$00
    ; ldi ASCII3,$00
    rcall BinToBCD4_digit
    sts (BCD4+7),Count

    ldi ASCII0,$0A ; 10
    ; ldi ASCII1,$00
    ; ldi ASCII2,$00
    ; ldi ASCII3,$00
    rcall BinToBCD4_digit
    sts (BCD4+8),Count
    sts (BCD4+9),Bin0

    pop Count
    pop ASCII3
    pop ASCII2
    pop ASCII1
    pop ASCII0

    ret

    BinToBCD4_digit:
    ldi Count, -1
    BinToBCD4_digit_loop:
    inc Count
    sub Bin0,ASCII0
    sbc Bin1,ASCII1
    sbc Bin2,ASCII2
    sbc Bin3,ASCII3

    brsh BinToBCD4_digit_loop
    add Bin0,ASCII0
    adc Bin1,ASCII1
    adc Bin2,ASCII2
    adc Bin3,ASCII3

    ret
    ;----------------------------------------------------
    .DSEG
    BCD4: .BYTE 10 ; Строка символов, получившаяся из 4-битного числа.

    Мой совет - используй для арифм. операций "простые" переменные, а преобразовывай в BCD только для вывода на ЖКИ.

Похожие темы

  1. Ответов: 3
    Последнее сообщение: 24.09.2004, 20:36
  2. ...опять про транзисторы
    от UN8FM в разделе Радиолюбительские технологии
    Ответов: 3
    Последнее сообщение: 02.02.2004, 05:39
  3. Опять LM317T
    от UN7JHS в разделе Радиолюбительские технологии
    Ответов: 10
    Последнее сообщение: 15.01.2004, 02:03
  4. Опять Р-250M
    от vemit в разделе Р-250
    Ответов: 6
    Последнее сообщение: 05.03.2003, 10:29

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
Похоже, что вы используете блокировщик рекламы :(
Форум QRZ.RU существует только за счет рекламы, поэтому мы были бы Вам благодарны если Вы внесете сайт в список исключений!
как отключить
×
Рейтинг@Mail.ru
eXTReMe Tracker


Похоже, что вы используете блокировщик рекламы :(
Форум QRZ.RU существует только за счет рекламы, поэтому мы были бы Вам благодарны если Вы внесете сайт в список исключений!
как отключить
×