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

📄 mcs-51

📁 MCS-51单片机实用子程序库,包括全套的数据转换与计算的子程序。
💻
📖 第 1 页 / 共 5 页
字号:
        JZ    A,    LOOP3
LOOP5:        PUSH    PSW
        MOV    R7,     #08H
        MOV    R0,     #10H
        MOV    R1,     #20H
        CLR    C
        NOP    
LOOP4:        MOV    A,     @R1
        ADDC    A,    @R0
        MOV    @R0,    A
        DA    A
        MOV    @R0,    A
        IMNC    R0
        INC    R1
        DJNZ    R7,     LOOP4
        POP    PSW
        DEC    R4
        MOV    A,    R4
        JNZ    A,     LOOP5
LOOP3:        DEC    R3
        MOV    A,    R3
        JZ    A,    LOOP6
        MOV    R5,     #04H
LOOP8:        MOV    R0,     #10H
        MOV    R7,     #08H
        CLR    C
LOOP7:        MOV    A,     @R0
        RLC    A
        MOV    @R0,    A
        INC    R0
        DJNZ    R7,     LOOP7
        DEC    R5
        MOV    A,    R5
        JNZ    A,     LOOP8
        MOV    R0,    28H
        MOV    A,    R6
        CPL    A
        MOV    R6,    A
        JNB    ACC0,LOOP9
        SJMP    LOOP10
LOOP6:        RET
;_____________________________________________________________________________
; 被乘数 乘数 积数
; 23H--20H 2DH--2AH 17H--10H
; 00 00 45 67 00 00 10 00 00 00 00 00 04 56 70 00
; 55 55 55 55 00 00 09 57 00 00 05 31 66 66 61 35
; 99 88 77 66 10 00 00 00 09 98 87 76 60 00 00 00
;_____________________________________________________________________________


;_____________________________________________________________________________
;Name:   DCHU1
;Func:  单字节BCD码除法子程序
;Input: 被除数放在R1中,除数放在R0中
;OutPut:商数放在R1,商小数放在R0
;Use:   使用R2R3R4内部RAM25H单元做暂存器
;_____________________________________________________________________________
        ORG    2000H
        AJMP    MAIN
MAIN:        MOV    R1,     #76H
        MOV    R0,     #25H
        ACALL    DCHU1
        SJMP    $
DCHU1:        MOV    A,     R1
        MOV    25H,     #00H
        CLR    C
        ACALL    LOOP2
        MOV    R1,    25H
        MOV    25H,     #00H
        MOV    R2,    A
        CLR    A
LOOP0:        MOV    R3,     A
        CLR    A
        ADD    A,    R2
        JZ    A,    LOOP1
        MOV    A,    #9AH
        SUBB    A,     #01H
        ADD    A,    R2
        DA    A
        MOV    R2,    A
        CPL    C
        MOV    A,    #9AH
        SUBB    A,    R0
        ADD    A,    R3
        DA    A
        CPL    C
        ACALL    LOOP4
        CLR    C
        ACALL    LOOP2
        SJMP    LOOP0
LOOP4:        MOV    R0,     25H    
        RET
LOOP2:        MOV    R4,     A
        MOV    A,    #9AH
        SUBB    A,    R0
        ADD    A,    R4                 
        DA    A
        CPL    C
        JC    C,    LOOP3
        ACALL    LOOP4
        SJMP    LOOP2
LOOP3:        ADD    A,     R0
        DA    A
        RET
LOOP4:        PUSH    ACC
        PUSH    PSW
        MOV    A,    25H
        ADD    A,    #01H
        DA    A
        MOV    25H,    A
        POP    PSW
        POP    ACC
        RET
;_____________________________________________________________________________
;        被除数             除数         商数
;        R1             R0         R1R0
;        76             25         03 04
;        99             02         49 50
;_____________________________________________________________________________
;_____________________________________________________________________________
;Name:    DCHU2
;Func:   四字节BCD码除法子程序
;Input: 被除数放在内部RAM21H--24H单元,除数放在内部RAM2AH-2DH
;OutPut:商数入在内部RAM11H--18H单元
;Use:   内部RAM25H--28H 设定为工作单元
;_____________________________________________________________________________
21H DEFB 78 ;被除数最低字节
        22H    DEFB    56
        23H    DEFB    34
