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

📄 mcs-51

📁 MCS-51单片机实用子程序库,包括全套的数据转换与计算的子程序。
💻
📖 第 1 页 / 共 5 页
字号:
;_____________________________________________________________________________
        ORG    2000H
        AJMP    MAIN
MAIN:        MOV    R0,     #41H
        ACALL    ASBIN1
LOOP:        SJMP    LOOP
ASBIN1: CLR C
        MOV    A,    R0
        CJNE    A,     #30H,    LOOP1
LOOP1:        JC    C,     LOOP2
        CJNE    A,     #47H,    LOOP3
LOOP3:        JNC    C,     LOOP2
        CLR    C
        MOV    A,    R6
        SUBB    A,     #30H
        MOV    R0,    A
        SUBB    A,     #0AH
        JC    C,    LOOP4
        XCH    A,    R0
        SUBB    A,     #07H
        MOV    R0,    A
LOOP4:        RET
LOOP2:        MOV    R0,     #0FFH
        RET
;_____________________________________________________________________________
;数码 寄存器 例1 例2 例3 例4 例5 例6
;ASCII码 R0 41 38 49 29 30 46
;转换结果 R0 0A 08 FF FF 00 0F 
;_____________________________________________________________________________

;_____________________________________________________________________________
;Name:      EXASC1
;Func:    十六进制--->>ASCII码转换子程序
;Input:   待转换的十六进制放在R0中
;OutPut:  转换后的ASCII码仍放在R0中
;_____________________________________________________________________________
        ORG    2000H
        AJMP    MAIN
MAIN:        MOV    R0,     #04H
        ACALL    EXASC1
LOOP:        SJMP    LOOP
EXASC1: MOV A, R0
        CJNE    A,     #0AH,    LOOP1
LOOP1:        JC    C,     NEXT0
        ADD    A,    #07H
NEXT0:        ADD    A,     #30H
        RET        
;_____________________________________________________________________________
;数码        寄存器         例1    例2     例3    例4    
;转换结果    R0        04     0E    0F    0A
;ASCII码    R0        34     45    46    41
;_____________________________________________________________________________

;_____________________________________________________________________________
;Name:  BCDAS1
;Func: BCD码--->>ASCII码转换子程序
;Input: BCD码数据放在由R0指向内部RAM20H为首地址的单元,BCD码字节数放在R7中
;OutPut: ASCII码数据放在由R1指向内部RAM10H为首地址的10个单元中
;_____________________________________________________________________________
        20H    EQU    01H     
        21H    EQU    23H
        22H    EQU    45H
        23H    EQU    67H
        24H    EQU    89H
        ORG    2000H
        AJMP    MAIN
        SJMP    MAIN
MAIN:        MOV    R0,     #20H
        MOV    R1,     #10H
        MOV    R7,     #05H
        ACALL    BCDAS1
LOOP:        SJMP    LOOP
BCDAS1: MOV R1, #10H
        MOV    R6,     #0AH
LOOP1:        MOV    @R0,     #00H
        INC    R1
        DJNZ    R6,     LOOP1
LOOP2:        MOV    A,     @40
        MOV    R2,    A
        SWAP    A
        ANL    A,    #0FH
        ADD    A,    #30H
        MOV    @R1,    A
        INC    R1
        MOV    A,    R2
        ANL    A,    #0FH
        ADD    A,    #30H
        MOV    @41,    A
        INC    R0
        INC    R1
        DJNZ    R7,     LOOP2
        RET
;_____________________________________________________________________________
;Name:     BINBCD
;Func:   双字节二进制-->>三字节BCD码转换子程序 
;Input:   二进制数放在R0指向内部RAM24H单元为首地址的2个单元中
;OutPut: BCD码放在由R1指向内部RAM21H单元为首地址的3个单元
;_____________________________________________________________________________
DATA EQU 0FFH ;二进制数高字节
DATB EQU 0FFH ;二进制数低字节
        ORG    2000H    
        AJM    LOOP
LOOP:        MOV    R0,     #24H
MOV A, #DATB ;送低字节
        MOV    @R0,    A
        INC    R0
        MOV    A,F     #DATA
        MOV    @R0,    A
        ACALL    BINBCD
        SJMP    $
BINBCD: MOV R1, #21H ;BCD码首地址
        MOV    R5,     #03H
        CLR    A
LOOP1:        MOV    @R1,     A
        INC    R1
        DJNZ    R5,     LOOP1
        MOV    R7,     #10H
LOOP4:        MOV    R0,     #24H
        MOV    R6,     #02H
        LR    C
LOOP2:        MOV    A,     @R0
        RLC    A
        MOV    @R0,    A
        INC    R0
        DJNZ    R6,     LOOP2
        MOV    R1,     #21H
        MOV    R5,     #03H
        NOP
LOOP3:        MOV    A,     @R1
        ADDC    A,    @R1
        DA    A
        MOV    @R1,    A
        INC    R1
        DJNZ    R5,     LOOP3
        DJNZ    R7,     LOOP4
        RET
