登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

我写的32为二进制码转10位BCD码的汇编子程序!

作者:hujiahua 栏目:单片机
我写的32为二进制码转10位BCD码的汇编子程序!
调用一次要2千多个指令周期。
第一次用AVR,芯片是ATMEGA8L-8PI,大家交流一下,欢迎拍砖!

.equ    bin4_0                =$20c    ; LSB
.equ    bin4_1                =$20d
.equ    bin4_2                =$20e
.equ    bin4_3                =$20f    ; MSB

.equ    bcd10_0                =$210    ; LSB
.equ    bcd10_1                =$211
.equ    bcd10_2                =$212
.equ    bcd10_3                =$213
.equ    bcd10_4                =$214
.equ    bcd10_5                =$215
.equ    bcd10_6                =$216
.equ    bcd10_7                =$217
.equ    bcd10_8                =$218
.equ    bcd10_9                =$219    ; MSB

;******************************************************
; function: bin2bcd32
; input: bin4_0, bin4_1, bin4_2, bin4_3
; OUTPUT: bcd10_0, bcd10_1, bcd10_2, bcd10_3, bcd10_4
; OUTPUT: bcd10_5, bcd10_6, bcd10_7, bcd10_8, bcd10_9
;******************************************************
bin2bcd32:
    PUSH        r16
    PUSH        r17
    PUSH        XL
    PUSH        XH
    PUSH        YL
    PUSH        YH
    PUSH        ZL
    PUSH        ZH

    ldi            XL, bcd10_0
    ldi            XH, bcd10_0>>8
    clr            r16
    st            X+, r16        ; 0
    st            X+, r16        ; 1
    st            X+, r16        ; 2
    st            X+, r16        ; 3
    st            X+, r16        ; 4
    st            X+, r16        ; 5
    st            X+, r16        ; 6
    st            X+, r16        ; 7
    st            X+, r16        ; 8
    st            X+, r16        ; 9
    ldi            XL, bin4_3+1
    ldi            XH, (bin4_3+1)>>8

bit31:
    ld            r16, -X
    sbrs        r16, 7
    rjmp        bit30
    ldi            ZL, bin2bcd_bit31<<1
    ldi            ZH, (bin2bcd_bit31)>>7
    rcall        add_bcd_10

bit30:
    sbrs        r16, 6
    rjmp        bit29
    ldi            ZL, bin2bcd_bit30<<1
    ldi            ZH, (bin2bcd_bit30)>>7
    rcall        add_bcd_10

bit29:
    sbrs        r16, 5
    rjmp        bit28
    ldi            ZL, bin2bcd_bit29<<1
    ldi            ZH, (bin2bcd_bit29)>>7
    rcall        add_bcd_10

bit28:
    sbrs        r16, 4
    rjmp        bit27
    ldi            ZL, bin2bcd_bit28<<1
    ldi            ZH, (bin2bcd_bit28)>>7
    rcall        add_bcd_10

bit27:
    sbrs        r16, 3
    rjmp        bit26
    ldi            ZL, bin2bcd_bit27<<1
    ldi&nb
2楼: >>参与讨论
宇宙飞船
二进制转BCD码的主要是算法,没有什么好说!
    看这种代码会浪费我很多时间!知道算法的话这东西是很简单的。我没兴趣看代码。
    这等于1+1=2的道理这么简单。

参与讨论
昵称:
讨论内容:
 
 
相关帖子
如果看门狗都失灵怎办?
新手请教?
补充:是用JTAG ICE来下载和调试代码的,会不会有影响???
M8 ADC中断怎么搞?
请推荐一款高端meg型号,内部带can控制器的,谢谢
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号