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

 
 
> преобразования 16 bit to 5 digit ASCII, ПРЕОБРАЗОВАНИЯ ЧИСЕЛ ДЛЯ ЖКИ
archic
сообщение Jul 13 2013, 19:29
Сообщение #1





Группа: Новичок
Сообщений: 5
Регистрация: 13-07-13
Из: Москва
Пользователь №: 77 516



Здравствуйте!!! Господа
Подскажите как преобразовать в BCD формат для отображения на LCD в этой программе я не знаю ПОМОГИТЕ ПОЖАЛУЙСТА!!!
мне надо от 0 до 9999. Пишу на асме
CODE
1.;********************************************************************
*****

2. ;* *

3. ;* Convert unsigned 16 bit to 5 digit ASCII *

4. ;* *

5. ;* *

6. ;* *

7. ;*************************************************************************

8. ;

9. ;Входной: R17, R16 = 16 bit значение 0… 65535

10.; выход: R20, R18, R19, R17, R16 = 5 цифр (ASCII)

11.; цикл: 20… 170

12.

13.push temp

14.

15.LCDCLR ;очистка LCD

16.LCD_COORD 1,0;

17.

18.pop temp

19.

20. bin16_ascii:

21.

22.

23.

24.inc temp

25. ldi r17,0

26.

27.

28.

29.; ldi r21, 10 + ’0′

30.; _bcd0: dec r21

31.; subi r16, low(-100000) ;+100000

32.; sbci r17, high(-100000)

33.; brcs _bcd0

34.

35. ldi r20, -1 + ’0′

36. _bcd1: inc r20

37. subi r16, low(10000) ;-10000

38. sbci r17, high(10000)

39. brcc _bcd1

40.

41. ldi r19, 10 + ’0′

42. _bcd2: dec r19

43. subi r16, low(-1000) ;+1000

44. sbci r17, high(-1000)

45. brcs _bcd2

46.

47. ldi r18, -1 + ’0′

48. _bcd3: inc r18

49. subi r16, low(100) ;-100

50. sbci r17, high(100)

51. brcc _bcd3

52.

53. ldi r17, 10 + ’0′

54. _bcd4: dec r17

55. subi r16, -10 ;+10

56. brcs _bcd4

57.

58. subi r16, -’0′

59.

60. ;————————————————————————-

61.

62. rcall RD_DATA;

63.

64.

65.

66.

67.reti ;выход


Сообщение отредактировал IgorKossak - Jul 15 2013, 07:07
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Игoрь
сообщение Sep 15 2013, 16:26
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 15-05-13
Пользователь №: 76 836



можно ещё вот так:

Код
;***************************************************************************
;*
;* "bin2BCD16" - 16-bit Binary to BCD conversion
;*
;* This subroutine converts a 16-bit number (fbinH:fbinL) to a 5-digit
;* packed BCD number represented by 3 bytes (tBCD2:tBCD1:tBCD0).
;* MSD of the 5-digit number is placed in the lowermost nibble of tBCD2.
;*  
;* Number of words    :25
;* Number of cycles    :751/768 (Min/Max)
;* Low registers used    :3 (tBCD0,tBCD1,tBCD2)
;* High registers used  :4(fbinL,fbinH,cnt16a,tmp16a)    
;* Pointers used    :Z
;*
;***************************************************************************

;    Courtesy Atmel app note AVR204.ASM

bin2BCD16:
    ldi        cnt16a,16; Init loop counter    
    clr        tBCD2    ; clear result (3 bytes)
    clr        tBCD1        
    clr        tBCD0        
    clr        ZH        ; clear ZH (not needed for AT90Sxx0x)
bBCDx_1:
    lsl        fbinL    ; shift input value
    rol        fbinH    ; through all bytes
    rol        tBCD0    ;
    rol        tBCD1
    rol        tBCD2
    dec        cnt16a    ; decrement loop counter
    brne    bBCDx_2    ; if counter not zero
    ret                ; return

bBCDx_2:
    ldi        r30,AtBCD2+1;Z points to result MSB + 1
bBCDx_3:
    ld        tmp16a,-Z; get (Z) with pre-decrement
    subi    tmp16a,-$03; add 0x03
    sbrc    tmp16a,3; if bit 3 not clear
    st        Z,tmp16a; store back
    ld        tmp16a,Z; get (Z)
    subi    tmp16a,-$30; add 0x30
    sbrc    tmp16a,7; if bit 7 not clear
    st        Z,tmp16a; store back
    cpi        ZL,AtBCD0; done all three?
    brne    bBCDx_3    ; loop again if not
    rjmp    bBCDx_1
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 20:47
Рейтинг@Mail.ru


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