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

📄 ¿

📁 该文件里包含了大量的常用经典的程序代码,可以为51编程者带来事半功倍的效果,
💻
📖 第 1 页 / 共 2 页
字号:
;------------------------------------------------;

;****** [单字节十六进制整数转换成单字节BCD码整数] HBCD ;

;入口条件:	待转换的单字节十六进制整数在累加器A中。
;出口信息:	转换后的BCD码整数(十位和个位)仍在累加器A中,百位在R3中。
;影响资源:	PSW、A、B、R3    堆栈需求:  2字节
;调用子程序:   无

HBCD:	MOV	B,#100
	DIV	AB
	MOV	R3,A
	MOV	A,#10
	XCH	A,B
	DIV	AB
	SWAP	A
	ORL	A,B
	RET     
	
;------------------------------------------------;

;****** [双字节十六进制整数转换成双字节BCD整数] HB2 ;	

;入口条件:	待转换的双字节十六进制整数在R6、R7中。
;出口信息:	转换后的三字节BCD码整数在R3、R4、R5中。
;影响资源:	PSW、A、R2~R7    堆栈需求:  2字节
;调用子程序:   无

HB2:	CLR	A
	MOV	R3,A
	MOV	R4,A
	MOV	R5,A
	MOV	R2,#10H
HB3:	MOV	A,R7
	RLC	A
	MOV	R7,A
	MOV	A,R6
	RLC	A
	MOV	R6,A
	MOV	A,R5
	ADDC	A,R5
	DA	A
	MOV	R5,A
	MOV	A,R4
	ADDC	A,R4
	DA	A
	MOV	R4,A
	MOV	A,R3
	ADDC	A,R3
	MOV	R3,A
	DJNZ	R2,HB3
	RET                

;------------------------------------------------;
	
;****** [单字节十六进制小数转换成单字节BCD码小数] HBD ;

;入口条件:	待转换的单字节十六进制小数在累加器A中。
;出口信息:	CY=0时转换后的BCD码小数仍在A中。CY=1时原小数接近整数1。
;影响资源:	PSW、A、B    堆栈需求:  2字节
;调用子程序:   无

HBD:	MOV	B,#100
	MUL	AB
	RLC	A
	CLR	A
	ADDC	A,B
	MOV	B,#10
	DIV	AB
	SWAP	A
	ADD	A,B
	DA	A
	RET     
	
;------------------------------------------------;
	
;****** [双字节十六进制小数转换成双字节BCD码小数] HBD2 ;

;入口条件:	待转换的双字节十六进制小数在R2、R3中。
;出口信息:	转换后的双字节BCD码小数仍在R2、R3中。
;影响资源:	PSW、A、B、R2、R3、R4、R5    堆栈需求:  6字节
;调用子程序:   无

HBD2:	MOV	R4,#4
HBD3:	MOV	A,R3
	MOV	B,#10
	MUL	AB
	MOV	R3,A
	MOV	R5,B
	MOV	A,R2
	MOV	B,#10
	MUL	AB
	ADD	A,R5
	MOV	R2,A
	CLR	A
	ADDC	A,B
	PUSH	ACC
	DJNZ	R4,HBD3
	POP	ACC
	MOV	R3,A
	POP	ACC
	SWAP	A
	ORL	A,R3
	MOV	R3,A
	POP	ACC
	MOV	R2,A
	POP	ACC
	SWAP	A
	ORL	A,R2
	MOV	R2,A
	RET                 

;------------------------------------------------;
	
;****** [单字节BCD码整数转换成单字节十六进制整数] BCDH ;

;入口条件:	待转换的单字节BCD码整数在累加器A中。
;出口信息:	转换后的单字节十六进制整数仍在累加器A中。
;影响资源:	PSW、A、B、R4    堆栈需求:  2字节
;调用子程序:   无
	
BCDH:	MOV	B,#10H
	DIV	AB
	MOV	R4,B
	MOV	B,#10
	MUL	AB
	ADD	A,R4
	RET                         
	
;------------------------------------------------;
	
;****** [双字节BCD码整数转换成双字节十六进制整数] BH2 ;

;入口条件:	待转换的双字节BCD码整数在R2、R3中。
;出口信息:	转换后的双字节十六进制整数仍在R2、R3中。
;影响资源:	PSW、A、B、R2、R3、R4    堆栈需求:  4字节
;调用子程序:   1个 BCDH

BH2:	MOV	A,R3
	LCALL	BCDH
	MOV	R3,A
	MOV	A,R2
	LCALL	BCDH
	MOV	B,#100
	MUL	AB
	ADD	A,R3
	MOV	R3,A
	CLR	A
	ADDC	A,B
	MOV	R2,A
	RET  

