7246|5

4

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

【转贴】16 bits to packed BCD, 51 ASM. 61周期/80字节 [复制链接]

TEST_NUM  EQU 65432
  ORG 000H
    MOV R2, #LOW(TEST_NUM) ; #11111111B
    MOV R3, #HIGH(TEST_NUM); #11111111B ; 65535
    CALL BIN2BCD
    SJMP $

;==============================
BIN2BCD:
    ;--------------------------------------*
    ;Input:  R3:R2 --- 16 bits bin         |
    ;                R2--Bit 0 to bit 7    |
    ;                R3--Bit 8 to bit 15   |
    ;Output: R7:R6:R5 --- 5 Dig Packed BCD |
    ;                     R5: 个位/十位    |
    ;                     R6: 百位/千位    |
    ;                     R7: 万位         |
    ;Usage:  PSW (C, AC, OV), Acc, B       |
    ;                                      |
    ;PS: 61 CYs only.  78 bytes            |
    ;           DengMiao  2007-4 Guangzhou |
    ;--------------------------------------*
    
    MOV A, R3    
    RRC A
    MOV B, A
    MOV A, R2
    RRC A
    MOV C, B.0
    RRC A
    XCH A, B
    RR A
    ANL A, #00111111B
    MOV R5, A
    RL A
    ADD A, R5
    XCH A, B
;------------------------------
    ADD A, B
    JC BIN2BCD_L1
      SJMP BIN2BCD_L2
BIN2BCD_L1:
      INC R5
      ADD A, #6
BIN2BCD_L2:
    ADD A, B
    JC BIN2BCD_L1B
      SJMP BIN2BCD_L2B
BIN2BCD_L1B:
      INC R5
      ADD A, #6
BIN2BCD_L2B:
    MOV B, #25
    DIV AB
    CJNE A, #10, BIN2BCD_L3
      INC R5
      CLR A
BIN2BCD_L3B:
    MOV R7, A  ; *100
    MOV A, R2
    ANL A, #00000011B
    MOV R6, A
    MOV A, #10
    XCH A, B
    RL A
    RL A
    ORL A, R6
    DIV AB
    SWAP A
    ORL A, B
    XCH A, R5
    MOV B, #10
    DIV AB
    XCH A, R7
    SWAP A
    ORL A, B
    SWAP A
    MOV R6, A
    RET
BIN2BCD_L3:
    SJMP BIN2BCD_L3B
;----------END OF BIN2BCD-------

  END

此帖出自51单片机论坛

最新回复

着魔不来的   详情 回复 发表于 2007-4-11 09:09
点赞 关注
 

回复
举报

4

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

算法说明

把16bits, 分为3段:
     X -- Bit 10 到 Bit 15, 共 6 bits; (0 - 63)      *1024
     Y -- Bit 2 到 Bit 9,   共 8 bits; (0 - 255)     *4
     Z -- Bit 0 到 Bit 1,   共 2 bits; (0 - 3)       *1

可得到:
     1024 * X + 4 * Y + Z

   = 1000 * X + 24 * X + 4 * Y + Z

   = 1000 * X + 4 * ( 6 * X + Y ) + Z

   = 1000 * X + 4 * [ Y + (3*X) + (3*X)] + Z


  其中 X 的范围为 0 -- 63, 那么(3*X)的范围就为 0 -- 189, <255 (1 byte)
Y+(3*X) 如进位就 X 加1, [Y+(3*X)]-256 加 6, (因为 24 = 4 * 6).
另外, {[Y + (3*x)] - 256}+6 < 255 .

  = 1000 * (X+i) + 4 * {[Y + (3*x) + (3*x)] + 6 * i } + Z

  =   1000 * (X+i)
     + 100 * {[Y+3*X+3*X+6*i] \ 25 }
     + 4 * {[Y+3*X+3*X+6*i] MOD  25 }  + Z

其中   i          范围为    0 -- 2
     {[Y+3*X+3*X+6*i] \ 25 } <= 10
     4 * {[Y+3*X+3*X+6*i] MOD  25 }  + Z <= 99
此帖出自51单片机论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

速度优化

优化 一般 MOV A, R3 MOV A, R3 RRC A CLR C RRC A MOV B, A MOV B, A MOV A, R2 MOV A, R2 XCH A, B RRC A RRC A MOV C, B.0 XCH A, B CLR C RRC A RRC A XCH A, B XCH A, B RR A RRC A ANL A, #00111111B XCH A, B MOV R5, A MOV R5, A RL A RL A ADD A, R5 ADD A, R5 XCH A, B XCH A, B ;--------------------------------------
此帖出自51单片机论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

