51单片机汇编程序集(二)
2012-06-02

辛普生积分程序

内部RAM数据排序程序(升序)

外部RAM数据排序程序(升序)

外部RAM浮点数排序程序(升序)

BCD小数转换为二进制小数(2位)

BCD小数转换为二进制小数(N位)

BCD整数转换为二进制整数(1位)

BCD整数转换为二进制整数(2位)

BCD整数转换为二进制整数(3位)

BCD整数转换为二进制整数(N位)

二进制小数(2位)转换为十进制小数(分离BCD码)

二进制小数(M位)转换为十进制小数(分离BCD码)

二进制整数(2位)转换为十进制整数(分离BCD码)

二进制整数(2位)转换为十进制整数(组合BCD码)

二进制整数(3位)转换为十进制整数(分离BCD码)

二进制整数(3位)转换为十进制整数(组合BCD码)

二进制整数(M位)转换为十进制整数(组合BCD码)

三字节无符号除法程序(R2R3R4/R7)=(R2)R3R4 余数R7

;辛普生积分程序

;入口: DPTR,N,COUNT

;占用资源: ACC,R3,R4,R6,R7

;堆栈需求: 2字节

;出口: R3,R4

SJF : MOV R7,N

MOVX A,@DPTR

INC DPTR

MOV R4,A

MOV R3,#00H

DEC R7

SJF1 : MOVX A,@DPTR

INC DPTR

CLR C

RLC A

MOV R6,A

CLR A

RLC A

XCH A,R7

JNB ACC.0,SJF2

XCH A,R6

RLC A

XCH A,R6

XCH A,R7

RLC A

XCH A,R7

SJF2 : XCH A,R7

XCH A,R6

ADD A,R4

MOV R4,A

MOV A,R6

ADDC A,R3

MOV R3,A

DJNZ R7,SJF1

SJF3 : MOVX A,@DPTR

ADD A,R4

MOV R4,A

CLR A

ADDC A,R3

MOV R3,A

MOV R7,#COUNT

LCALL NMUL21

MOV A,N

MOV B,#03H

MUL AB

MOV R7,A

LCALL NDIV31

RET

NMUL21 : MOV A,R4

MOV B,R7

MUL AB

MOV R4,A

MOV A,B

XCH A,R3

MOV B,R7

MUL AB

ADD A,R3

MOV R3,A

CLR A

ADDC A,B

MOV R2,A

CLR OV

RET

NDIV31 : MOV B,#10H

NDV311 : CLR C

MOV A,R4

RLC A

MOV R4,A

MOV A,R3

RLC A

MOV R3,A

MOV A,R2

RLC A

MOV R2,A

MOV F0,C

CLR C

SUBB A,R7

JB F0,NDV312

JC NDV313

NDV312 : MOV R2,A

INC R4

NDV313 : DJNZ B,NDV311

RET

;内部RAM数据排序程序(升序)

;入口: R0(起始地址),N(数据个数)

;占用资源: ACC,B,R5,R6,R7

;堆栈需求: 2字节

;出口: R0

ISELSORT : MOV R7,N

DEC R7

ISST1: MOV A,R7

MOV R6,A

MOV A,R0

MOV R1,A

MOV R2,A

MOV B,@R1

ISST2: INC R1

MOV A,@R1

CLR C

SUBB A,B

JC ISST3

MOV A,R1

MOV R2,A

MOV B,@R1

ISST3: DJNZ R6,ISST2

MOV A,B

XCH A,@R1

MOV B,R2

MOV R1,B

MOV @R1,A

DJNZ R7,ISST1

RET

;外部RAM数据排序程序(升序)

;入口: ADDPH,ADDPL(起始地址),N(数据个数)

;占用资源: ACC,B,R0,R1,R5,R7

;堆栈需求: 2字节

;出口: ADDPH-ADDPL

ESELSORT : MOV R7,N

DEC R7

ESST1: MOV A,R7

MOV R6,A

MOV DPL,ADDPL

MOV R1,DPL

MOV DPH,ADDPH

MOV R0,DPH

MOVX A,@DPTR

MOV B,A

ESST2: INC DPTR

MOVX A,@DPTR

CLR C

SUBB A,B

JC ESST3

MOV R0,DPL

MOV R1,DPH

MOVX A,@DPTR

MOV B,A

ESST3: DJNZ R6,ESST2

MOVX A,@DPTR

XCH A,B

MOVX @DPTR,A

MOV DPL,R0

MOV DPH,R1

MOV A,B

MOVX @DPTR,A

DJNZ R7,ESST1

