MCS51单片机数制转换程序

发布时间:
来源: 电子工程世界

;BCD小数转换为二进制小数(2位)
;入口    :R0(低位首址),R7
;占用资源:ACC,B,R5
;堆栈需求:2字节
;出口    :R3,R4


PDTB     :CLR    A
          MOV    R3,A
          MOV    R4,A
PDB1     :MOV    A,R3
          MOV    B,#9AH
          MUL    AB
          MOV    R5,B
          XCH    A,R4
          MOV    B,#19H
          MUL    AB
          ADD    A,R4
          MOV    A,R5
          ADDC   A,B
          MOV    R5,A
          MOV    A,@R0
          MOV    B,#9AH
          MUL    AB
          ADD    A,R5
          MOV    R4,A
          CLR    A
          ADDC   A,B
          XCH    A,R3
          MOV    B,#19H
          MUL    AB
          ADD    A,R4
          MOV    R4,A
          MOV    A,B
          ADDC   A,R3
          MOV    R3,A
          MOV    A,@R0
          MOV    B,#19H
          MUL    AB
          ADD    A,R3
          MOV    R3,A
          DEC    R0
          DJNZ   R7,PDB1
          RET

;BCD小数转换为二进制小数(N位)
;入口    :R1(低位首址),M,N
;占用资源:ACC,B,R2,R3,R7
;堆栈需求:2字节
;出口    :R0

PDTBMN   :MOV    A,R0
          MOV    R2,A
          MOV    A,R1
          MOV    R3,A
          MOV    B,N
          CLR    A
PDBMN1   :MOV    @R0,A
          INC    R0
          DJNZ   B,PDBMN1
          MOV    A,N
          SWAP   A
          RR     A
          MOV    R7,A
PDBMN2   :MOV    A,R2
          MOV    R0,A
          MOV    A,R3
          MOV    R1,A
          MOV    B,M
          CLR    C
PDBMN3   :MOV    A,@R1
          ADDC   A,@R1
          DA     A
          JNB    ACC.4,PDBMN4
          SETB   C
          CLR    ACC.4
PDBMN4   :MOV    @R1,A
          INC    R1
          DJNZ   B,PDBMN3
          MOV    B,N
PDBMN5   :MOV    A,@R0
          RLC    A
          MOV    @R0,A
          INC    R0
          DJNZ   B,PDBMN5
          DJNZ   R7,PDBMN2
          MOV    A,R2
          MOV    R0,A
          RET

;BCD整数转换为二进制整数(1位)
;入口    :R0(高位地址),R7
;占用资源:ACC,B
;堆栈需求:2字节
;出口    :R4

IDTB1    :CLR    A
          MOV    R4,A
IDB11    :MOV    A,R4
          MOV    B,#0AH
          MUL    AB
          ADD    A,@R0
          INC    R0
          MOV    R4,A
          DJNZ   R7,IDB11
          RET

;BCD整数转换为二进制整数(2位)
;入口    :R0(高位地址),R7
;占用资源:ACC,B
;堆栈需求:2字节
;出口    :R3,R4

IDTB2    :CLR    A
          MOV    R3,A
          MOV    R4,A
IDB21    :MOV    A,R4
          MOV    B,#0AH
          MUL    AB
          MOV    R4,A
          MOV    A,B
          XCH    A,R3
          MOV    B,#0AH
          MUL    AB
          ADD    A,R3
          MOV    R3,A
          MOV    A,R4
          ADD    A,@R0
          INC    R0
          MOV    R4,A
          CLR    A
          ADDC   A,R3
          MOV    R3,A
          DJNZ   R7,IDB21
          RET

;BCD整数转换为二进制整数(3位)
;入口    :R0(高位地址),R7
;占用资源:ACC,B
;堆栈需求:2字节
;出口    :R2,R3,R4

IDTB3    :CLR    A
          MOV    R2,A
          MOV    R3,A
          MOV    R4,A
IDB31    :MOV    A,R4
          MOV    B,#0AH
          MUL    AB
          MOV    R4,A
          MOV    A,B
          XCH    A,R3
          MOV    B,#0AH
          MUL    AB
          ADD    A,R3
          MOV    R3,A
          CLR    A
          ADDC   A,B
          XCH    A,R2
          MOV    B,#0AH
          MUL    AB
          ADD    A,R2
          MOV    R2,A
          MOV    A,R4
          ADD    A,@R0
          INC    R0
          MOV    R4,A
          CLR    A
          ADDC   A,R3
          MOV    R3,A
          CLR    A
          ADDC   A,R2
          MOV    R2,A
          DJNZ   R7,IDB31
          RET

文章来源于: 电子工程世界 原文链接

本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。