;_____________________________________________________________________________
; 二进制数 BCD码
; 25H 24H (23H 22H 21H)
; FF FF 06 55 35
; 00 FF 00 02 55
; 7F FF 03 27 67
;_____________________________________________________________________________
;_____________________________________________________________________________
;Name:     DTOB4
;Func:   四位BCD码--->>十六位二进制数转换子程序
;Input:   四位BCD码放在R0指向内部RAM20H单元为首地址的4个单元中,其中20H单元为最高位
;OutPut:    转换结果放在R1R2中,R1放低位
;_____________________________________________________________________________
20H DEFB 02H ;千位
21H DEFB 03H ;百位
22H DEFB 07H ;十位
23H DEFB 06H ;个位
        ORG    2000H
        AJMP    MAIN
MAIN:        MOV    R7,     #03H
        MOV    R0,     #20H    
        ACALL    DTOB4
        SJMP    $
DTOB4:        CLR    A
        MOV    R1,    A
        MOV    R2,    A
        MOV    R4,    A
        MOV    R5,    A
        MOV    R3,    A
        MOV    A,    @R0
        MOV    R1,    A
        CLR    C
LOOP1:        MOV    A,     R1
        ADD    A,    R1
        MOV    R1,    A
        MV    A,    R2
        ADDC    A,    R2
        MOV    R2,    A
        MOV    A,    R1
        MOV    R3,    A
        MOV    A,    R2
        MOV    R4,    A
        MOV    A,    R1
        ADD    A,    R1
        MOV    R1,    A
        MOV    A,    R2
        ADDC    A,    R2
        MOV    R2,    A
        MOV    A,    R1
        ADD    A,    R1;
        MOV    R1,    A
        MOV    A,    R2
        ADDC    A,    R2
        MOV    R2,    A
        MOV    A,    R1
        ADD    Q,    R3
        MOV    R1,    A
        MOV    A,    R2
        ADDC    A,    R4
        MOV    R2,    A
        INC    R0
        MOV    A,    @R0
        MOV    R5,    A
        MOV    A,    R1
        ADD    A,    R5
        MOV    R1,    A
        MOV    A,    R2
        ADDC    A,     #00H
        MOV    R2,    A
        MOV    R5,     #00H
        DJNZ    R7,     LOOP1
;_________________________________________________________________________
; BCD码 二进制数
; 20H 21H 22H 23H R2 R1
; 01 01 01 01 04 57
; 02 03 07 06 09 48
; 09 09 09 09 27 0F 
;_____________________________________________________________________________;_____________________________________________________________________________
;Name:  BINASC
;Func: 二进制数--->>ASCII码字符串转换子程序
;Input: 二进制数放在由R0指向内部RAM20H单元
;OutPut:    转换后的ASCII码字符串放在内部RAM21H--28H单元中
;_____________________________________________________________________________
        20H    DEFB     0AAH    ;待转换二进制数
        ORG    2000H
        AJMP    MAIN
MAIN:        MOV    R0,     #20H
        MOV    R7,     #08H
        ACALL    BINASC
        SJMP    $
BINASC:    MOV    A,    @R0
LOOP1:        INC    R0
        MOV    @R0,     #30H
        CLR    C
        RLC    A
        JNC    C,     LOOP2
        INC    @R0
LOOP2:        DJNZ    R7,     LOOP1
        RET    
;_____________________________________________________________________________
; 二进制数 ASCII码(转换结果)
; (20H) 21H ---------- ------28H
; 0AAH 31 30 31 30 31 30 31 30
;_____________________________________________________________________________

;_____________________________________________________________________________;_____________________________________________________________________________
;Name:     BCH
;Func:   二进制数--->>十六进制数转换子程序
;Input:   二进制数末地址为内部RAM21H单元
;OutPut: 十六进制数放在内部RAM2AH单元中
;_____________________________________________________________________________     
20H EQU 0A5H ;待转换的二进制数
        21H    EQU     0D9H
        ORG    2000H
        AJMP    MAIN
MAIN:        MOV    R0,     #21H
        MOV    R1,     #2AH
        MOV    R7,     #02H
        ACALL    BCH
        SJMP    $
BCH:        MOV    A,     @R0
        RR    A
        RR    A
        RR    A
        RR    A
        ANL    A,    #0FH
        MOV    @R1,    A
        INC    R1
        MOV    A,    @R0
        ANL    A,    #0FH
        MOV    @R1,    A
        INC    R1
        DEC    R0
        DJNZ    R7,     BCH
        RET