RET

;外部RAM浮点数排序程序(升序)

;入口: ADDPH,ADDPL(起始地址),N(数据个数)

;占用资源: ACC,B,R0,R1,R2,R3,R4,R5,R6,R7,NCNT

;堆栈需求: 5字节

;出口: ADDPH,ADDPL

FSORT: MOV A,N

MOV NCNT,A

DEC NCNT

FST1 : MOV B,NCNT

MOV DPL,ADDPL

MOV R1,DPL

MOV DPH,ADDPH

MOV R0,DPH

MOVX A,@DPTR

MOV R2,A

INC DPTR

MOVX A,@DPTR

MOV R3,A

INC DPTR

MOVX A,@DPTR

MOV R4,A

FST2 : INC DPTR

MOVX A,@DPTR

MOV R5,A

INC DPTR

MOVX A,@DPTR

MOV R6,A

INC DPTR

MOVX A,@DPTR

MOV R7,A

PUSH B

LCALL FCMP

POP B

JNC FST4

MOV A,DPL

CLR C

SUBB A,#02H

MOV R1,A

MOV R0,DPH

JNC FST3

DEC R0

FST3 : MOV A,R5

MOV R2,A

MOV A,R6

MOV R3,A

MOV A,R7

MOV R4,A

FST4 : DJNZ B,FST2

MOV A,DPL

CLR C

SUBB A,#02H

MOV DPL,A

JNC FST5

DEC DPH

FST5 : MOV A,R2

MOVX @DPTR,A

INC DPTR

MOV A,R3

MOVX @DPTR,A

INC DPTR

MOV A,R4

MOVX @DPTR,A

MOV A,R0

MOV P2,A

MOV A,R5

MOVX @R1,A

INC R1

MOV A,R6

MOVX @R1,A

INC R1

MOV A,R7

MOVX @R1,A

DJNZ NCNT,FST1

RET

;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

;BCD整数转换为二进制整数(N位)

;入口: R1(高位地址),M,N

;占用资源: ACC,B,R2,R7,NCNT,F0

;堆栈需求: 2字节

;出口: R0

IDTBMN : MOV A,R0

MOV R2,A

MOV B,N

CLR A

IDBMN1 : MOV @R0,A

INC R0

DJNZ B,IDBMN1

MOV A,R2

MOV R0,A

MOV A,M

MOV NCNT,A

IDBMN2 : MOV R7,N

CLR A

CLR F0

IDBMN3 : XCH A,@R0

MOV B,#0AH

MUL AB

MOV C,F0

ADDC A,@R0

MOV F0,C

MOV @R0,A

INC R0

MOV A,B

DJNZ R7,IDBMN3

MOV A,R2

MOV R0,A

MOV A,@R1

INC R1

ADD A,@R0

MOV @R0,A

DJNZ NCNT,IDBMN2

RET

;二进制小数(2位)转换为十进制小数(分离BCD码)

;入口: R3,R4,R7

;占用资源: ACC,B

;堆栈需求: 3字节

;出口: R0

PBTD : MOV A,R7

PUSH A

PBD1 : 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

MOV @R0,A

INC R0

DJNZ R7,PBD1

POP A

MOV R7,A

MOV A,R0

CLR C

SUBB A,R7

MOV R0,A

RET

;二进制小数(M位)转换为十进制小数(分离BCD码)

;入口: R1,M,N

;占用资源: ACC,B,R2,R3,R7,NCNT

;堆栈需求: 2字节

;出口: R0

PBTDMN : MOV A,R0

MOV R2,A

MOV A,R1

MOV R3,A

MOV A,N

MOV NCNT,A

PBDMN1 : MOV R7,M

CLR A

CLR F0

PBDMN2 : XCH A,@R1

MOV B,#0AH

MUL AB

MOV C,F0

ADDC A,@R1

MOV F0,C

MOV @R1,A

INC R1

MOV A,B

DJNZ R7,PBDMN2

ADDC A,#00H

MOV @R0,A

INC R0

MOV A,R3

MOV R1,A

DJNZ NCNT,PBDMN1

MOV A,R2

MOV R0,A

RET

;二进制整数(2位)转换为十进制整数(分离BCD码)

;入口: R3,R4

;占用资源: ACC,R2,NDIV31

;堆栈需求: 5字节

;出口: R0,NCNT

IBTD21 : MOV NCNT,#00H

MOV R2,#00H

IBD211 : MOV R7,#0AH

LCALL NDIV31

MOV A,R7

MOV @R0,A

INC R0

INC NCNT

