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

📄 mcs-51

📁 MCS-51单片机实用子程序库,包括全套的数据转换与计算的子程序。
💻
📖 第 1 页 / 共 5 页
字号:
        MOV    60H,     23H
        MOV    61H,     24H
        MOV    62H,     25H
        MOV    A,    20H
        XCH    A,    23H
        MOV    20H,    A
        MOV    A,    21H
        XCH    A,    24H
        MOV    21H,    A
        MOV    A,    22H
        XCH    A,    25H
        MOV    22H,    A
        CLR    A    
        CLR    C
        MOV    20H,     #00H
        MOV    21H,     #00H
        MOV    22H,     #00H
        MOV    R7,     #18H
LOOP8:        MOV    A,     20H
        RLC    A
        MOV    20H,    A
        MOV    A,    21H
        RLC    A
        MOV    21H,    A
        MOV    A,    22H
        RLC    A
        MOV    22H,    A
        MOV    A,    23H
        RLC    A
        MOV    23H,    A
        MOV    A,24H
        RLC    A
        MOV    24H,    A
        MOV    A,    25H
        RLC    A
        MOV    25H,    A
        JNC    LOOP5
        MOV    A,    23H
        SUBB    A,    26H
        MOV    23H,    A
        MOV    A,    24H
        SUBB    A,    27H
        MOV    24H,    A
        MOV    A,    25H
        SUBB    A,    28H
        MOV    25H,    A
        MOV    A,    23H
        ADD    A,    #01H
        MOV    23H,    A
        MOV    A,    24H
        ADDC    A,     #00H
        MOV    24H,    A
        MOV    A,    25H
        ADDC    A,     #00H
        MOV    25H,    A
        SETB    C
        SJMP    LOOP6
LOP5:        MOV    A,     23H
        SUBB    A,    26H
        MOV    23H,    A
        MOV    A,    24H
        SUBB    A,    27H
        MOV    24H,    A
        MOV    A,    25H
        SUBB    A,    28H
        MOV    25H,    A
        JNC    LOOP7
        MOV    A,    23H
        ADD    A,    26H
        MOV    23H,    A
        MOV    A,    24H
        ADDC    A,    27H     
        MOV    24H,    A
        MOV    A,    25H
        ADDC    A,    28H
        MOV    25H,    A
LOOP7:        CPL    C
LOOP6:        DJNZ    R7,     LOOP8
        MOV    A,    20H
        XCH    A,    23H
        MOV    20H,    A
        MOV    A,    21H
        XCH    A,    24H
        XCH    A,    24H
        MOV    21H,    A
        MOV    A,    22H
        XCH    A,    25H
        MOV    22H,    A
        MOV    A,    23H
        ADDC    A,    23H
        MOV    23H,    A
        MOV    A,    24H
        ADDC    A,    24H
        MOV    24H,    A
        MOV    A,    25H
        ADDC    A,    25H
        MOV    25H,    A
        MOV    20H,     60H
        MOV    21H,     61H
        MOV    22H,     62H
        RET
;_____________________________________________________________________________
;Name: CHU10
;Func: 带符号双字节除单字节除法子程序
;Input: 被除数放在R1R0中,除数放在R4中.移位计数器放在R7中
;OutPut:商数放在R0,余数放在R1中
;Use:   使用内部RAM60H--62H单元存放被除数,除数和商的符号位
;_____________________________________________________________________________
DATA1 EQU 40H ; 被除数低字节
DATA2 EQU 00H ; 被除数高字节
DATB EQU 0F8H ; 除数
        ORG    2000H
        AJMP    MAIN
MAIN:        MOV    R0,     #DATA1
        MOV    R1,     #DATA2
        MOV    R4,     #DATB
        MOV    R7,     #08H
        ACALL    CHU10
LOOP:        SJMP    LOOP
CHU10:        MOV    A,     R4
        JZ    A,    LOOP1
        MOV    A,    R1
        RLC    A
        MOV    60H,    C
        MOV    A,    R4
        RLC    A
        MOV    61H,    C
ANL C, 60H
        JC    C,    LOOP2
        MOV    C,    60H
        ORL    C,    61H
        SJMP    LOOP3
LOOP2:        CPL    C
LOOP3:        MOV    62H,     C
        MOV    A,    R4
        JB    ACC.7,     LOOP4
LOOP9:        MOV    A,     R1
        JB    ACC.7     LOOP5
LOOP7:        ACALL    CHU4
        JB    62H,     LOOP6