;_____________________________________________________________________________
; 二进制数 十六进制数
; (22H) (20H) (2AH)---(2DH)
; A5 D9 0A 05 0D 09
;_____________________________________________________________________________
;_____________________________________________________________________________
;Name:     ASCBCD
;Func:  ASCII码-->>BCD码转换子程序
;Input: ASCII码放在由R0指向内部RAM20H单元为首地址的8个单元中,转换字节数放在R7中
;OutPut:    BCD码放在由R1指向外部RAM20H单元为首地址的6个单元
;_____________________________________________________________________________
        20H    EQU    28H     
        21H    EQU 30H
        22H    EQU    32H
        23H    EQU    34H
        24H    EQU    38H
        25H    EQU    3AH
        ORG    2000H
        AJMP    MAIN
MAIN:        MOV    R7,     #06H
        MOV    R1,     #20H
        MOV    R0,     #20H
        ACALL    ASCBCD
        SJMP    $
ASCBCD: MOV A, @R0
        CLR    C
        CJNE    A,     #30H,    CHK1
CHK1:        JC    C,     LOOP1
        CJNE    A,     #3AH,    CHK2
CHK2:        JNC    C,     LOOP1
        CLR    C
        SUBB    A,     #30H
LOOPP2:        MOVX    @R1,     A
        INC    R0
        INC    R1
        DJNZ    R7,     ASCBCD
        RET
LOOP1:        MOV    A,     @0FFH
        MOVX    @R1,    A
        LJMP    LOOP2
;_____________________________________________________________________________
;Name:   ASCHEX
;Func:  ASCII码-->>十六进制数转换子程序
;Input: ASCII码放在由R0指向内部RAM20H单元为首地址的9个单元中,转换个数放在R7中
;OutPut:    转换后的十六进制数放在原ASCII码相应单元
;_____________________________________________________________________________
20H EQU 31H ;待转换的ASCII码
        21H    EQU    33H
        22H    EQU    35H     
        23H    EQU    37H
        24H    EQU    39H
        25H    EQU    41H
        26H    EQU    43H
        27H    EQU    45H
        28H    EQU    47H
        ORG    2000H
        AJMP    LOOP
LOOP:        MOV    R7,     #09H
        MOV    R0,     #20H    
        ACALL    ASCHEX
LOOP0:        SJMP    LOOP0
ASCHEX: MOV A, @R
        CLR    C
        SUBB    A,     #30H
        CJNE    A,     #0AH
CHK1:        JC    C,     LOOP1
        SUBB    A,     #11H
        CJNE    A,     #06H,    CHK2
CHK2:        JNC    C,     LOOP2
        ADD    A,    #0AH
LOOP1:        MOV    @40,     A
        INC    R0
        DJNZ    R7,     ASCHEX
        RET
LOOP2:        MOV    A,     #0FFH
        MOV    @R0,    A
        LJMP    LOOP1
;_____________________________________________________________________________
; 内存单元 (20H )------------------(28H)
; ASCII码 31 33 35 37 39 41 43 45 47
; 十六进制 01 03 05 07 09 0A 0C 0E FF
;_____________________________________________________________________________
;_____________________________________________________________________________
;Name:    BCDBIN
;Func:  BCD码--->>二进制数转换子程序
;Input: 将两个BCD码放在由R0指向内部RAM20H单元为首址的2个单元
;OutPut:    转换结果放在内部RAM22H中
;_____________________________________________________________________________
        20H    EQU    04H     ;待转换的BCD码
        21H    EQU    07H     
        ORG    2000H    
        AJMP    MAIN
MIAN:        MOV    R0,     #20H
        ACALL    BCDBIN
LOOP:        SJMP    LOOP
BCDBIN: MOV A, @R0
        ADD    A,    @R0
        AMOV    R2,    A
        ADD    A,    R2
        ADD    A,    A
        ADD    A,    R2
        INC    R0
        ADD    A,    @R0
        INC    R0
        ADD    A,    @R0
        MOV    22H,    A
        RET
;_____________________________________________________________________________
;        BCD码             二进制数
;        (20H)(21H)         (22H)
;        04 07             2F
;        06 03             3F
;        09 09             63
;_____________________________________________________________________________

;_____________________________________________________________________________
;Name:    EXASC3
;Func:  十六进制数-->>ASCII码转换子程序
;Input: 十六进制数首址由R0指向内部RAM20H单元,转换的个数放在R7中
;OutPut: 转换后的ASCII放在原十六进制数的数据区
;_____________________________________________________________________________
        ORG    2000H
        AJMP    MAIN
MAIN:        MOV    R0,     #20H
        MOV    R7,     #08H
        ACALL    EXASC3
        SJMP    $
EXASC3: MOV A, @R0
        CJNE    A,     #0AH,    LOOP1
LOOP1:        INC    C,     NEXT0
        ADD    A,    #30H
        MOV    @R0,    A
        INC    R0
        DJNZ    R7,     EXASC3
        RET
NEXT0:        ADD    A,     #37H
        SJMP    LOOP1
        END
;___________________________________________________________________________
; 内存单元 20H------------------27H
; 十六进制数 02 03 05 06 0E 0F 0A 09
;    ASCII码        32 33 35 36 45 46 41 39
;____________________________________________________________________________

;_____________________________________________________________________________

⌨️ 快捷键说明

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