4
 

Re: 【转贴】16 bits to packed BCD, 51 ASM. 61周期/80字节

TEST_NUM EQU 12345 ORG 000H MOV R2, #LOW(TEST_NUM) ; #11111111B MOV R3, #HIGH(TEST_NUM); #11111111B ; 65535 CALL BIN2BCD SJMP $ ;================================== BIN2BCD: ;--------------------------------------* ;Input: R3:R2 --- 16 bits bin | ; R2--Bit 0 to bit 7 | ; R3--Bit 8 to bit 15 | ;Output: R7:R6:R5 --- 5 Dig Packed BCD | ; R5: 个位/十位 | ; R6: 百位/千位 | ; R7: 万位 | ;Usage: PSW (C, AC, OV), Acc, B | ; | ;PS: 61 CYs only. 73 bytes | ; DengMiao 2007-4 Guangzhou | ;--------------------------------------* MOV A, R2 ANL A, #00000011B MOV R6, A ; R6 --- *1 (bit 0 to bit 1) (2 bits) MOV A, R3 RRC A MOV B, A MOV A, R2 RRC A MOV C, B.0 RRC A MOV R7, A ; R7 --- *4 (bit 2 to bit 10) (8 bits) MOV A, #25 ; 25 * 4 = 100 XCH A, B RR A ANL A, #00111111B MOV R5, A ; R5 --- *1024 (bit 11 to bit 15) (6 bits) RL A ADD A, R5 XCH A, R7 ; R7 == 3 * R5 (<= 3*63=189 < 255) ; A --- *4 ;------------------------------ ADD A, R7 ; 4* (A + 3*R5) JC BIN2BCD_L1 SJMP BIN2BCD_L2 BIN2BCD_L1: INC R5 ; +1000 ADD A, #6 ; + 24 (4*6) BIN2BCD_L2: ADD A, R7 ; 4*(A + 3*R5 + 3*R5)= 4*A + 24*R5 JC BIN2BCD_L1B SJMP BIN2BCD_L2B BIN2BCD_L1B: INC R5 ; +1000 ADD A, #6 ; + 24 (4*6) BIN2BCD_L2B: ;MOV B, #25 DIV AB ; A \ 25 (4*25=100) CJNE A, #10, BIN2BCD_L3 ; A<=255\25=10 INC R5 ; *1000 CLR A BIN2BCD_L3B: MOV R7, A ; R7 --- *100 Bin/BCD R7<=9 ; B --- *4 Bin B <=24 MOV A, #10 XCH A, B ; A --- *4 Bin B <=24 RL A ; A*4 RL A ; A --- *1 Bin A <=4*24=96 ORL A, R6 ; R6 --- *1 Bin/BCD R6<=3 ; A --- *1 Bin A<=96+3=99 ;MOV B, #10 DIV AB SWAP A ORL A, B XCH A, R5 ; R5 --- *1 BCD 个位/十位 ; A --- *1000 Bin A<=65 MOV B, #10 DIV AB XCH A, R7 ; R7 --- *10000 bin/BCD 万位 R7<=6 ; A --- *100 Bin/BCD A<=9 ; B --- *1000 Bin/BCD B<=9 SWAP A ORL A, B SWAP A MOV R6, A ; R6 --- *100 BCD 百位/千位 RET BIN2BCD_L3: SJMP BIN2BCD_L3B ;----------END OF BIN2BCD------- END
此帖出自51单片机论坛
 
 
 

回复

1759

帖子

0

TA的资源

裸片初长成(高级)

5
 

Re: 【转贴】16 bits to packed BCD, 51 ASM. 61周期/80字节

不错 可以看看
此帖出自51单片机论坛
 
个人签名南京璞晓电子   www.cpx0.com需要
msn:njlianjian@hotmail.com
 
 

回复

1284

帖子

0

TA的资源

五彩晶圆(中级)

6
 

Re: 【转贴】16 bits to packed BCD, 51 ASM. 61周期/80字节

着魔不来的
此帖出自51单片机论坛
 
个人签名呼呼...在校应届大四学生,代做电子类毕业设计(测量类、仪器类、控制类、无线通信类、电子产品类、界面设计类、纯论文类等等,一一俱全)。涉及各种单片机软硬件设计、电路模拟分析、FPGA、CPLD、ARM7/ARM9、LINUX、VB/VC++/QT界面等等。包过。。。欢迎咨询。Tel:13957160506。QQ:273437087
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表