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

📄 mcs-51

📁 MCS-51单片机实用子程序库,包括全套的数据转换与计算的子程序。
💻
📖 第 1 页 / 共 5 页
字号:
;********************************************************************
;以下的程序是一些关于数据转换与计算的子程序.
;函数名            说 明 
;BIN3toBCD4 三字节二进制整数--->>BCD码四字节转换 
;SIBITD 单字节二进制整数-->>BCD码转换子程序 
;ADDM1 三字节加法子程序并显示和值 
;SUBM 多字节减法子程序 
;SUBM4 四字节乘四字节乘法子程序 
;CHU3 五字节除五字节除法子程序 
;CHU4 双字节除单字节除法子程序 
;CHU5 双字节除单字节商为双字节除法子程序 
;CHU6 三字节除单字节商为三字节除法了程序 
;CHU7 三字节除双字节商为三字节除法子程序 
;CHU8 四字节除双字节商为二字节除法子程序 
;CHU9 三字节或二字节的倒数结果为三字节除法子程序 
;CHU10 带符号双字节除单字节除法子程序 
;SQRT 双字节平方根子程序 
;BCDAD1 单字节BCD码加法子程序 
;BCDAD2 四字节BCD码加法子程序 
;BCDSUB3 单字节BCD码减法子程序 
;DSUB2 四字节BCD码减法子程序 
;BCDSUB4 单字节BCD码乘法子程序 
;DCHFA 十进制数8位乘8位(四字节BCD码乘四字节BCD码)乘法子程序 
;DCHU1 单字节BCD码除法子程序 
;DCHU2 四字节BCD码除法子程序 
;DSQR1 单字节BCD码平方根子程序 
;DSQR2 双字节BCD码平方根子程序 
;DSQR3 三字节BCD码平方根子程序 
;ASBIN1 ASCII码--->>二进制数转换子程序 
;EXASC1 十六进制--->>ASCII码转换子程序 
;BCDAS1 BCD码--->>ASCII码转换子程序 
;BINBCD 双字节二进制-->>三字节BCD码转换子程序  
;DTOB4 四位BCD码--->>十六位二进制数转换子程序 
;BINASC 二进制数--->>ASCII码字符串转换子程序 
;BCH 二进制数--->>十六进制数转换子程序 
;ASCBCD ASCII码-->>BCD码转换子程序 
;ASCHEX ASCII码-->>十六进制数转换子程序 
;BCDBIN BCD码--->>二进制数转换子程序 
;EXASC3 十六进制数-->>ASCII码转换子程序 
;********************************************************************
 


;********************************************************************
;Name: BIN3toBCD4
;Func: 三字节二进制整数--->>BCD码四字节转换(Comped BCD)
;Input: 二进制数人低字节到高字节存放在内部RAM50H,51H,52H单元中
;Output: BCD码人低位到高位分别存放在内部RAM53H,54H,55H,56H单元中
;USE:    R7-R0,    56H-50H
;********************************************************************
;PASSED
BIN3toBCD4:
LENG1 EQU 24
LENG2 EQU 4
LENG3 EQU 3
NUMB1 EQU 50H
NUMB2 EQU 53H
    ;;;For test
    MOV    50H,    #00H
    MOV    51H,    #0FFH
    MOV    52H,    #0FFH
    ;;;;;;;;;;
ACALL MUBTD
    RET
;;LOOP: SJMP LOOP
MUBTD: MOV R0, #NUMB2
MOV R7, #LENG2
CLR A
LOOP1: MOV @R0, A
INC R0
DJNZ R7, LOOP1
MOV R7, #LENG1
LOOP4: MOV R1, #NUMB1
MOV R6, #LENG3
CLR C
LOOP2: MOV A, @R1
RLC A
MOV @R1, A
INC R1
DJNZ R6, LOOP2
MOV R5, #LENG2
MOV R0, #NUMB2
LOOP3: MOV A, @R0
ADDC A, @R0
DA A
MOV @R0, A
INC R0
DJNZ R5, LOOP3
DJNZ R7, LOOP4

MOV R0, 53H
MOV R1, 54H
MOV R2, 55H
MOV R3, 56H
RET            ;     end of BIN3toBCD4
;********************************************************************
;_____________________________________________________________________________
; Name: SIBITD
;Func: 单字节二进制整数-->>BCD码转换子程序
;Input: 二进制数放在内部RAM20H单元
;OutPut:    转换后的BCD码高位放在内部RAM22H
;_____________________________________________________________________________
LENG1 EQU 8 ;二进制数位数
LENG2 EQU 2 ;BCD码字节数
NUMB1 EQU 20H ;二进制数地址
NUMB2 EQU 21H ;BCD码首址
        ORG    2000H
        AJMP    MAIN
MAIN:        MOV    R0,     #NMB1
        MOV    R1,     #NUMB2
        MOV    R7,     #LENG1
        ACALL    SIBTD
        SJMP    $
SIBTD:        CLR    A
        MOV    21H,    A
        MOV    22H,    A