LOOP8:        CLR    A
        RET
LOOP4:        MOV    A,     R4
        CPL    A
        ADD    A,    #01H
        MOV    R4,    A
        SJMP    LOOP9
LOOP5:        MOV    A,     R0
        CPL    A
        ADD    A,    #01H
        MOV    R0,    A
        MOV    A,    R1
        CPL    A
        ADDC    A,     #00H
        MOV    R1,    A
        SJMP    LOOP7
LOOP6:        MOV    A,     R0
        CPL    A
        ADD    A,    #01H
        MOV    R0,    A
        SJMP    LOOP8
LOOP1:        MOV    A,     #0FFH
        RET
;_____________________________________________________________________________
;Name:  SQRT
;Func: 双字节平方根子程序
;Input: 待开平方根放在R1R0中
;OutPut:平方根放在R3R2中
;Use:        
;_____________________________________________________________________________
        ORG    2000H
        AJMP    LOOP0
LOOP0:        SJMP    LOOP
        SQRT:    CLR    A
        MOV    R2,    A
        MOV    R3,    A
        SETB    C
LOOP:        MOV    A,     R0
        SUBB    A,    R2
        MOV    R0,    A
        MOV    A,    R1
        SUBB    A,    R3
        MOV    R1,    A
        JC    C,    LOOP2
        MOV    A,    R0
        SWUBB    A,    R2
        MOV    R0,    A
        MOV    A,    R1
        SUBB    A,    R3
        MOV    R1,    A
        JC    C,    LOOP2
        MOV    A,    R2
        ADD    A,    #01H
        MOV    R2,    A
        MOV    A,    R3
        ADDC    A,     #00H
        MOV    R3,    A
        SJMP    LOOP1
LOOP2:        RET 

;___________________________________________________________________________
;Name:  BCDAD1
;Func:   单字节BCD码加法子程序
;Input: R0指向两个加数的首地址
;OutPut: 和数为双字节,放在加数后的地址单元中
;Use:    
;_____________________________________________________________________________
        
        20H    EQU    99H
        21H    EQU    99H
        22H    DEFB     02H    
        ORG    2000H
        AJMP    MAIN
MAIN:        MOV    R0,     #20H
        ACALL    BCDAD1
LOOP:        SJMP    LOOP
BCDAD1: CLR C
        MOV    A,    @R0
        INC    R0
        ADD    A,    @R0
        DA    A
        INC    R0
        MOV    @R0,    A
        RLC    A
        ANL    A,    #01H
        INC    R0
        MOV    @R0,    A
        RET
;___________________________________________________________________________
;Name:  BCDAD2
;Func: 四字节BCD码加法子程序
;Input: 被加数首地址由R0指向内部RAM20H单元,加法首地址由R1指向内部RAM24H单元
;OutPut:    和数放在内20H---24H单元中
;Use:    
;_____________________________________________________________________________
20H DEFB 99H ;被加数低字节
21H DEFB 99H
22H DEFB 99H
23H DEFB 99H ;被加数高字节
24H DEFB 99H ;加数低字节
25H DEFB 99H
26H DEFB 99H
27H DEFB 99H ;加数高字节
        ORG    2000H
        AJMP    MAIN
MAIN:        MOV    R0,     #20H
        MOV    R1,     #24H
        MOV    R7,     #04H
        CALL    BCDAD2
LOOP:        SJMP    LOOP
BCDAD2: CLR C
LOOP1:        MOV    A,     @R0
        ADDC    A,    @R1
        DA
        MOV    @R0,    A
        INC    R0
        INC    R1
        DJNZ    R7,     LOOP1
        RLC    A
        ANL    A,    #01H
        MOV    @R0,    A
        RET
;___________________________________________________________________________
;Name:  BCDSUB3
;Func: 单字节BCD码减法子程序
;Input: 被减数和减数分别放在内部RAM21H和11H单元中
;OutPut:    差数放在内部RAM12H单元中
;Use:    
;_____________________________________________________________________________
21H DEFB 60 ;被减数
11H DEFB 62 ;减数
        ORG    2000H
        AJMP    MAIN
MAIN:        MOV    R1,     #21H
        MOV    R0,     #11H
        ACALL    DSUB1
LOOP:        SJMP    LOOP
DSUB:        CLR    C
        MOV    A,    #9AH
        SUBB    A,    @R0
        ADD    A,    @R1
        DA
        MOV    12H,    A
        RET        