;------------------------------------------------;
	
;****** [单字节BCD码小数转换成单字节十六进制小数] BHD ;	

;入口条件:	待转换的单字节BCD码数在累加器A中。
;出口信息:	转换后的单字节十六进制小数仍在累加器A中。
;影响资源:	PSW、A、R2、R3    堆栈需求:  2字节
;调用子程序:    无

BHD:	MOV	R2,#8
BHD0:	ADD	A,ACC
	DA	A
	XCH	A,R3
	RLC	A
	XCH	A,R3
	DJNZ	R2,BHD0
	ADD	A,#0B0H
	JNC	BHD1
	INC	R3
BHD1:	MOV	A,R3
	RET       
	
;------------------------------------------------;
	
;****** [双字节BCD码小数转换成双字节十六进制小数] BHD2 ;

;入口条件:	待转换的双字节BCD码小数在R4、R5中。
;出口信息:	转换后的双字节十六进制小数在R2、R3中。*
;影响资源:	PSW、A、R2~R6    堆栈需求:  2字节
;调用子程序:   无
	
BHD2:	MOV	R6,#10H
BHD3:	MOV	A,R5
	ADD	A,R5
	DA	A
	MOV	R5,A
	MOV	A,R4
	ADDC	A,R4
	DA	A
	MOV	R4,A
	MOV	A,R3
	RLC	A
	MOV	R3,A
	MOV	A,R2
	RLC	A
	MOV	R2,A
	DJNZ	R6,BHD3
	MOV	A,R4
	ADD	A,#0B0H
	JNC	BHD4
	INC	R3
	MOV	A,R3
	JNZ	BHD4
	INC	R2
BHD4:	RET                     

;------------------------------------------------;

;****** [求单字节十六进制无符号数据块的极值] MM *;

;入口条件:	数据块的首址在DPTR中,数据个数在R7中。
;出口信息:	最大值在R6中,地址在R2R3中;最小值在R7中,地址在R4R5中。
;影响资源:	PSW、A、B、R1~R7      堆栈需求:  4字节
;调用子程序:   无

MM:	MOV	B,R7
	MOVX	A,@DPTR
	MOV	R6,A
	MOV	R7,A
	MOV	A,DPL
	MOV	R3,A
	MOV	R5,A
	MOV	A,DPH
	MOV	R2,A
	MOV	R4,A
	MOV	A,B
	DEC	A
	JZ	MME
	MOV	R1,A
	PUSH	DPL
	PUSH	DPH
MM1:	INC	DPTR
	MOVX	A,@DPTR
	MOV	B,A
	SETB	C
	SUBB	A,R6
	JC	MM2
	MOV	R6,B
	MOV	R2,DPH
	MOV	R3,DPL
	AJMP	MM3
MM2:	MOV	A,B
	CLR	C
	SUBB	A,R7
	JNC	MM3
	MOV	R7,B
	MOV	R4,DPH
	MOV	R5,DPL
MM3:	DJNZ	R1,MM1
	POP	DPH
	POP	DPL
MME:	RET

;------------------------------------------------;

;****** [求单字节十六进制有符号数据块的极值] MMS ;

;入口条件:	数据块的首址在DPTR中,数据个数在R7中。
;出口信息:	最大值在R6中, 地址在R2R3中;最小值在R7中,地址在R4R5中。
;影响资源:	PSW、A、B、R1~R7    堆栈需求:  4字节
;调用子程序:   无

MMS:	MOV	B,R7
	MOVX	A,@DPTR
	MOV	R6,A
	MOV	R7,A
	MOV	A,DPL
	MOV	R3,A
	MOV	R5,A
	MOV	A,DPH
	MOV	R2,A
	MOV	R4,A
	MOV	A,B
	DEC	A
	JZ	MMSE
	MOV	R1,A
	PUSH	DPL
	PUSH	DPH
MMS1:	INC	DPTR
	MOVX	A,@DPTR
	MOV	B,A
	SETB	C
	SUBB	A,R6
	JZ	MMS4
	JNB	OV,MMS2
	CPL	ACC.7
MMS2:	JB	ACC.7,MMS4
	MOV	R6,B
	MOV	R2,DPH
	MOV	R3,DPL
	AJMP	MMS7
MMS4:	MOV	A,B
	CLR	C
	SUBB	A,R7
	JNB	OV,MMS6
	CPL	ACC.7
MMS6:	JNB	ACC.7,MMS7
	MOV	R7,B
	MOV	R4,DPH
	MOV	R5,DPL
MMS7:	DJNZ	R1,MMS1
	POP	DPH
	POP	DPL