LOOP3:        CLR    C
        MOV    A,    @R0
        RLC    A
        MOV    @R0,    A
        MOV    R1,     #NUMB2
        MOV    R6,     #LENG3
LOOP2:        MOV    A,     #R1
        ADDC    A,     #@R1
        DA    A
        MOV    @R1,    A
        INC    R1
        DJNZ    R6,     LOOP2
        DJNZ    R7,     LOOP3
        RET
;___________________________________________________________________________
;        二进制数             BCD码
; (20H) (22H 21H)
; FF 2 55
;        7F                 1 27
;        80                 1 28
;____________________________________________________________________________


;_____________________________________________________________________________
; Name: ADDM1
;Func: 三字节加法子程序并显示和值
;Input: 被加数数据区首址由R0指向内部RAM20H单元.加数数据区首地址由R1指向内部RAM23单元
;OutPut: 和数放在被加数的数据区
;_____________________________________________________________________________
ORG 20H
DATA: DEFB 66H ;被加数低字节
DEFB 77H
EEFB 88H ;被加数高字节
DATAB: DEFB 44H ;加数低字节
DEFB 66H
DEFB 77H; ;加数高字节
COVNT: EQU 03H ;字节数
ORG DAH
DS: DEFS 06H; display BUF
ORG 2000H
AJMP MAIN
MAIN: MOV R3, #COVNT
MOV R0, #DATA
MOV R1, #DATB
ACALL ADDM1
ACALL DSVP0
LOOP0: SJMP LOOP0
ADDM1: CLR A
LOOP: MOV A, @R0
ADDC A, @R1
MOV @R0, A
INC R0
INC R1
DJNZ R3, LOOP1
RET
DSUP0: MOV R0, #DS+5
MOV A, DATA
ACALL PTDS
MOV A, DATA+1
ACALL PTDS
MOV A, DATA+2
ACALL PTDS
MOV R0, #DS
MOV R2, #20H
MOV R3, #00H
MOV DPTR, #SEGPT
DSVP1: MOV A, #0FFH
MOV R1, #0E3H
MOVX @R1, A
MOVX A, @R0
MOVC A, @A+DPTR
MOV R1, #0E1H
MOVX @R, A
MOV A, R2
MOV R1, #0E3H
MOVX @R1, A
DSVP2: DJNZ R3, DSVP2
INC R0
CLR C
MOV A, R2
RRC A
MOV R2, A
JNZ A, DSVP1
LJMP DSVP0
RET
PTDS: MOV R1, A
ACALL PTDS1
MOV A, P1
SWAP
PTDS1: ANL A, #0FH
MOV @R0, A
DEC R0
RET
SEGPT: DEFB 0C0H, 0F9H
        DEFB    0A4H,     0B0H
        DEFB    99H,     92H
        DEFB    82H,     0F8H
        DEFB    80H,     90H
        DEFB    88H,     83H
        DEFB    0C6H,     0A1H
        DEFB    86H,     8EH
        END
;__________________________________________________________________________
; 被加数 加数 和数
; 22H21H20H 25H24H23H 22H21H20H
; 88 77 66 77 66 44 FF DD AA
; 78 65 44 77 65 98 F0 00 00
;__________________________________________________________________________

;_____________________________________________________________________________
;Name: SUBM
;Func: 多字节减法子程序
;Input: 被减数数据区首址由R0指向内部RAM20H单元.减数数据区首地址由R1指向内部RAM23单元
;OutPut: 差数放在被减数的数据区
;_____________________________________________________________________________

ORG 20H
DATA: DEFB 0FFH ;被减数低字节
DEFB 0FFH
DEFB 0FFH 
DEFB 0FFH ;被减数高字节
DATB: DEFB 55H ;减数低字节
DEFB 55H 
DEFB 55H
DEFB 55H ;减数高字节
COVNT: EQU 04H ;字节数
ORG 2000H
AJMP MAIN
MAIN: MOV R3, #COVNT
MOV R0, #DATA
MOV R1, #DATB
ACALL SUBM
LOOP: SJMP LOOP
SUMB: CLR C
CLR A
LOOP1: MOV A, @R0
SUBB A, @R1
MOV @R0, A
INC R0
INC R1
DJNZ R3, LOOP1
RET
END
;__________________________________________________________________________
;    被减数             减数             差数
;    23H22H21H20H        27H26H25H24H         23H22H21H20H
;    FF FF FF FF         55 55 55 55         AA AA AA AA 
;    AA AA AA AA         55 55 55 55         55 55 55 55 
;    12 34 56 78        12 34 56 79         FF FF FF FF          
;__________________________________________________________________________

;_____________________________________________________________________________
;Name: SUBM4
;Func: 四字节乘四字节乘法子程序
;Input:被乘数和乘数分别放在内部RAM20H--27H单元中,乘数位数放在2AH单元中
;OutPut: 乘积放在内部RAM61H-68H单元中.
;_____________________________________________________________________________
        ORG    20H
