电源滤波电容怎么选择,电源滤波电容如何选取,掌握其精髓与方法
2023-11-28
很多朋友对51单片机的汇编语言实例,51单片机的汇编程序库不是很了解,每日小编刚好整理了这方面的知识,今天就来带大家一探究竟。
以下是51单片机汇编语言编程中常用的一些子程序代码库1、片内ram初始化子程序2、片外RAM初始化子程序3、片外RAM初始化子程序(双字节单位)4、内部RAM数据复制程序5、外部RAM数据复制程序:1023外部ram数据复制程序7、外部RAM数据复制到内部RAM程序8、限幅滤波程序9、中值滤波程序10、N点算术平均滤波。
11、N点加权平均滤波12、一阶加权滞后滤波程序13、双字节补码程序14、N段补码程序15、双字节无符号数加法程序16、N字节无符号数加法程序1。8、N字节无符号数减法程序19、单字节无符号数乘法程序20、单字节无符号数乘法程序21、单字节无符号数乘法程序22、双字节无符号数乘法程序
23、双字节无符号数乘法程序24、N字节无符号数乘法程序25、单字节无符号除法程序27、双字节无符号除法程序28、N字节无符号除法程序字节无符号除法程序30、N字节数据左移程序3010-310
34、原码有符号双字节除法程序35、单字节序列查找程序36、单字节序列查找程序37、双字节字符串序列查找程序38、双字节字符串序列查找程序39、N字节字符串序列查找程序。单字节最大搜索程序41、浮点数序列搜索程序42、浮点数最大搜索程序43、单字节半搜索程序;片内RAM初始化子程序IBCLR: MOVA,R0MOV R1,ACLR A
IBC1:MOV @R1,AINC R1DJNZ R7,IBC1RET片外关于RAMInitialisierung subprozedurenebclr 1:MOV A,阿德普莫夫DPL,阿莫夫A,阿德普莫夫DPH,ACLR CEBC11:MOVX @DPTR,AINC DPTRDJNZ R7,EBC11RET片外关于RAMInitialisierung sub pereduren(Doppelte einheitenebclr 2:MOV A,阿德普莫夫DPL,阿莫夫A,阿德普莫夫DPH,阿莫夫A,R7JZ ebc 21 Inc r 6 ebc 21:CLR AMOVX @ DPTR,AINC DPTRDJNZ R7,EBC21DJNZ R6,EBC21RET内部关于拉姆达滕-Replikationsverfahren;入口R0,R7;使忙碌资源:A
;堆栈Bedrfnisse: 2字节;出口R1IBMOV:MOV A,R0ADD A,R7MOV R0,阿莫夫A,R1ADD A,R7MOV R1,AIBM1:DEC R0DEC R1MOV A,@R0MOV @R1,ADJNZ R7,IBM1RET外部关于拉姆达滕-Replikationsverfahren;入口ADDPH,ADDPL,r7职业资源:ACC堆栈Bedrfnisse: 2字节;出口R0、R1EBMOV1:MOV A、ADDPLADD A、R7MOV DPL、ACLR AADDC A、ADDPHMOV DPH、阿莫夫A、R7ADD A、R1XCH A、R0ADDC A、#00HMOV P2、AEBM11:DEC R0CJNE R0、#0FFH、EBM12DEC P2
EBM12:DEC DPLMOV A,DPLCJNE A,#0FFH,EBM13DEC DPHEBM13:MOVX A,@R0MOVX @DPTR,ADJNZ R7,EBM11RET外部关于拉姆达滕-Replikationsverfahren;入口ADDPH,ADDPL,R6,r7占领资源:ACC堆栈Bedrfnisse: 2字节;出口R0、R1EBMOV2:MOV A、ADDPLADD A、R7MOV DPL、AMOV A、R6ADDC A、ADDPH DPH、AMOV A、R7ADD A、R1XCH A、R0ADDC A、R6MOV P2、AMOV A、r7 JZ EBM 21 Inc R6 EBM 21:DEC R0 cjne R0、#0FFH、EBM22DEC P2EBM22:DEC DPLMOV A、DPL
CJNE A,#0FFH,EBM23DEC DPHEBM23:MOVX A,@R0MOVX @DPTR,ADJNZ R7,EBM21DJNZ R6,EBM21RET外部关于RAMReplizieren von Daten实习生关于随机存取存储程序;入口ADDPH,ADDPL,r7占用资源:ACC堆栈Bedrfnisse: 2字节;出口R0ITEMOV:MOV A,阿德普拉德A,R7MOV DPL,阿莫夫A,阿德帕德C A,#00HMOV DPH,阿莫夫A,R0ADD A,R7MOV R0,AITEM1:DEC R0DEC DPLMOV A,DPLCJNE A,#0FFH,ITEM2DEC DPHITEM2:MOVX A,@DPTRMOV @R0,ADJNZ R7,ITEM1RET格伦兹-过滤器有限公司
;入口:A、SDAT、德尔蒂;使忙碌资源:B;堆栈Bedrfnisse: 2字节;出口:AJUGFILT :MOV B,ACLR CSUBB A,SDATJNC jug ft1 CPL AINC ajugft 1:SETB ASUBB A,#DELTYJNC JUGFT3MOV A,SDATRETJUGFT3:MOV A,BMOV SDAT,ARET;中值滤波器verfahren;入口ADDPH,ADDPL,N;使忙碌资源:ESELSORT堆栈Bedrfnisse:4字节;出口阿梅德菲特:埃尔索尔特莫夫A,NCLR CRRC AADD A,阿德普莫夫DPL A,阿莫夫A,阿德普莫夫DPH,阿金克梅德夫特1尼克DPH
MEDFT1:MOVX A,@ DPTRRETnArithmetische Filterdurchschnitt;入口ADDPH,ADDPL,N;使忙碌资源b、R3、R4;堆栈Bedrfnisse: 2字节;出口AAVFILT:MOV A,阿德普莫夫DPL,阿莫夫A,阿德普莫夫DPH,ACLR阿莫夫R3,阿莫夫R4,阿莫夫R7,NAVFT1:MOVX A,@DPTRINC DPTRADD A,R4MOV R4,AJNC AVFT2INC R3AVFT2:DJNZ R7,AVFT1MOV R7,NMOV R2,#00HLCALL NDIV31MOV A,R4RETnDurchschnittsgewichtete过滤器;入口ADDPH,ADDPL,N;使忙碌资源b,R3,R4
MOV DPTR,#ABTABMOVC A,@A DPTRMUL ABMOV R4,AMOV R3,BMOV A,#01HMOVC A,@A DPTRMOV B,DELTYMUL ABADD A,R4MOV R4,AMOV A,BADDC A,R3MOV R3,AMOV A,R4JNB ACC.7,FT1INC R3FT1:MOV A,R3MOV DELTY,ARETBQTAB:DB 80H,80H;双字节补丁/(R3R4)=(R3R4)入口R3,R4;职业资源:ACC堆栈Bedrfnisse: 2字节;出口R3,R4CMPT:MOV A,R4CPL AADD A,#01HMOV R4,AMOV A,R3CPL AADDC A,#00HMOV R3,ARET
;第n节补码程序/([r0])=([r0]);入口:R0,R7;占用资源:ACC,b;堆栈要求:2字节;出口:r0ncmptn: movb,r0setb cncpt1: mova,@ r0plaaddca,#00HMOV @R0,aincr0rdjnzr7,NCPT1MOV R0,BRET;双字节无符号数加法程序(R3 R4 r6r 7)=(R3 R4);入口:R3,R4,R6,R7;占用的资源:ACC堆栈要求:2字节;出口:R3,R4,CFNADD :MOV A,R4ADD A,R7MOV R4,AMOV A,R3ADDC A,R6MOV R3,ARET。
;n字节无符号数加法程序([r0][R1])=([r0]);入口:R0,R1,R7;占用资源:ACC,b;堆栈要求:2字节;退出:R0,cfnaddn: movb,r0clcnadn1: mova,@R0ADDC A,@R1MOV @R0,aincr0nicr1djnzr7,nadn1 mov0,BRET;双字节无符号数减法程序(r3r 4-r6r 7)=(r3r 4);入口:R3,R4,R6,R7;占用的资源:ACC堆栈要求:2字节;出口:R3,R4NSUB :MOV A,R4CLR CSUBB A,R7MOV R4,AMOV A,R3。
SUBB A,R6MOV R3,ARET;n字节无符号数减法程序([r0]-[R1])=([r0]);入口:R0,R1,R7;占用资源:ACC,b;堆栈要求:2字节;退出:R0,cfnsubn: MOVB,R0MOV R7,ncrcsnubn 1:MOVA,@R0SUBB A,@R1MOV @R0,AINC R0INC R1DJNZ R7,NSUBN1MOV R0,BRET;单字节无符号数乘法程序(r3r 4 * R7)=(r2r3r 4);入口:R3,R4,R7;占用资源:ACC,b;堆栈要求:2字节;出口:R2,R3,R4 nmul21: MOVA,R4。
MOV B、R7MUL ABMOV R4、阿莫夫A、BXCH A、R3MOV B、R7MUL ABADD A、R3MOV R3、ACLR AADDC A、BMOV R2、ACLR ov ret;一个字节程序,用于一个Zeichen(R2R3R4*R7)=(R5R2R3R4)入口R2,R3,R4,R6,r7占领资源:ACC,B;堆栈Bedrfnisse: 2字节;出口R5、R2、R3、R4NMUL31:MOV A、R4MOV B、R7MUL ABMOV R4、阿莫夫A、BXCH A、R3MOV B、R7MUL ABADD A、R3MOV R3、ACLR AADDC A、BXCH A、R2MOV B、R7MUL ABADD A、R2MOV R2、ACLR A
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/R1)=(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)=(CFR0)
;入口: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
;原码有符号双字节减法程序(R3R4-R6R7)=R3R4
;入口:R3,R4,R6,R7
;占用资源:ACC,DADD
;堆栈需求:6字节
;出口:R3,R4,OV
DSUB :MOV A,R6
CPL ACC.7
MOV R6,A
LCALL DADD
RET
;原码有符号双字节加法程序(R3R4+R6R7)=R3R4
;入口:R3,R4,R6,R7
;占用资源:ACC,SR0,NADD,NSUB,CMPT
;堆栈需求:4字节
;出口:R3,R4,OV
DADD :MOV A,R3
MOV C,ACC.7
MOV SR0,C
XRL A,R6
MOV C,ACC.7
MOV A,R3
CLR ACC.7
MOV R3,A
MOV A,R6
CLR ACC.7
MOV R6,A
JC DAB2
LCALL NADD
MOV A,R3
JB ACC.7,DABE
DAB1 :MOV C,SR0
MOV ACC.7,C
MOV R3,A
CLR OV
RET
DABE :SETB OV
RET
DAB2 :LCALL NSUB
MOV A,R3
JNB ACC.7,DAB1
LCALL CMPT
CPL SR0
SJMP DAB1
;原码有符号双字节乘法程序(R3R4*R6R7)=(R5R2R3R4)
;入口:R3,R4,R6,R7
;占用资源:ACC,SR0,NMUL22
;堆栈需求:4字节
;出口:R5,R2,R3,R4
IMUL :MOV A,R3
XRL A,R6
MOV C,ACC.7
MOV SR0,C
MOV A,R3
CLR ACC.7
MOV R3,A
MOV A,R6
CLR ACC.7
MOV R6,A
LCALL NMUL22
MOV A,R5
MOV C,SR0
MOV ACC.7,C
MOV R5,A
RET
;原码有符号双字节除法程序(R5R2R3R4/R6R7)=(R3R4) 余数(R6R7)
;入口:R5,R2,R3,R4
;占用资源:ACC,SR0,NDIV42
;堆栈需求:6字节
;出口:R3,R4,R6,R7,OV
IDIV :MOV A,R5
XRL A,R6
MOV C,ACC.7
MOV SR0,C
MOV A,R5
CLR ACC.7
MOV R5,A
MOV A,R6
CLR ACC.7
MOV R6,A
LCALL NDIV42
MOV A,R3
JB ACC.7,IDIVE
JB OV,IDIVE
MOV C,SR0
MOV ACC.7,C
MOV R3,A
RET
IDIVE :SETB OV
RET
;单字节顺序查找程序
;入口 :R0,R1,A,R7
;占用资源:B
;堆栈需求:2字节
;出口 :R0,R1,A
FINDB1 :MOV B,A
MOV DPL,R1
MOV DPH,R0
FINDB11 :MOVX A,@DPTR
CJNE A,B,FINDB12
MOV R1,DPL
MOV R0,DPH
CLR A
RET
FINDB12 :INC DPTR
DJNZ R7,FINDB11
MOV A,#0FFH
RET
;单字节顺序查找程序
;入口 :R0,R1,A,R6,R7
;占用资源:B
;堆栈需求:2字节
;出口 :R0,R1,A
FINDB2 :MOV B,A
MOV DPL,R1
MOV DPH,R0
MOV A,R7
JZ FINDB21
INC R6
FINDB21 :MOVX A,@DPTR
CJNE A,B,FINDB22
MOV R1,DPL
MOV R0,DPH
CLR A
RET
FINDB22 :INC DPTR
DJNZ R7,FINDB21
DJNZ R6,FINDB21
MOV A,#0FFH
RET
;双字节字符串顺序查找程序
;入口 :R0,R1,R3,R4,R7
;占用资源:ACC,B
;堆栈需求:2字节
;出口 :R0,R1,A
FINDS1 :MOV DPL,R1
MOV DPH,R0
FINDS11 :MOVX A,@DPTR
INC DPTR
CLR C
SUBB A,R4
JNZ FINDS12
MOVX A,@DPTR
SUBB A,R3
JNZ FINDS12
MOV A,DPL
CLR C
SUBB A,#01H
MOV R1,A
MOV A,DPH
SUBB A,#00H
MOV R0,A
CLR A
RET
FINDS12 :DJNZ R7,FINDS11
MOV A,#0FFH
RET
;双字节字符串顺序查找程序
;入口 :R0,R1,R3,R4,R6,R7
;占用资源:ACC,B
;堆栈需求:2字节
;出口 :R0,R1,A
FINDS2 :MOV DPL,R1
MOV DPH,R0
MOV A,R7
JZ FINDS21
INC R6
FINDS21 :MOVX A,@DPTR
INC DPTR
CLR C
SUBB A,R4
JNZ FINDS22
MOVX A,@DPTR
SUBB A,R3
JNZ FINDS22
MOV A,DPL
CLR C
SUBB A,#01H
MOV R1,A
MOV A,DPH
SUBB A,#00H
MOV R0,A
CLR A
RET
FINDS22 :DJNZ R7,FINDS21
DJNZ R6,FINDS21
MOV A,#0FFH
RET
;N字节字符串顺序查找程序
;入口 :ADDPH,ADDPL,R0,R6,R7,N
;占用资源:ACC,B,R2,NCNT
;堆栈需求:2字节
;出口 :ADDPH,ADDPL,A
FINDN :MOV A,R0
MOV R2,A
MOV A,ADDPL
MOV DPL,A
MOV A,ADDPH
MOV DPH,A
MOV A,R7
JZ FINDN1
INC R6
FINDN1 :MOV A,R2
MOV R0,A
MOV A,N
MOV NCNT,A
FINDN2 :MOVX A,@DPTR
CLR C
SUBB A,@R0
JNZ FINDN3
INC DPTR
INC R0
DJNZ NCNT,FINDN2
MOV A,DPL
CLR C
SUBB A,N
MOV ADDPL,A
MOV A,DPH
SUBB A,#00H
MOV ADDPH,A
CLR A
RET
FINDN3 :CLR C
MOV A,R0
SUBB A,R2
JNZ FINDN4
INC DPTR
FINDN4 :DJNZ R7,FINDN1
DJNZ R6,FINDN1
MOV A,#0FFH
RET
;单字节最值查找程序
;入口 :R0,R1,R6,R7
;占用资源:ACC,B
;堆栈需求:2字节
;出口 :R0(最大值),R1(最小值),R2,R3,R4,R5
FMAMIB :MOV DPL,R1
MOV DPH,R0
MOVX A,@DPTR
MOV R0,A
MOV R1,A
MOV A,DPL
MOV R3,A
MOV R5,A
MOV A,DPH
MOV R2,A
MOV R4,A
MOV A,R7
JZ FMMB1
INC R6
FMMB1 :MOVX A,@DPTR
MOV B,A
SETB C
SUBB A,R0
JC FMMB2
MOV R0,B
MOV R3,DPL
MOV R2,DPH
SJMP FMMB3
FMMB2 :MOV A,B
CLR C
SUBB A,R1
JNC FMMB3
MOV R1,B
MOV R5,DPL
MOV R4,DPH
FMMB3 :INC DPTR
DJNZ R7,FMMB1
DJNZ R6,FMMB1
RET
;浮点数顺序查找程序
;入口 :R0,R1,R2,R3,R4,R6,R7
;占用资源:B,NCNT,FCMP
;堆栈需求:2字节
;出口 :R0,R1,A
FINDF :MOV DPL,R1
MOV DPH,R0
MOV A,R7
MOV B,A
MOV NCNT,R6
JZ FINDF1
INC NCNT
FINDF1 :MOVX A,@DPTR
INC DPTR
MOV R5,A
MOVX A,@DPTR
INC DPTR
MOV R6,A
MOVX A,@DPTR
INC DPTR
MOV R7,A
LCALL FCMP
JNZ FINDF2
MOV A,DPL
CLR C
SUBB A,#03H
MOV R1,A
MOV A,DPH
SUBB A,#00H
MOV R0,A
CLR A
RET
FINDF2 :DJNZ B,FINDF1
DJNZ NCNT,FINDF1
MOV A,#0FFH
RET
;浮点数最值查找程序
;入口 :ADDPH,ADDPL,R6,R7
;占用资源:ACC,B,NCNT,ITEMOV,EBMOV,MOVB,MOVR1,FCMP
;堆栈需求:5字节
;出口 :[R0](最大值),[R1](最小值),R2,R3,R4,R5
FMAMIF :MOV A,ADDPL
MOV R3,A
MOV R5,A
MOV DPL,A
MOV A,ADDPH
MOV R2,A
MOV R4,A
MOV DPH,A
MOV B,R7
MOV R7,#03H
LCALL ITEMOV
MOV R7,#03H
LCALL IBMOV
MOV A,B
JZ FMMF1
INC NCNT
FMMF1 :PUSH B
MOVX A,@DPTR
INC DPTR
MOV R2,A
MOVX A,@DPTR
INC DPTR
MOV R3,A
MOVX A,@DPTR
INC DPTR
MOV R4,A
LCALL MOVR1
LCALL FCMP
JNC FMMF2
MOV A,R0
XCH A,R1
MOV R0,A
LCALL MOVB
MOV R5,DPL
MOV R4,DPH
MOV A,R0
XCH A,R1
MOV R0,A
SJMP FMMF3
FMMF2 :MOV A,R0
XCH A,R1
MOV R0,A
LCALL MOVR1
LCALL FCMP
MOV A,R0
XCH A,R1
MOV R0,A
JZ FMMF3
JC FMMF3
LCALL MOVB
MOV R3,DPL
MOV R2,DPH
FMMF3 :POP B
DJNZ B,FMMF1
DJNZ NCNT,FMMF1
RET
;单字节折半查找程序
;入口 :A,R0,R1,R6,R7
;占用资源:B,R2
;堆栈需求:2字节
;出口 :R0,R1
SEARCHB :MOV B,A
MOV A,R1
ADD A,R7
MOV R7,A
MOV A,R0
ADDC A,R6
MOV R6,A
MOV A,R7
SUBB A,#01H
MOV R7,A
JNC SECH1
DEC R6
SECH1 :MOV A,R7
CLR C
SUBB A,R1
MOV A,R6
SUBB A,R0
JNC SECH2
MOV A,#0FFH
RET
SECH2 :MOV A,R7
ADD A,R1
MOV R2,A
MOV A,R6
ADDC A,R0
RRC A
MOV DPH,A
MOV A,R2
RRC A
MOV DPL,A
MOVX A,@DPTR
CLR C
SUBB A,B
JNC SECH3
INC DPTR
MOV R0,DPH
MOV R1,DPL
SJMP SECH1
SECH3 :JZ SECH5
MOV A,DPL
SUBB A,#01H
MOV R7,A
JNC SECH4
MOV R6,DPH
DEC R6
SECH4 :SJMP SECH1
SECH5 :MOV R0,DPH
MOV R1,DPL
CLR A
RET
以上知识分享希望能够帮助到大家!
版权声明:本站所有作品图文均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系我们
推荐阅读
2023-11-28
2023-11-28
2023-11-28
2023-11-28
2023-11-28
2023-11-28
2023-11-28
2023-11-28
2023-11-28
2023-11-28
2023-11-28
2023-11-28
2023-11-28
栏目热点
电源滤波电容怎么选择,电源滤波电容如何选取,掌握其精髓与方法
LilyGoT手表键盘C3迷你电脑套件
索泰ZBOXEdgeCI342迷你电脑正式上市
谷歌在最新的视频预告片中展示了PixelWatch的独特设计
三星与设计师Juun.J合作推出限量版可折叠产品和配件
从2023年起Fitbit设备将需要Google帐户
TOKKCAMC2+智能WiFi独立日 夜视摄像头
三星正在与全球时尚品牌JUUN.J合作
OnePlusNordWatch的颜色选项通过泄露的渲染揭示
就在第一款Nothing手机发布之前一种新的TWS芽设计浮出水面