MMSE:	RET

;------------------------------------------------;

;****** [顺序查找(ROM)单字节表格] FDS1 **********;

;入口条件:	待查找的内容在A中,表格首址在DPTR中,表格的字节数在R7中。
;出口信息:	OV=0时,顺序号在累加器A中;OV=1时,未找到。
;影响资源:	PSW、A、B、R2、R6      堆栈需求:  2字节
;调用子程序:   无

FDS1:	MOV	B,A
	MOV	R2,#0
	MOV	A,R7
	MOV	R6,A
FD11:	MOV	A,R2
	MOVC	A,@A+DPTR
	CJNE	A,B,FD12
	CLR	OV
	MOV	A,R2
	RET
FD12:	INC	R2
	DJNZ	R6,FD11
	SETB	OV
	RET

;------------------------------------------------;
	
;****** [顺序查找(ROM)双字节表格] FDS2 **********;

;入口条件:	查找内容在R4、R5中,表格首址在DPTR中,数据总个数在R7中。
;出口信息:	OV=0时顺序号在累加器A中,地址在DPTR中;OV=1时未找到。
;影响资源:	PSW、A、R2、R6、DPTR    堆栈需求:  2字节
;调用子程序:   无

FDS2:	MOV	A,R7
	MOV	R6,A
	MOV	R2,#0
FD21:	CLR	A
	MOVC	A,@A+DPTR
	XRL	A,R4
	JNZ	FD22
	MOV	A,#1
	MOVC	A,@A+DPTR
	XRL	A,R5
	JNZ	FD22
	CLR	OV
	MOV	A,R2
	RET      
FD22:	INC	DPTR
	INC	DPTR
	INC	R2
	DJNZ	R6,FD21
	SETB	OV
	RET              

;----------------------------------------------------;
	
;****** [对分查找(ROM)单字节无符号增序数据表格] FDD1 ;	

;入口条件:	待查找的内容在累加器A中,表格首址在DPTR中,字节数在R7中。
;出口信息:	OV=0 时,顺序号在累加器A中;OV=1 时,未找到。
;影响资源:	PSW、A、B、R2、R3、R4      堆栈需求:  2字节
;调用子程序:   无

FDD1:	MOV	B,A
	MOV	R2,#0
	MOV	A,R7
	DEC	A
	MOV	R3,A
FD61:	CLR	C
	MOV	A,R3
	SUBB	A,R2
	JC	FD69
	RRC	A
	ADD	A,R2
	MOV	R4,A
	MOVC	A,@A+DPTR
	CJNE	A,B,FD65
	CLR	OV
	MOV	A,R4
	RET
FD65:	JC	FD68
	MOV	A,R4
	DEC	A
	MOV	R3,A
	AJMP	FD61
FD68:	MOV	A,R4
	INC	A
	MOV	R2,A
	AJMP	FD61
FD69:	SETB	OV
	RET
	              
;------------------------------------------------;
	              
;****** [对分查找(ROM)双字节无符号增序数据表格] FDD2 ;

;入口条件:	查找内容在R4、R5中,表格首址在DPTR中,数据个数在R7中。
;出口信息:	OV=0 时顺序号在累加器A中,址在DPTR中;OV=1 时未找到。
;影响资源:	PSW、A、B、R1~R7、DPTR    堆栈需求:  2字节
;调用子程序:   无
	
FDD2:	MOV	R2,#0
	MOV	A,R7
	DEC	A
	MOV	R3,A
	MOV	R6,DPH
	MOV	R7,DPL
FD81:	CLR	C
	MOV	A,R3
	SUBB	A,R2
	JC	FD89
	RRC	A
	ADD	A,R2
	MOV	R1,A
	MOV	DPH,R6
	CLR	C
	RLC	A
	JNC	FD82
	INC	DPH
FD82:	ADD	A,R7
	MOV	DPL,A
	JNC	FD83
	INC	DPH
FD83:	CLR	A
	MOVC	A,@A+DPTR
	MOV	B,R4
	CJNE	A,B,FD84
	MOV	A,#1
	MOVC	A,@A+DPTR
	MOV	B,R5
	CJNE	A,B,FD84
	MOV	A,R1
	CLR	OV
	RET
FD84:	JC	FD86
	MOV	A,R1
	DEC	A
	MOV	R3,A
	AJMP	FD81
FD86:	MOV	A,R1
	INC	A
	MOV	R2,A
	AJMP	FD81
FD89:	MOV	DPH,R6
	MOV	DPL,R7
	SETB	OV
	RET     

;------------------------------------------------;
	