;_____________________________________________________________________________
; 被减数 减数 差数
; 99 99 00
; 78 67 1
; 60 62 补码98
;_____________________________________________________________________________
;___________________________________________________________________________
;Name:  DSUB2
;Func: 四字节BCD码减法子程序
;Input: 被减数首地址R1指向内部RAM21H单元
;OutPut:    差数放在被减数单元
;Use:    
;_____________________________________________________________________________
21H DEFB 66 ;被减数最低字节
        22H    DEFB    77
        23H    DEFB    88     
24H DEFB 99 ;被减数最高字节

11H DEFB 55 ;减数最低字节
        12H    DEFB    22
        13H    DEFB    33     
14H DEFB 44 ;减数最高字节
        ORG    2000H
        AJMP    MAIN
MAIN:        MOV    R1,     #21H
        MOV    R0,     #11H
        MOV    R7,     #04H
        ACALL    DSUB2
LOOP:        SJMP    LOOP
DSUB2:        CLR    C
LOOP1:        MOV    A,     9AH
        SUBB    A,    @R0
        ADD    A,    @R1
        DA    A
        MOV    @R1,    A
        INC    R0
        INC    R1
        DJNZ    R7,     LOOP1
        RET
;_____________________________________________________________________________
;Name: BCDSUB4
;Func: 单字节BCD码乘法子程序
;Input: 被乘数和乘数分别放在内部RAM20H和21H单元
;OutPut:    积为双字节放在20H和21H单元
;Use:        
;_____________________________________________________________________________
        20H    DEFB    33         ;被乘数
        21H    DEFB    11         ;乘数
        ORG    2000H
        AJMP    MAIN
MAIN:        ACALL    DCHFA1
LOOP:        SJMP    LOOP
DCHFAF1:    MOV    R0,    #20H
        MOV    A,    @R0     
        MOV    R1,    A
        MOV    R7,     #02H
        CLR    A
        MOV    @R0,    A
LOOP0:        MOV    R0,     #20H
        XCHD    A,    @R0
        MOV    R4,    A
        MOV    A,    @R0
        RR    A
        RR    A                     
        RR    A
        RR    A                     
        MOV    @R0,    A
        INC    R0
        MOV    A,    R4
        XCHD    A,    @R0
        MOV    R2,    A
        MOV    A,    @R0
        RR    A
        RR    A
        RR    A
        RR    A
        MOV    @R0,    A
        MOV    A,    R2
        JZ    A,    LOOP3
        DEC    R0
        MOV    A,    @R0
        MOV    R3,     #00H
LOOP1:        CLR    C
        ADD    A,    R1
        DA    A
        JNC    LOOP2
        INC    R3
LOOP2:        JNZ    R2,     LOOP1
        MOV    @R0,    A
        MOV    A,    R3
LOOP3:        JNZ    R7,     LOOP0
        RET
;_____________________________________________________________________________
;        被乘数             乘数         积数
;        R0             R1         R0R1
        10             10         0100
;        33             11         0363
;_____________________________________________________________________________
;_____________________________________________________________________________
;Name:  DCHFA
;Func: 十进制数8位乘8位(四字节BCD码乘四字节BCD码)乘法子程序
;Input: 被乘数放在内部RAM20H--23H单元中,乘数放在2A--2DH单元中
;OutPut:乘积放在内部RAM10H--17H单元中
;Use:   使用内部24H-27H为被乘数运算单元
;_____________________________________________________________________________
20H EQU 55 ;被乘数低字节
        21H    EQU    55     
        22H    EQU    55
23H EQU 55 ;被乘数高字节
2AH EQU 57 ;乘数低字节
        2BH    EQU    09
        2CH    EQU    00
2DH EQU 00 ;乘数高字节
        ORG    2000H
        AJMP    MAIN
MAIN:        ACALL    DCHFA4
LOOP:        SJMP    LOOP
        ORG    2200H
DCHFA4: MOV R6, #01H
        MOV    R0    #10H
        MOV    R7,     #08H
LOOP1:        MOV    @R0,     #00H
        INC    R0
        DJNZ    R7,     LOOP2
        MOV    R0,     #2EH
        MOV    R3,     #08H
LOOP10: DC R0
LOOP9:        MOV    28H,     R0
        CLR    A
        MOV    A,    @R0
        SWAP    A
        MOV    @R0,    A
        CLR    A
        XCHD    A,    @R0         
        MOV    R4,    A

⌨️ 快捷键说明

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