打印

hex to bcd 数值转换请教!

[复制链接]
3377|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
110xia|  楼主 | 2009-10-29 16:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
;本程序实现双字节二进制数转化为3字节压缩BCD码。
;入口参数:原二进制数在SOUH:SOU中。
;出口参数:结果在RLT:SOUH:SOU中。
;占用资源:W,STATUS,FSR,023H,024H,025H,026H,028H,029,02AH,两重堆栈。

           IFNDEF       DBTBCD1
            #DEFINE     DBTBCD1
                        
DBTBCD      MOVF        SOU,W
            MOVWF       TEMP2
            MOVF        SOUH,W
            MOVWF       TEMP3
            CLRF        SOU
            CLRF        SOUH
            CLRF        RLT
            BCF         STATUS,C
;------------------------------------------------
; TEMP3 TEMP2 (HEX) -> RLT SOUH SOU (BCD)
;
;------------------------------------------------
            MOVLW       .16                                ;W <- 16
            MOVWF       CNT                                ;CNT <- W(16)
LOOPC1      RLF         TEMP2,F                        ;左移1bit ;  RLT SOUH SOU  <- TEMP3 TEMP2   <- 0
            RLF         TEMP3,F
            RLF         SOU,F
            RLF         SOUH,F
            RLF         RLT,F
            
            DECFSZ      CNT,F
            GOTO        ADJDEC1         
            RETLW       0           ;整个子程序结束
            
         
ADJDEC1     MOVLW       SOU                        ; W <- 地址SOU
            MOVWF       FSR                        ; FSR <- W (SOU的地址)
            CALL        ADJBCD1     ;调整RLT
            
            MOVLW       SOUH
            MOVWF       FSR
            CALL        ADJBCD1     ;调整RLTH
            
            MOVLW       RLT
            MOVWF       FSR
            CALL        ADJBCD1     ;调整TEMP1
            
            GOTO        LOOPC1
            
            
;********************调整BCD********************
ADJBCD1     MOVLW       03H                        ; W <- 03H
            ADDWF       INDF,W      ;低四位加3  F+W→W = SOU
            MOVWF       TEMP1       ;暂存
            BTFSC       TEMP1,3     ;结果大于7,
            MOVWF       INDF        ;则存起来
            MOVLW       30H
            ADDWF       INDF,W      ;高四位加3
            MOVWF       TEMP1              
            BTFSC       TEMP1,7     ;结果大于7,
            MOVWF       INDF        ;则存起来
            RETLW       0
            
           ENDIF

PIC 没有DA指令,是通过ADJBCD1这段程序处理:
低高位依次加3,然后判断结果是否大于7,如果大于7就保存加后的值没,否则就不要!
这样做的算法依据是什么?
沙发
刘骁奖| | 2009-11-1 22:40 | 只看该作者
为什么不用C来开发呢?还在用ASM!太累啦!

使用特权

评论回复
板凳
hwq2003| | 2009-11-1 22:47 | 只看该作者
我们老板都用ASM,搞得看他们的算法很累

使用特权

评论回复
地板
兰天白云| | 2009-11-9 08:18 | 只看该作者
如果不做基础研究,就不用太宰意,只有功能满足你就行

如果有兴趣,再买点数学方面的书,算法讲解在网上是很难找到的,只有教科书才有

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

519

帖子

2

粉丝