DATA1 DEFB 0FFH 被乘数低字节
DATA2 DEFB 0FFH
DATA3 DEFB 0FFH
DATA4 DEFB 7FH 被乘数高字节
DATB1 DEFB 0FFH 乘数低字节
DATB2 DEFB 0FFH
DATB3 DEFB 0FFH
DATB4 DEFB 7FH 乘数高字节
COVNT EQU 20H
        ORG    2000H
        AJMP    MAIN
MAIN:        MOV    R0,     DATA1
        MOV    R1,     DATA2
        MOV    R2,     DATA3
        MOV    R3,     DATA4
        MOV    R4,     DATB1
        MOV    R5,     DATB2
        MOV    R6,     DATB3
        MOV    R7,     DATB4
        MOV    2AH,     #COVNT
        CLR    A
        MOV    61H,    A
        MOV    62H,    A
        MOV    63H,    A
        MOV    64H,    A
        MOV    65H,    A
        MOV    66H,    A
        MOV    67H,    A
        MOV    68H,    A
        ACALL    CHENG6
LOOP0:        SJMP    LOOP0
        ORG    2200H
CHENG6: MOV A, 61H
        ADD    A,    61H
        MOV    61H,    A
        MOV    A,    62H
        ADDC    A,    62H
        MOV    62H,    A
        MOV    A,    63H
        ADDC    A,    63H
        MOV    63H,    A
        MOV    A,    64H
        ADDC    A,    64H
        MOV    64H,    A
        MOV    A,    65H
        ADDC    A,    65H
        MOV    65H,    A
        MOV    A,    66H
        ADDC    A,    66H
        MOV    66H,    A
        MOV    A,    67H
        ADDC    A,    67H
        MOV    67H,    A
        MOV    A,    68H
        ADDC    A,    68H
        MOV    68H,    A
        MOV    A,    R4
        ADD    A,    R4
        MOV    R4,    A
        MOV    A,    R5
        ADD    A,    R5
        MOV    R5,    A
        MOV    A,    R6
        ADD    A,    R6
        MOV    R6,    A
        MOV    A,    R7
        ADD    A,    R7
        MOV    R7,    A
        JNC    LOOP1
        MOV    A,    61H
        ADD    A,    R0
        MOV    61H,    A
        MOV    A,    62H
        ADDC    A,    R1
        MOV    A,    63H
        ADDC    A,    R2
        MOV    63H,    A
        MOV    A,    64H
        ADDC    A,    R3
        MOV    64H,    A
        MOV    A,    65H
        ADDC    A,     #00H
        MOV    65H,    A
        MOV    A,    66H
        ADDC    A,     #00H
        MOV    66H,    A
        MOV    A,    67H
        ADDC    A,     #00H
        MOV    67H,    A
        MOV    A,    68H
        ADDC    A,     #00H
        MOV    68H,    A
LOOP1:        DJNZ    2AH,     LOOP2
        RET
LOOP2:        AJMP    CHENG6
END
;__________________________________________________________________________
;    被乘数             乘数             积数
;    23H22H21H20H        27H26H25H24H         68H--61H
;    7F FF FF FF         7F FF FF FF         3F FF FF FF 00 00 01 00
;    00 FF FF FF         00 00 FF FF         00 00 00 FF FE FF 00 01
;__________________________________________________________________________
;_____________________________________________________________________________
;Name: CHU3
;Func:  五字节除五字节除法子程序
;Input: 被除数放在内部RAM20H-24H单元中,除数放在10H-14H单元中.
;OutPut:商数放在25-29单元中,25H单元放最低字节,余数放在20H-24H单元中,20H单元放最低字节
;Use: 用A,C,R0,R1,R2,R3,R6,R7寄存器,其中R0作移位减计数器,使用位地址60H单元作进位位,C作暂存器
;_____________________________________________________________________________
        ORG    20H
DATA1:        DEFB    21H         被除数最低字节
DATA2:        DEFB    43H     
DATA3:        DEFB    65H     
DATA4:        DEFB    87H     
DATA5:        DEFB    A9H         被除数最高字节
        ORG    10H
DATB1:        DEFB    9AH         除数最低字节
DATB2:        DEFB    78H
DATB3:        DEFB    56H
DATB4:        DEFB    34H
DATB5:        DEFB    12H         除数最高字节
ORG 2000H
AJMP MAIN
MAIN: ACALL CHU3
LOOP: SJMP LOOP
CHU3: MOV R0, #DATB1
MOV R7, #04H ;检查除数为零停止运算
LOOP1: MOV A, @R0
JNC R0
ORL A, @R0
JNZ A, LOOP0
DJNZ R7, LOOP1
AJMP LOOP2
LOOP0: CLR A
MOV R0, #25H
MOV R7, #05H
LOOP3: MOV @R0, A
INC R0
DJNZ R7, LOOP6
MOV R6, #28H ;移位计数器
LOOP8: MOV R0, #DATA1 ;与商连在一起左移
MOV R7, #0AH
LOOP4: MOV A, @R0
RLC A
MOV @R0, A

⌨️ 快捷键说明

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