51单片机汇编程序库

来源:本站
导读:目前正在解读《51单片机汇编程序库》的相关信息,《51单片机汇编程序库》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《51单片机汇编程序库》的详细说明。
简介:下面是一些51单片机汇编语言编程常用到的子程序代码库,点击即可跳到您所需要的汇编程序位置,如要补充请联系我

1、片内RAM初始化子程序

2、片外RAM初始化子程序

3、片外RAM初始化子程序(双字节个单元)

4、内部RAM数据复制程序

5、外部RAM数据复制程序

6、外部RAM数据复制程序

7、外部RAM数据复制到内部RAM程序

8、限幅滤波程序

9、中位值滤波程序

10、N点算术平均滤波

11、N点加权平均滤波

12、一阶加权滞后滤波程序

13、双字节取补程序

14、N节取补程序

15、双字节无符号数加法程序

16、N字节无符号数加法程序

17、双字节无符号数减法程序

18、N字节无符号数减法程序

19、单字节无符号数乘法程序

20、单字节无符号数乘法程序

21、单字节无符号数乘法程序

22、双字节无符号数乘法程序

23、双字节无符号数乘法程序

24、N字节无符号数乘法程序

25、单字节无符号除法程序

26、单字节无符号除法程序

27、双字节无符号除法程序

28、N字节无符号除法程序(组合)

29、N字节无符号除法程序

30、N字节数据左移程序

31、原码有符号双字节减法程序

32、原码有符号双字节加法程序

33、原码有符号双字节乘法程序

34、原码有符号双字节除法程序

35、单字节顺序查找程序

36、单字节顺序查找程序

37、双字节字符串顺序查找程序

38、双字节字符串顺序查找程序

39、N字节字符串顺序查找程序

40、单字节最值查找程序

41、浮点数顺序查找程序

42、浮点数最值查找程序

43、单字节折半查找程序

片内RAM初始化子程序

IBCLR :MOV A,R0

MOV R1,A

CLR A

IBC1 :MOV @R1,A

INC R1

DJNZ R7,IBC1

RET

;片外RAM初始化子程序

EBCLR1 :MOV A,ADDPL

MOV DPL,A

MOV A,ADDPH

MOV DPH,A

CLR C

EBC11 :MOVX @DPTR,A

INC DPTR

DJNZ R7,EBC11

RET

片外RAM初始化子程序(双字节个单元)

EBCLR2 :MOV A,ADDPL

MOV DPL,A

MOV A,ADDPH

MOV DPH,A

MOV A,R7

JZ EBC21

INC R6

EBC21 :CLR A

MOVX @DPTR,A

INC DPTR

DJNZ R7,EBC21

DJNZ R6,EBC21

RET

内部RAM数据复制程序

;入口 :R0,R7

;占用资源:A

;堆栈需求:2字节

;出口 :R1

IBMOV :MOV A,R0

ADD A,R7

MOV R0,A

MOV A,R1

ADD A,R7

MOV R1,A

IBM1 :DEC R0

DEC R1

MOV A,@R0

MOV @R1,A

DJNZ R7,IBM1

RET

外部RAM数据复制程序

;入口 :ADDPH,ADDPL,R7

;占用资源:ACC

;堆栈需求:2字节

;出口 :R0,R1

EBMOV1 :MOV A,ADDPL

ADD A,R7

MOV DPL,A

CLR A

ADDC A,ADDPH

MOV DPH,A

MOV A,R7

ADD A,R1

XCH A,R0

ADDC A,#00H

MOV P2,A

EBM11 :DEC R0

CJNE R0,#0FFH,EBM12

DEC P2

EBM12 :DEC DPL

MOV A,DPL

CJNE A,#0FFH,EBM13

DEC DPH

EBM13 :MOVX A,@R0

MOVX @DPTR,A

DJNZ R7,EBM11

RET

外部RAM数据复制程序

;入口 :ADDPH,ADDPL,R6,R7

;占用资源:ACC

;堆栈需求:2字节

;出口 :R0,R1

EBMOV2 :MOV A,ADDPL

ADD A,R7

MOV DPL,A

MOV A,R6

ADDC A,ADDPH

MOV DPH,A

MOV A,R7

ADD A,R1

XCH A,R0

ADDC A,R6

MOV P2,A

