⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mubcdtb.asm

📁 PIC单片机的汇编源码合集,应用比较广泛,设计程序时可做子程序来用
💻 ASM
字号:
;********************MUBCDTB********************
;本程序实现多字节非压缩BCD码转化为二进制数。
;入口参数:原BCD码数地址在SADR中,字节数在CNT中,CNT/2或(CNT/2+1)个字节的结果
;          存放地址在DADR中。
;出口参数:结果在指定单元中,地址在SADR中,字节数在CNT中。
;占用资源:W,FSR,STATUS,020H,022H,023H,028H,029H,02AH,02BH,两重堆栈。
;说    明:1.SADR和DADR内容不要相同。
;          2.原数据不变。
 
           IFNDEF       MUBCDTB1
            #DEFINE     MUBCDTB1                        
MUBCDTB     MOVF        CNT,W
            MOVWF       TEMP3       ;TEMP3永久存放字节数            
            BCF         STATUS,C
            RRF         CNT,F
            BTFSC       STATUS,C
            INCF        CNT,F       ;字节数除以2得到结果字节数        
            MOVF        DADR,W
            MOVWF       FSR             
LOOP27      CLRF        INDF        ;结果清0
            INCF        FSR,F
            DECFSZ      CNT,F
            GOTO        LOOP27
            MOVF        TEMP3,W
            MOVWF       CNT         ;重新找回字节数
            BCF         STATUS,C
            RRF         TEMP3,F
            BTFSC       STATUS,C
            INCF        TEMP3,F     ;字节数除以2得到结果字节数        
            DECF        CNT,W
            ADDWF       SADR,F      ;得到高位字节地址
LOOP30      MOVF        SADR,W
            MOVWF       FSR
            MOVF        INDF,W
            CALL        MUL1_10       
            DECF        SADR,F
            DECFSZ      CNT,F
            GOTO        LOOP30
            MOVF        DADR,W
            MOVWF       SADR
            MOVF        TEMP3,W
            MOVWF       CNT         ;结果字节数
            RETURN   
;********************结果乘10子程序********************            
MUL1_10     MOVWF       TEMP1       ;得到一位十进制数
            MOVF        TEMP3,W
            MOVWF       TEMP2
            MOVF        DADR,W
            MOVWF       FSR
            CLRF        TEMP4
LOOP29      RLF         TEMP4,F     ;TEMP4作为移出位缓存区
            RLF         INDF,F
            RLF         TEMP4,F
            MOVF        INDF,W      ;结果乘以2暂存到W
            RLF         INDF,F
            RLF         TEMP4,F
            RLF         INDF,F
            RLF         TEMP4,F     ;乘以8
            BTFSS       STATUS,C    ;上次有无进位
            GOTO        NOC8
            INCF        INDF,F
            BTFSC       STATUS,Z
            BSF         TEMP4,7     ;加1又产生进位
            BTFSS       STATUS,Z
NOC8        BCF         TEMP4,7
            ADDWF       INDF,F
            RLF         TEMP4,F     
            BTFSC       STATUS,C
            BSF         TEMP4,0     ;保存进位
            SWAPF       TEMP4,F     ;有用位移到顶端
            INCF        FSR,F
            DECFSZ      TEMP2,F
            GOTO        LOOP29      ;完成乘10的操作
            MOVF        TEMP3,W
            MOVWF       TEMP2       ;TEMP2作为计数器
            MOVF        DADR,W
            MOVWF       FSR
            MOVF        TEMP1,W
            ADDWF       INDF,F      ;取出一个十进制位加到结果中
            INCF        FSR,F
            DECF        TEMP2,F
            MOVLW       1
LOOP28      BTFSC       STATUS,C
            ADDWF       INDF,F
            DECFSZ      TEMP2,F
            GOTO        LOOP28
            RETURN
           ENDIF                               

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -