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

📄 mcs-51

📁 MCS-51单片机实用子程序库,包括全套的数据转换与计算的子程序。
💻
📖 第 1 页 / 共 5 页
字号:
INC R0
DJNZ R7, LOOP
CLR C
MOV R0, #25H; 被除数减除数(此被除数是扩充位)
MOV R1, #DATB1
MOV R7, #05H
LOOP5: MOV A, @R0
SUBB A, @R1
MOV @R0, A
INC R0
INC R1
DJNZ R7, LOOP5
JNC C, LOOP6 
MOV 66H, C ;暂存进位位
MOV R0, #25H ;不够减恢复余数
MOV R1, #DATB1
MOV R7, #05H
CLR C
LOOP7: MOV A, @R0
ADDC A, @R1
MOV @R0, A
INC R0
INC R1
DJNZ R7, LOOP7
MOV C, 60H
LOOP6: CPL C
DJNZ R6, LOOP8
MOV R1, #20H
MOV R1, #25H
MOV 7, #05H
LOOP9: MOV A, @R0
RLC A
MOV R3, A
MOV A, @R1
MOV @R0, A
MOV A, R3
MOV @R1, A
INC R0
INC R1
DJNZ R7, LOOP9
LOOP2: RET
;_____________________________________________________________________________
;Name: CHU4
;Func:   双字节除单字节除法子程序
;Input:  被除数放在R0,R1 R0放被除数低字节,除数放在R4,R7为字节长度
;OutPut: 商数庆在R0中,余数放在R1中
;Use:        
;_____________________________________________________________________________

DATA1 EQU 6DH 被除数低字节
DATA2 EQU 32H 被除数高字节
DATB EQU 47H 除数
        ORG    2000H
        AJMP    MAIN
MAIN:        MOV    R0,     #DATA1
        MOV    R1,     #DATA2
        MOV    R4,     #DATB
        MOV    R7,     #08H
        ACALL    CHU4
LOOP:        SJMP    LOOP
CHU4:        MOV    A,     R0
        ADD    A,    R0
        MOV    R0,    A
        ADDC    A,    R1
        MOV    R1,    A
        SUBB    A,    R4
        JC    C,    LOOP1
        MOV    R1,    A
        INC    R0
LOOP1:        DJNZ    R7,     CHU4
        RET
        END
;__________________________________________________________________________
; 被除数 除数 商数 余数
; R1R0 R4 R0 R1
; 326D 47 B5 3A
; 00FF 10 0F 0F
; 7FFF FG 80 7F
; 0040 F8 00 40
; FFC0 08 FF D2
;__________________________________________________________________________
;_____________________________________________________________________________
;Name: CHU5
;Func: 双字节除单字节商为双字节除法子程序
;Input:  被除数放在R0,R1中,除数放在R3中,R2为被除数扩充位
;OutPut: 商数放在R4,R5中,R4放低位,余数放在R2中
;_____________________________________________________________________________
DATA1 EQU 01H 被除数低字节
DATA2 EQU 10H 被除数高字节
DATB EQU 10H 除数
        ORG    2000H
        AJMP    MAIN
MAIN:        MOV    R0,     #DATA1
        MOV    R1,     #DATA2
        MOV    R2,     #00H
        MOV    R3,     #DATB
        MOV    R4,     #00H
        MOV    R5,     #00H
        MOV    R7,    10H
        ACALL    CHU5
LOOP:        SJMP    LOOP
CHU5:        MOV    A,     R0
        ADD    A,    R0
        MOV    R0,    A
        MOV    A,    R1
        ADDC    A,    R1
        MOV    R1,    A
        MOV    A,    R2
        ADDC    A,    R2
        MOV    R2,    A
        MOV    A,    R4         ;商数左移
        ADD    A,    R4
        MOV    R4,    A
        MOV    A,    R5
        ADDC    A,    R5
        MOV    R5,    A
        CJNE    R2,     #DATB,    LOOP0
LOOP0:        JC    C,     LOOP1
        MOV    A,    R2;     建立新的余数
        SUBB    A,    R3
        MOV    R2,    A
        MOV    A,    R4
        ADD    A,    #01H
        MOV    R4,    A
        MOV    A,    R5
        ADDC    A,     #00H
        MOV    R5,    ,A
LOOP1:        DJNZ    R7,     CHU5
        RET
;_____________________________________________________________________________
; 被乘数 乘数 商数 余数
; R1R0 R2 R5R4 R2
; 1001 10 0100 01
; 17FF 10 007F 0F 
;_____________________________________________________________________________

;_____________________________________________________________________________
;Name:   CHU6
;Func:  三字节除单字节商为三字节除法了程序
;Input: 被除数放在R0R1R2中, 除数放在R4中,R3存放被除数扩充位,也是余数存放数
;OutPut:商数放在内部RAM20H-22H单元中,其中20H单元放最低位
;Use:        
;_____________________________________________________________________________

DATA1 EQU 08H ; 被除数最低位
DATA2 EQU 00H ; 被除数最高位
DATA3 EQU D0H
DATB EQU 20H ; 除数
            ORG     2000H
            AJMP     LOOP0
LOOP0            MOV     R0,    #DATA1
            MOV     R1,    #DATA2
            MOV     R2,    #DATA3
            MOV     R3,    #DATAB
            MOV     R4,    #DATA1
            MOV     R3,    #00H
            MOV     20H,    #00H
            MOV     21H,    #00H
            MOV     22H,    #00H             
            MOV     R7,    #18H
            ACALL     CHU6
LOOP2:            SJMP     LOOP2
CHU6:            MOV     A,    R0
            ADD     A,    R0        ; 被除数左移,包括扩充位
            MOV     R0,    A
            MOV     A,    R1
            ADDC     A,    R1
            MOV     R1,    A
            MOV     A,    R2
            ADDC     A,    R2
            MOV     R2,    A
            MOV     A,    R3
            ADDC     A,    R3
            MOV     R3,    A
            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,    R3
            SUBB     A,    R4
            JC    C,     LOOP1
            MOV     R3,    A
            JNC     20H
            AJMP     LOOP2
LOOP1:            ADD     A,    R4
LOOP2:            DJNZ     R7,    CHU6
            RET
;_____________________________________________________________________________
;Name:   CHU7
;FUNC:  三字节除双字节商为三字节除法子程序
:INPUT: 被除数放在内部RAM20H--22H单元中,除数放在R4,R5中
;OUTPUT:商数放在内部RAM26H--28H单元中,余数放在23H,24H单元中.
;_____________________________________________________________________________
20H EQU 00H ;被除数最低字节
21H EQU 00H ;被除数低字节
22H EQU F0H ;被除数最高字节
DATB1 EQU 1DH ;除数低字节
DATB2 EQU 23H ;除数高字节
ORG 2000H
AJMP LOOP0
LOOP0:        MOV    R4,     #DATB1
        MOV    R5,     #DATB1
        MOV    R7,     #18H
        MOV    20H,     #00H
        MOV    21H,     #60H
        MOV    22H,     #0F0H
        MOV    23H,     #00H
        MOV    24H,     #00H
        ACALL    CHU7
LOOP:        SJMP    LOOP
CHU7:        CLR    C
        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, 26H ;商数左移
        RLC    A
        MOV    26H,    A
        MOV    A,    27H
        RLC    A
        MOV    27H,    A
        MOV    A,    28H
        RLC    A
        MOV    28H,    A
        CLR    C
MOV A, 23H ;判断
        SUBB    A,    R4
        MOV    R1,    A
        MOV    A,    24H
        SUBB    A,    R5
        MOV    R2,    A
        JC    C,    LOOP1
        INC    26H
        MOV    A,    R1     ;建立余数
        MOV    23H,    A
        MOV    A,    R2
        MOV    24H,    A
LOOP1:        DJNZ    R7,     CHU7
        RET
;_____________________________________________________________________________
;Name:   CHU8
;Func:   四字节除双字节商为二字节除法子程序
;Input: 被除数放在R3R2R1R0,除数放在R5R4,R7为被除数扩充位
;OutPut:商数放在R1R0中,余数放在R3R2
;_____________________________________________________________________________
DATA1 EQU 00H ;被除数最低字节
DATA2 EQU 00H ;被除数低字节
DATA3 EQU 00H ;被除数低字节
DATA4 EQU 0FFH ;被除数最高字节
DATB1 EQU 00H ;除数低字节
DATB2 EQU 0FFH ;除数高字节
        ORG    2000H
        AJMP    MAIN
MAIN:        MOV    R0,     #DATA1
        MOV    R1,     #DATA2
        MOV    R2,     #DATA3
        MOV    R3,     #DATA4
        MOV    R4,     #DATB1
        MOV    R5,     #DATB2
        ACALL    CHV8
SJMP $
CHV8:        MOV    R7,     #10H
LOOP3:        CLR    C
MOV A, R0 ;被除数左移
        ADD    A,    R0
        MOV    R0,    A
        MOV    A,    R1
        ADDC    A,    R1
        MOV    R1,    A
        MOV    A,    R2
        ADDC    A,    R2
        MOV    R2,    A
        MOV    A,    R3
        ADDC    A,    R3
        MOV    R3,    A
        JC    LOOP1
MOV A, R2 ;高位被除数减除数
        SUBB    A,    R4
        MOV    R2,    A     
        MOV    A,    R3
        SUBB    A,    R5
        MOV    R3,    A
        JNC    C,     LOOP2
        MOV    A,    R2     ;恢复被除数
        ADD    A,    R4
        MOV    R2,    A
        MOV    A,    R3
        ADDC    A,    R5
        MOV    R3,    A
        DJNZ    R7,     LOOP3
        RET
LOOP1:        CLR    C
        MOV    A,    R2
        SUBB    A,    R4
        MOV    R2,    A
        MOV    A,    R3
        SUBB    A,    R5
        MOV    R3,    A
LOOP2:        INC    R0
        DJNZ    R7,     LOOP3
        RET
;_____________________________________________________________________________
;Name:   CHU9
;Func:   三字节或二字节的倒数结果为三字节除法子程序
;Input: 待求倒数的数,即除数放在内部RAM26H-28H单元,被除数均为1放在20H单元.
;OutPut:结果即商的小数清确小数点后三字节,放在23H--25H单元
;Use:   使用21H--24H,60H--62H单元为工作寄存器
;_____________________________________________________________________________
        ORG    2000H
        AJMP    MAIN
MAIN:        MOV    20H,     #01H
        MOV    21H,     #00H
        MOV    22H,     #00H
        MOV    23H,     #00H
        MOV    24H,     #00H
        MOV    25H,     #00H
        MOV    26H,     #00H
        MOV    27H,     #00H
        MOV    28H,     #00H
        MOV    60H,     #00H
        MOV    61H,     #00H
        MOV    62H,     #00H
        MOV    R7,     #18H
        ACALL    CHU9
LOOP:        SJMP    LOOP
CHU9:        CLR    C
LOOP4:        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 LOOP1 ;判断扩充
        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     ;商加1
        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    LOOP2
LOOP1: 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    LOOP3
MOV A, 23H ;恢复除数
        MOV    23H,    A
        MOV    A,    24H
        ADDC    A,    27H
        MOV    24H,    A
        MOV    A,    25H
        ADDC    A,    28H
        MOV    25H,    A
LOOP3:        CPL    C
LOOP2:        DJNZ    R7,     LOOP4;    
        MOV    A,    20H
        XCH    A,    23H
        MOV    20H,    A
        MOV    A,    21H
        SXCH    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,    25
        MOV    25H,    A

⌨️ 快捷键说明

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