MOV A,R7

JZ EBM21

INC R6

EBM21 :DEC R0

CJNE R0,#0FFH,EBM22

DEC P2

EBM22 :DEC DPL

MOV A,DPL

CJNE A,#0FFH,EBM23

DEC DPH

EBM23 :MOVX A,@R0

MOVX @DPTR,A

DJNZ R7,EBM21

DJNZ R6,EBM21

RET

外部RAM数据复制到内部RAM程序

;入口 :ADDPH,ADDPL,R7

;占用资源:ACC

;堆栈需求:2字节

;出口 :R0

ITEMOV :MOV A,ADDPL

ADD A,R7

MOV DPL,A

MOV A,ADDPH

ADDC A,#00H

MOV DPH,A

MOV A,R0

ADD A,R7

MOV R0,A

ITEM1 :DEC R0

DEC DPL

MOV A,DPL

CJNE A,#0FFH,ITEM2

DEC DPH

ITEM2 :MOVX A,@DPTR

MOV @R0,A

DJNZ R7,ITEM1

RET

限幅滤波程序

;入口 :A,SDAT,DELTY

;占用资源:B

;堆栈需求:2字节

;出口 :A

JUGFILT :MOV B,A

CLR C

SUBB A,SDAT

JNC JUGFT1

CPL A

INC A

JUGFT1 :SETB A

SUBB A,#DELTY

JNC JUGFT3

MOV A,SDAT

RET

JUGFT3 :MOV A,B

MOV SDAT,A

RET

中位值滤波程序

;入口 :ADDPH,ADDPL,N

;占用资源:ESELSORT

;堆栈需求:4字节

;出口 :A

MEDFILT :LCALL ESELSORT

MOV A,N

CLR C

RRC A

ADD A,ADDPL

MOV DPL,A

MOV A,ADDPH

MOV DPH,A

JNC MEDFT1

INC DPH

MEDFT1 :MOVX A,@DPTR

RET

N点算术平均滤波

;入口 :ADDPH,ADDPL,N

;占用资源:B,R3,R4

;堆栈需求:2字节

;出口 :A

AVFILT :MOV A,ADDPL

MOV DPL,A

MOV A,ADDPH

MOV DPH,A

CLR A

MOV R3,A

MOV R4,A

MOV R7,N

AVFT1 :MOVX A,@DPTR

INC DPTR

ADD A,R4

MOV R4,A

JNC AVFT2

INC R3

AVFT2 :DJNZ R7,AVFT1

MOV R7,N

MOV R2,#00H

LCALL NDIV31

MOV A,R4

RET

N点加权平均滤波

;入口 :ADDPH,ADDPL,N

;占用资源:B,R3,R4

;堆栈需求:2字节

;出口 :A

QAVFILT :CLR A

MOV R3,A

MOV R4,A

MOV R7,N

MOV P2,ADDPH

MOV R1,ADDPL

MOV DPTR,#QAVTAB

QAVFT1 :MOVC A,@A+DPTR

MOV B,A

MOVX A,@R1

INC DPTR

INC R1

MUL AB

ADD A,R4

MOV R4,A

MOV A,B

ADDC A,R3

MOV R3,A

DJNZ R7,QAVFT1

MOV A,R4

JNB ACC.7,QAVFT2

INC R3

QAVFT2 :MOV A,R3

RET

QAVTAB :DB

一阶加权滞后滤波程序

;入口 :A,DELTY

;占用资源:B,R3,R4

;堆栈需求:2字节

;出口 :A

BQFILT :MOV B,A

CLR A

MOV DPTR,#ABTAB

MOVC A,@A+DPTR

MUL AB

MOV R4,A

MOV R3,B

MOV A,#01H

MOVC A,@A+DPTR

MOV B,DELTY

MUL AB

ADD A,R4

MOV R4,A

MOV A,B

ADDC A,R3

MOV R3,A

MOV A,R4

JNB ACC.7,FT1

INC R3

FT1 :MOV A,R3

MOV DELTY,A

RET

BQTAB :DB 80H,80H

双字节取补程序 /(R3R4)=(R3R4)

;入口 :R3,R4

;占用资源:ACC

;堆栈需求:2字节

;出口 :R3,R4

CMPT :MOV A,R4

CPL A

ADD A,#01H