MOV A,R3

ORL A,R4

JNZ IBD211

MOV A,R0

CLR C

SUBB A,NCNT

MOV R0,A

RET

;二进制整数(2位)转换为十进制整数(组合BCD码)

;入口: R3,R4

;占用资源: ACC,B,R7

;堆栈需求: 3字节

;出口: R0

IBTD22 : MOV A,R0

PUSH A

MOV R7,#03H

CLR A

IBD221 : MOV @R0,A

INC R0

DJNZ R7,IBD221

POP A

MOV R0,A

MOV R7,#10H

IBD222 : PUSH A

CLR C

MOV A,R4

RLC A

MOV R4,A

MOV A,R3

RLC A

MOV R3,A

MOV B,#03H

IBD223 : MOV A,@R0

ADDC A,@R0

DA A

MOV @R0,A

INC R0

DJNZ B,IBD223

POP A

MOV R0,A

DJNZ R7,IBD222

RET

;二进制整数(3位)转换为十进制整数(分离BCD码)

;入口: R2,R3,R4

;占用资源: ACC,R2,NDIV31

;堆栈需求: 5字节

;出口: R0,NCNT

IBTD31 : CLR A

MOV NCNT,A

IBD311 : MOV R7,#0AH

LCALL NDIV31

MOV A,R7

MOV @R0,A

INC R0

INC NCNT

MOV A,R2

ORL A,R3

ORL A,R4

JNZ IBD311

MOV A,R0

CLR C

SUBB A,NCNT

MOV R0,A

RET

;二进制整数(3位)转换为十进制整数(组合BCD码)

;入口: R2,R3,R4

;占用资源: ACC,B,R7

;堆栈需求: 3字节

;出口: R0

IBTD32 : MOV A,R0

PUSH A

MOV R7,#04H

CLR A

IBD321 : MOV @R0,A

INC R0

DJNZ R7,IBD321

POP A

MOV R0,A

MOV R7,#18H

IBD322 : PUSH A

CLR C

MOV A,R4

RLC A

MOV R4,A

MOV A,R3

RLC A

MOV R3,A

MOV A,R2

RLC A

MOV R2,A

MOV B,#04H

IBD323 : MOV A,@R0

ADDC A,@R0

DA A

MOV @R0,A

INC R0

DJNZ B,IBD323

POP A

MOV R0,A

DJNZ R7,IBD322

RET

;二进制整数(M位)转换为十进制整数(组合BCD码)

;入口: R1,M,N

;占用资源: ACC,B,R2,R3,R7

;堆栈需求: 2字节

;出口: R0

IBTDMN : MOV A,R0

MOV R2,A

MOV A,R1

MOV R3,A

MOV B,N

CLR A

IBDMN1 : MOV @R0,A

INC R0

DJNZ B,IBDMN1

MOV A,M

SWAP A

RR A

CLR C

MOV R7,A

IBDMN2 : MOV A,R2

MOV R0,A

MOV A,R3

MOV R1,A

MOV B,M

IBDMN3 : MOV A,@R1

RLC A

MOV @R1,A

INC R1

DJNZ B,IBDMN3

MOV B,N

IBDMN4 : MOV A,@R0

ADDC A,@R0

DA A

JNB ACC.4,IBDMN5

SETB C

CLR ACC.4

IBDMN5 : MOV @R0,A

INC R0

DJNZ B,IBDMN4

DJNZ R7,IBDMN2

MOV A,R2

MOV R0,A

RET

;三字节无符号除法程序(R2R3R4/R7)=(R2)R3R4 余数R7

;入口: R2,R3,R4,R7

;占用资源: ACC,B,F0

;堆栈需求: 3字节

;出口: (R2),R3,R4,R7,OV

NDIV31 : MOV A,R2

MOV B,R7

DIV AB

PUSH A

MOV R2,B

MOV B,#10H

NDV311 : CLR C

MOV A,R4

RLC A

MOV R4,A

MOV A,R3

RLC A

MOV R3,A

MOV A,R2

RLC A

MOV R2,A

MOV F0,C

CLR C

SUBB A,R7

JB F0,NDV312

JC NDV313

NDV312 : MOV R2,A

INC R4

NDV313 : DJNZ B,NDV311

POP A

CLR OV

JZ NDV314

SETB OV

NDV314 : XCH A,R2

MOV R7,A

RET

可能会用到的工具/仪表
本站简介 | 意见建议 | 免责声明 | 版权声明 | 联系我们
CopyRight@2024-2039 嵌入式资源网
蜀ICP备2021025729号