;****** [求单字节十六进制无符号数据块的平均值] DDM1 ;

;入口条件:	数据块的首址在DPTR中,数据个数在R7中。
;出口信息:	平均值在累加器A中。
;影响资源:	PSW、A、R2~R6  堆栈需求:  4字节
;调用子程序:   无
	
DDM1:	MOV	A,R7
	MOV	R2,A
	PUSH	DPH
	PUSH	DPL
	CLR	A
	MOV	R4,A
	MOV	R5,A
DM11:	MOVX	A,@DPTR
	ADD	A,R5
	MOV	R5,A
	JNC	DM12
	INC	R4
DM12:	INC	DPTR
	DJNZ	R2,DM11
	LCALL	D457
	MOV	A,R3
	POP	DPL
	POP	DPH
	RET
	
;------------------------------------------------;
	
;****** [求双字节十六进制无符号数据块的平均值] DDM2 ;

;入口条件:	数据块的首址在DPTR中,双字节数据总个数在R7中。
;出口信息:	平均值在R4、R5中。
;影响资源:	PSW、A、R2~R6      堆栈需求:  4字节
;调用子程序:   1个 DV31
	
DDM2:	MOV	A,R7
	MOV	R2,A
	PUSH	DPL
	PUSH	DPH
	CLR	A
	MOV	R3,A
	MOV	R4,A
	MOV	R5,A
DM20:	MOVX	A,@DPTR
	MOV	B,A
	INC	DPTR
	MOVX	A,@DPTR
	INC	DPTR
	ADD	A,R5
	MOV	R5,A
	MOV	A,B
	ADDC	A,R4
	MOV	R4,A
	JNC	DM21
	INC	R3
DM21:	DJNZ	R2,DM20
	POP	DPH
	POP	DPL
	LCALL	DV31
	RET

;------------------------------------------------;

;****** [求单字节数据块的(异或)校验和] XR1 ******;

;入口条件:	数据块的首址在DPTR中,数据的个数在R6、R7中。
;出口信息:	校验和在累加器A中。
;影响资源:	PSW、A、B、R4~R7  堆栈需求:  2字节
;调用子程序:   无

XR1:	MOV	R4,DPH
	MOV	R5,DPL
	MOV	A,R7
	JZ	XR10
	INC	R6
XR10:	MOV	B,#0
XR11:	MOVX	A,@DPTR
	XRL	B,A
	INC	DPTR
	DJNZ	R7,XR11
	DJNZ	R6,XR11
	MOV	DPH,R4
	MOV	DPL,R5
	MOV	A,B
	RET       
	
;------------------------------------------------;

;****** [求双字节数据块的(异或)校验和] XR2 ******;

;入口条件:	数据块的首址在DPTR中,双字节数据总个数在R6、R7中。
;出口信息:	校验和在R2、R3中。
;影响资源:	PSW、A、R2~R7      堆栈需求:  2字节
;调用子程序:   无
	
XR2:	MOV	R4,DPH
	MOV	R5,DPL
	MOV	A,R7
	JZ	XR20
	INC	R6
XR20:	CLR	A
	MOV	R2,A
	MOV	R3,A
XR21:	MOVX	A,@DPTR
	XRL	A,R2
	MOV	R2,A
	INC	DPTR
	MOVX	A,@DPTR
	XRL	A,R3
	MOV	R3,A
	INC	DPTR
	DJNZ	R7,XR21
	DJNZ	R6,XR21
	MOV	DPH,R4
	MOV	DPL,R5
	RET

;------------------------------------------------;
	
;****** [单字节无符号数据块排序(增序)] SORT *****;

;入口条件:	数据块的首址在R0中,字节数在R7中。
;出口信息:	完成排序(增序)
;影响资源:	PSW、A、R2~R6      堆栈需求:  2字节
;调用子程序:   无

SORT:	MOV	A,R7
	MOV	R5,A
SRT1:	CLR	F0
	MOV	A,R5
	DEC	A
	MOV	R5,A
	MOV	R2,A
	JZ	SRT5
	MOV	A,R0
	MOV	R6,A
SRT2:	MOV	A,@R0
	MOV	R3,A
	INC	R0
	MOV	A,@R0
	MOV	R4,A
	CLR	C
	SUBB	A,R3
	JNC	SRT4
	SETB	F0
	MOV	A,R3
	MOV	@R0,A
	DEC	R0
	MOV	A,R4
	MOV	@R0,A
	INC	R0
SRT4:	DJNZ	R2,SRT2
	MOV	A,R6
	MOV	R0,A
	JB	F0,SRT1
SRT5:	RET

;------------------------------------------------;

⌨️ 快捷键说明

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