MOV R4,A

MOV A,R3

CPL A

ADDC A,#00H

MOV R3,A

RET

N节取补程序 /([R0])=([R0])

;入口 :R0,R7

;占用资源:ACC,B

;堆栈需求:2字节

;出口 :R0

NCMPTN :MOV B,R0

SETB C

NCPT1 :MOV A,@R0

CPL A

ADDC A,#00H

MOV @R0,A

INC R0

DJNZ R7,NCPT1

MOV R0,B

RET

双字节无符号数加法程序 (R3R4+R6R7)=(R3R4)

;入口 :R3,R4,R6,R7

;占用资源:ACC

;堆栈需求:2字节

;出口 :R3,R4,CF

NADD :MOV A,R4

ADD A,R7

MOV R4,A

MOV A,R3

ADDC A,R6

MOV R3,A

RET

N字节无符号数加法程序 ([R0]+[R1])=([R0])

;入口 :R0,R1,R7

;占用资源:ACC,B

;堆栈需求:2字节

;出口 :R0,CF

NADDN :MOV B,R0

CLR C

NADN1 :MOV A,@R0

ADDC A,@R1

MOV @R0,A

INC R0

INC R1

DJNZ R7,NADN1

MOV R0,B

RET

双字节无符号数减法程序 (R3R4-R6R7)=(R3R4)

;入口 :R3,R4,R6,R7

;占用资源:ACC

;堆栈需求:2字节

;出口 :R3,R4

NSUB :MOV A,R4

CLR C

SUBB A,R7

MOV R4,A

MOV A,R3

SUBB A,R6

MOV R3,A

RET

N字节无符号数减法程序 ([R0]-[R1])=([R0])

;入口 :R0,R1,R7

;占用资源:ACC,B

;堆栈需求:2字节

;出口 :R0,CF

NSUBN :MOV B,R0

MOV R7,N

CLR C

NSUBN1 :MOV A,@R0

SUBB A,@R1

MOV @R0,A

INC R0

INC R1

DJNZ R7,NSUBN1

MOV R0,B

RET

单字节无符号数乘法程序 (R3R4*R7)=(R2R3R4)

;入口 :R3,R4,R7

;占用资源:ACC,B

;堆栈需求:2字节

;出口 :R2,R3,R4

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

单字节无符号数乘法程序 (R2R3R4*R7)=(R5R2R3R4)

;入口 :R2,R3,R4,R6,R7

;占用资源:ACC,B

;堆栈需求:2字节

;出口 :R5,R2,R3,R4

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

XCH A,R2

MOV B,R7

MUL AB

ADD A,R2

MOV R2,A

CLR A

ADDC A,B

MOV R5,A

CLR OV

RET

单字节无符号数乘法程序 (R5R2R3R4*R7)=(R7R5R2R3R4)

;入口 :R5,R2,R3,R4,R7

;占用资源:ACC,B

;堆栈需求:2字节

;出口 :R7,R5,R2,R3,R4

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

XCH A,R2

MOV B,R7

MUL AB

ADD A,R2

MOV R2,A

CLR A

ADDC A,B

XCH A,R5

MOV B,R7

MUL AB

ADD A,R5

MOV R5,A

CLR A

ADDC A,B

MOV R7,A

CLR OV

RET

双字节无符号数乘法程序 (R3R4*R6R7)=(R5R2R3R4)

;入口 :R3,R4,R6,R7

;占用资源:ACC,B

;堆栈需求:2字节

;出口 :R5,R2,R3,R4

NMUL22 :MOV A,R4

MOV B,R7

MUL AB

XCH A,R4

MOV R5,B

MOV B,R6

MUL AB

ADD A,R5

MOV R5,A

CLR A

ADDC A,B

MOV R2,A

MOV A,R3

MOV B,R7

MUL AB

ADD A,R5

MOV R5,A

MOV A,B

ADDC A,R2

MOV R2,A

CLR A

ADDC A,#00H

XCH A,R3

MOV B,R6

MUL AB

ADD A,R2

MOV R2,A

MOV A,B

ADDC A,R3

XCH A,R5

MOV R3,A

CLR OV

RET

双字节无符号数乘法程序 (R2R3R4*R6R7)=(R1R5R2R3R4)

;入口 :R2,R3,R4,R6,R7