24H DEFB 12 ;被除数最高字节
        2AH    DEFB    78
2BH DEFB 56 ;除数最低字节
        2CH    DEFB    34
2DH DEFB 12 ;除数最高字节
        ORG    2000H
        AJMP    MAIN
MAIN:        ACALL    DCHU2
        SJMP    $
DCHU2: MOV R0, #11H
        MOV    R7,     #08H
LOOP1:        MOV    @R0,     #00H
        INC    R0
        DJNZ    R7,     LOOP1
        MOV    R0,     #25H
        MOV    R7,     #04H
LOOP2: MOV @R0, #00H
        INC    R0
        DJNZ    R7,     LOOP2
        MOV    R3,     #10H
LOOP12: MOV R4, #04H
LOOP4:        MOV    R0,     #21H
        MOV    R7,     #08H
        CLR    C
LOOP3:        MOV    A,     @R0
        RLC    A
        MOV    @R0,    A
        INC    R0
        DJNZ    R7,     LOOP3
        DEC    R4
        MOV    A,    R4
        JNZ    A,     LOOP4
LOOP7:        MOV    R1,     #25H
        MOV    R0,     #2AH
        MOV    R7,     #04H
        CLR    C
LOOP5: MOV A, #9AH
        SUBB    A,    @R0
        ADD    A,    @R1
        DA    A
        MOV    @R1    A
        INC    R0
        INC    R1
        CPL    C
        DJNZ    R7,     LOOP5
        JC    C,    LOOP6
        MOV    R0,     #11H
        INC    @R0
        SJMP    LOOP7
LOOP6:        MOV    R1,     #25H
        MOV    R0,     #2AH
        MOV    R7,     #04H
        CLR    C
LOOP3:        MOV    A,     @R1
        ADDC    A,    @R0
        DA    A
        MOV    @R1,    A
        INC    R0
        INC    R1
        DJNZ    R7,     LOO8
        DEC    R3
        MOV    A,    R3
        JZ    A,    LOOP9
        MOV    R2,     #04H
LOOP11: MOV R0, #11H
        MOV    R7,     #08H
        CRL    C
LOOP10: MOV A, @R0
        RLC    A
        MOV    @R0,    A
        INC    R0
        DJNZ    R7,     LOOP10
        DEC    R2
        MOV    A,    R2
        JNZ    A,     LOOP11
        AJMP    LOOP12
LOOP9:        RET
;_____________________________________________________________________________
;Name:   DSQR1
;Func: 单字节BCD码平方根子程序
;Input: 待开平方根数放在R1中
;OutPut: 平方根放在R7中
;Use:    使用R5,R6,R0寄存器
;_____________________________________________________________________________
        ORG    2000H
        AJMP    MAIN
MAIN:        MOV    R1,     #81H
        ACALL    DSQR1
        SJMP    $
DSQR1: MOV R7, #01H
        MOV    A,    R1
LOOP0:        MOV    R6,     A
        MOV    A,    R7
        ADD    A,    R7
        DA    A
        MOV    R0,    A
        MOV    A,    #9AH
        SUBB    A,     #01H
        ADD    A,    R0
        DA    A
        CPL    C
        MOV    R5,    A
        MOV    A,    #9AH
        SUBB    A,    R5
        ADD    A,    R6
        DA    A
        CPL    C
        JZ    A,    LOOP1
        INC    R7
        SJMP    LOOP0
LOOP1:        DEC    R7
        RET
;_____________________________________________________________________________
; 待开平方数 平方根
; R1 R7
; 81 09
; 99 09
; 64 08 
;_____________________________________________________________________________

;_____________________________________________________________________________
;Name:    DSQR2
;Func:  双字节BCD码平方根子程序
;Input: 待开平方根数放在R2R3
;OutPut:平方根放在R4中
;Use:        使用R0R1作暂存器
;_____________________________________________________________________________
        ORG    2000H
        AJMP    MAIN
MAIN:        R2,    #10H
        MOV    R3,     #00H
        ACALL    DSQR2
        SJMP    $
DSQR2: CLR A
        MOV    R0,    A
        MOV    R1,    A
        MOV    R4,     #01H
