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

📄 双字节定点数至5位bcd码转换程序.txt

📁 实用子程序.rar本子程序库对《单片机应用程序设计技术》一书附录中的子程序库作了重大修订
💻 TXT
字号:
;【校验举例1】 -23808(十进制)
;化为十六进制数:A300
;结果:023808(BCD),SIGN=80

; 5  码制转换程序设计
; 5.1   双字节定点数至5位BCD码转换程序
;    入口条件:ACCBHI、ACCBLO
;    出口条件:ACCCHI低半字节、ACCCLO、ACCDHI
;以下为双字节定点数至5位BCD码转换程序清单。
    LIST            p=16f877
    INCLUDE        p16f877.inc
ACCBLO         EQU     23H        ;存放被转换的双字节整数低8位
ACCBHI         EQU     24H        ;存放被转换的双字节整数高8位
ACCCLO         EQU     26H        ;存放5位BCD码
ACCCHI         EQU     27H
ACCDLO         EQU     28H
ACCDHI         EQU     29H
TEMP           EQU     2AH        ;临时寄存器
SIGN           EQU     2BH        ;被转换数符号寄存器
COUNT          EQU     2CH
    ORG            0X0000
START    GOTO        MAIN
    ORG            0X0100
;**********双字节数至BCD码子程序************
BtoBCD    CLRF        SIGN            ;初始化符号寄存器
    BTFSS        ACCBHI,7    ;被转换数为负?
    GOTO        LOOP1        ;否,转BtoBCD
    BSF            SIGN,7        ;是,存符号
    CALL        NEG_B        ;ACCB取补
LOOP1    BCF             STATUS,C    ;清进位位
    MOVLW         .16            ;移位计数器赋初值
    MOVWF         COUNT
    CLRF         ACCCHI        ;初始化出口寄存器
    CLRF         ACCCLO
    CLRF         ACCDHI
LOOP16    RLF             ACCBLO        ;ACCB左移一位至出口寄存器
    RLF             ACCBHI
    RLF             ACCDHI
    RLF             ACCCLO
    RLF             ACCCHI
    DECFSZ         COUNT         ;移位计数器=0?
    GOTO         ADJDEC        ;否,转ADJDEC
    RETLW         0            ;是,返回
NEG_B    DECF         ACCBLO        
    COMF         ACCBLO
    BTFSC         STATUS,Z
    DECF         ACCBHI
    COMF         ACCBHI
OVER    RETURN        ;子程序返回


ADJDEC    MOVLW         ACCDHI        ;指针指向ACCDHI
    MOVWF         FSR
    CALL         ADJBCD        ;调用BCD码校正子程序
    MOVLW         ACCCLO        ;指针指向ACCCLO
    MOVWF         FSR
    CALL         ADJBCD        ;调用BCD码校正子程序    
    MOVLW         ACCCHI        ;指针指向ACCCHI
    MOVWF         FSR
    CALL         ADJBCD        ;调用BCD码校正子程序
    GOTO         LOOP16        ;ACCB重新左移
;************* BCD码校正子程序**************
ADJBCD     MOVLW         0X03        ;LSD+3>7?
    ADDWF         INDF,0
    MOVWF         TEMP
    BTFSC         TEMP,3
    MOVWF         INDF         ;是,LSD=LSD+3
    MOVLW         0X30            ;否,MSD+3>7?
    ADDWF         INDF,0
    MOVWF         TEMP
    BTFSC         TEMP,7
    MOVWF         INDF            ;是,MSD=MSD+3
    RETLW         0            ;返回


MAIN        MOVLW        0X00            ;双字节整数送ACCB
    MOVWF        ACCBLO
    MOVLW        0XA3
    MOVWF        ACCBHI
    CALL        BtoBCD        ;调子程序,将二进制数转换成BCD码
    GOTO  $
    END

⌨️ 快捷键说明

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