;占用资源:ACC,B

;堆栈需求:2字节

;出口 :R1,R5,R2,R3,R4

NMUL32 :MOV A,R4

MOV B,R7

MUL AB

XCH A,R4

MOV R5,B

MOV B,R6

MUL AB

ADD A,R5

MOV R5,A

CLR A

ADDC A,B

MOV R1,A

MOV A,R3

MOV B,R7

MUL AB

ADD A,R5

MOV R5,A

MOV A,B

ADDC A,R1

MOV R1,A

CLR A

ADDC A,#00H

XCH A,R3

MOV B,R6

MUL AB

ADD A,R1

MOV R1,A

MOV A,B

ADDC A,R3

XCH A,R5

MOV R3,A

MOV A,R2

MOV B,R7

MUL AB

ADD A,R1

MOV R1,A

MOV A,B

ADDC A,R5

MOV R5,A

CLR A

ADDC A,#00H

XCH A,R2

MOV B,R6

MUL AB

ADD A,R5

MOV R5,A

MOV A,B

ADDC A,R2

XCH A,R1

MOV R2,A

CLR OV

RET

N字节无符号数乘法程序 ([R0]*[R1])=([R0])

;入口 :R0,R1,M,N

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

;堆栈需求:2字节

;出口 :R0

NMULMN :MOV A,M

ADD A,R0

MOV R5,A

XCH A,R1

XCH A,R5

ADD A,N

XCH A,R0

MOV R6,A

MOV B,M

MOV NCNT,B

NMLMN1 :DEC R0

DEC R1

CLR A

XCH A,@R1

MOV @R0,A

DJNZ NCNT,NMLMN1

MOV NCNT,B

NMLMN2 :CLR A

XCH A,@R0

MOV R2,A

MOV A,R6

MOV R0,A

MOV A,R5

MOV R1,A

MOV R7,N

CLR C

NMLMN3 :MOV A,R2

MOV B,@R1

INC R1

MUL AB

ADDC A,@R0

MOV @R0,A

INC R0

MOV A,B

ADDC A,@R0

MOV @R0,A

DJNZ R7,NMLMN3

INC R0

INC R6

DJNZ NCNT,NMLMN2

MOV A,R0

CLR C

SUBB A,M

SUBB A,N

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

单字节无符号除法程序 (R5R2R3R4/R7)=(R5)R2R3R4 余数R7

;入口 :R2,R3,R4,R7

;占用资源:ACC,B,F0

;堆栈需求:3字节

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

NDIV41 :MOV A,R5

MOV B,R7

DIV AB

PUSH A

MOV R5,B

MOV B,#18H

NDV411 :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 A,R5

RLC A

MOV R5,A

MOV F0,C

CLR C

SUBB A,R7

JB F0,NDV412

JC NDV413

NDV412 :MOV R5,A

INC R4

NDV413 :DJNZ B,NDV411

POP A

CLR OV

JZ NDV414

SETB OV

NDV414 :XCH A,R5

MOV R7,A

RET

双字节无符号除法程序 (R5R2R3R4/R6R7)=(R2)R3R4 余数R6R7

;入口 :R5,R2,R3,R4,R6,R7

;占用资源:ACC,B,F0

;堆栈需求:4字节

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

NDIV42 :MOV A,R1

PUSH A

MOV B,#00H

NDV421 :MOV A,R2

CLR C

SUBB A,R7

MOV R1,A

MOV A,R5

SUBB A,R6

JC NDV422

MOV R5,A

MOV A,R1

MOV R2,A

INC B

SJMP NDV421

NDV422 :PUSH B

MOV B,#10H

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

XCH A,R5

RLC A

XCH A,R5

MOV F0,C

CLR C

SUBB A,R7

MOV R1,A

MOV A,R5

SUBB A,R6

JB F0,NCV424

JC NDV425

NCV424 :MOV R5,A

MOV A,R1

MOV R2,A

INC R4

NDV425 :DJNZ B,NDV423

POP A

CLR OV

JNZ NDV426

SETB OV

NDV426 :XCH A,R2

MOV R7,A

MOV A,R5

MOV R6,A

POP A

MOV R1,A

RET

N字节无符号除法程序(组合) ([R0]/[R1])=([R0])

;入口 :R0,R1,M,N

;占用资源:ACC,R2,R3,R4,R5,R7,NCNT,F0,NADDN,NSUBBN,NRLCN

;堆栈需求:4字节

;出口 :R0

;NDIVMN :MOV A,M

CLR C

SUBB A,N

MOV NCNT,A

ADD A,R0

MOV R4,A

XCH A,R0

MOV R3,A

MOV A,R1

MOV R5,A

MOV R2,#00H

NDVMN1 :MOV R7,N

LCALL NSUBN

MOV A,R5

MOV R1,A

JC NDVMN2

INC R2

SJMP NDVMN1

NDVMN2 :MOV R7,N

LCALL NADDN

MOV A,NCNT

SWAP A

RR A

MOV NCNT,A

NDVMN3 :MOV A,R3

MOV R0,A

MOV R7,M

LCALL NRLCN

MOV F0,C

MOV A,R4

MOV R0,A

MOV A,R5

MOV R1,A

MOV R7,N

LCALL NSUBN

JB F0,NDVMN4

JC NDVMN5

NDVMN4 :MOV A,R3

MOV R0,A

INC @R0

SJMP NDVMN6

NDVMN5 :MOV A,R5

MOV R1,A

MOV R7,N

LCALL NADDN

NDVMN6 :DJNZ NCNT,NDVMN3

MOV A,R4

MOV R1,A

MOV A,R2

MOV @R1,A

MOV A,R3

MOV R0,A

RET

N字节无符号除法程序(集成) ([R0]/R[1])=([R0])

;入口 :R0,R1,M,N

;占用资源:ACC,R2,R3,R4,R5,R7,F0

;堆栈需求:2字节

;出口 :R0

NDIVMN :MOV A,M

CLR C

SUBB A,N

MOV B,A

ADD A,R0

MOV R4,A

XCH A,R0

MOV R3,A

MOV A,R1

MOV R5,A

MOV R2,#00H

NDVMN1 :MOV R7,N

CLR C

NDVMN2 :MOV A,@R0

SUBB A,@R1

MOV @R0,A

INC R0

INC R1

DJNZ R7,NDVMN2

MOV A,R4

MOV R0,A

MOV A,R5

MOV R1,A

JC NDVMN3

INC R2

SJMP NDVMN1

NDVMN3 :MOV R7,N

CLR C

NDVMN4 :MOV A,@R0

ADDC A,@R1

MOV @R0,A

INC R0

INC R1

DJNZ R7,NDVMN4

MOV A,#08H

MUL AB

MOV B,A

NDVMN5 :MOV A,R3

MOV R0,A

MOV R7,M

CLR C

NDVMN6 :MOV A,@R0

RLC A

MOV @R0,A

INC R0

DJNZ R7,NDVMN6

MOV F0,C

MOV A,R4

MOV R0,A

MOV A,R5

MOV R1,A

MOV R7,N

CLR C

NDVMN7 :MOV A,@R0

SUBB A,@R1

MOV @R0,A

INC R0

INC R1

DJNZ R7,NDVMN7

JB F0,NDVMNB

JC NDVMN8

NDVMNB :MOV A,R3

MOV R0,A

INC @R0

SJMP NDVMNA

NDVMN8 :MOV R7,N

MOV A,R4

MOV R0,A

MOV A,R5

MOV R1,A

CLR C

NDVMN9 :MOV A,@R0

ADDC A,@R1

MOV @R0,A

INC R0

INC R1

DJNZ R7,NDVMN9

NDVMNA :DJNZ B,NDVMN5

MOV A,M

CLR C

SUBB A,N

ADD A,R3

MOV R1,A

MOV A,R2

MOV @R1,A

MOV A,R3

MOV R0,A

RET

N字节数据左移程序 RLC([R0])=(CF[R0])

;入口 :R0,R7

;占用资源:ACC,B

;堆栈需求:2字节

;出口 :R0,CF

NRLCN :MOV B,R0

CLR C

NRLN1 :MOV A,@R0

RLC A

MOV @R0,A

INC R0

DJNZ R7,NRLN1

MOV R0,B

RET

原码有符号双字节减法程序 (R3R

提醒:《51单片机汇编程序库》最后刷新时间 2024-03-14 01:09:49,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《51单片机汇编程序库》该内容的真实性请自行鉴别。