LOOP3:        MOV    A,     R4
        MOV    R1,    A
        ADD    A,    R1
        DA    A
        MOV    R1,    A
        MOV    A,    #9AH     
        SUBB    A,     #01H
        ADD    A,    R1
        DA    A
        CPL    C
        MOV    R1,    A
        INC    C,     LOOP1
        INC    R0
LOOP1:        CLR    C
        MOV    A,    #9AH
        SUBB    A,    R1
        ADD    A,    R3
        DA    A
        CPL    C
        MOV    R3,    A
        MOV    A,    #9AH
        SUBB    A,    R0
        ADD    A,    R2
        DA    A
        CPL    C
        MOV    R2,    A
        JC    C,    LOOP2
        MOV    A,    R4
        ADD    A,    #01H
        DA    A
        MOV    R4,    A
        SJMP    LOOP3
LOOP2:        CLR    C
        MOV    A,    #9AH     
        SUBB    A,     #01H        
        ADD    A,    R4
        DA    A
        CPL    C
        MOV    R4,    A
        RET
;_____________________________________________________________________________
;        待开平方数             平方根
;        R2R3                 R4
;        10 00                 31
;        01 00                 10
; 99 99 99 
;_____________________________________________________________________________

;_____________________________________________________________________________
;Name:     DSQR3
;Func:   三字节BCD码平方根子程序
;Input:  待开平方根数放在R1R2R3
;OutPut: 平方根放在R4R5
;Use:    使用R0R6R7作暂存器
;_____________________________________________________________________________
        AJMP    MAIN
MAIN:        CLR    A
        MOV    R0,    A
        MOV    R6,    A
        MOV    R7,    A
        MOV    R1,     #06H
        MOV    R2,     #80H
        MOV    R3,     #96H
        ACALL    DSQR3
LOOP:        SJMP    LOOP
DSQR3: CLR C
        MOV    R4,     #01H
        MOV    R,    #00H
LOOP3:        MOV    A,     R4
        ADD    A,    R4
        DA    A
        MOV    R6,    A
        MOV    A,    R5
        ADDC    A,    R5
        DA    A
        MOV    R7,    A
        CLR    C
        MOV    A,    #9AH
        SUBB    A,     #01H
        ADD    A,    R6
        DA    A
        CPL    C
        MOV    R0,    A
        MOV    A,    #9AH
        SUBB    A,     #00H
        ADD    A,    R7
        DA    A
        CPL    C
        MOV    R7,    A
        INC    C,     LOOP1
        INC    R0
        CLR    A
        ADD    A,    R6
        DA    A
        MOV    R6,    A
LOOP1:        CLR    C
        MOV    A,    #9AH
        SUBB    A,    R6
        ADD    A,    R3
        DA    A
        CPL    C
        MOV    R3,    A
        MOV    A,    #9AH
        SUBB    A,    R7
        ADD    A,    R2
        DA    A
        CPL    C
        MOV    R2,    A
        MOV    A,    #9AH
        SUBB    A,    R0
        ADD    A,    R1
        DA    A
        CPL    C
        MOV    R1,    A
        JC    C,    LOOP2
        CLR    C
        MOV    A,    R4
        ADD    A,    #01H         
        DA    A
        MOV    R4,    A
        MOV    A,    R5
        ADDC    A,     #000H
        DA    A
        MOV    R5,    A
        SJMP    LOOP3
LOOP2:        CLR    C
        MOV    A,    #9AH
        SUBB    A,     #01H
        ADD    A,    R4
        DA    A
        CPL    C
        MOV    R4,    A
        MOV    A,    #9AH
        SUBB    A,     #00H
        ADD    A,    R5
        DA    A
        CPL    C
        MOV    R5,    A
        RET
;_____________________________________________________________________________
;        待开平方数             平方根
;        R1R2R3                 R5R4
;        06 80 96             02 60 
;        06 55 36             02 56
;_____________________________________________________________________________ 

;_____________________________________________________________________________
;Name:   ASBIN1
;Func: ASCII码--->>二进制数转换子程序
;Input: 待转换的ASCII码放在R0中
;OutPut: 换后的二进制数仍放在R0中
;ALGO: 若待转换的是0--9的ASCII码,则减30H即得0--9的二进制数;若转换的ASCII码是 
A--F,减37H即得二进.若转换的ASCII码不在0--9与A--F之间,则存放错误标志:FF

⌨️ 快捷键说明

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