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

📄

📁 该文件里包含了大量的常用经典的程序代码,可以为51编程者带来事半功倍的效果,
💻
📖 第 1 页 / 共 2 页
字号:
	CLR	A
	ADDC	A,R3
	MOV	R3,A
	JNC	BTF4
	MOV	R3,#80H
	INC	R2
BTF4:	MOV	DPTR,#BTFL
	MOV	A,@R0
	ADD	A,#19
	MOV	B,#3
	MUL	AB
	ADD	A,DPL
	MOV	DPL,A
	JNC	BTF5
	INC	DPH
BTF5:	CLR	A
	MOVC	A,@A+DPTR
	MOV	C,ACC.6
	MOV	ACC.7,C
	MOV	R5,A
	MOV	A,#1
	MOVC	A,@A+DPTR
	MOV	R6,A
	MOV	A,#2
	MOVC	A,@A+DPTR
	MOV	R7,A
	LCALL	MUL1
	MOV	C,1DH
	MOV	1FH,C
	ACALL	MOV0
	RET              

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

;****** [格式化浮点数转换成浮点BCD码] FTOB ******;

;入口条件:	格式化浮点操作数在[R0]中。
;出口信息:	转换成的浮点BCD码仍在[R0]中。
;影响资源:	PSW、A、B、R2~R7、位1DH~1FH   堆栈需求:6字节
;调用子程序:    3个
	
FTOB:	INC	R0
	MOV	A,@R0
	INC	R0
	ORL	A,@R0
	DEC	R0
	DEC	R0
	JNZ	FTB0
	MOV	@R0,#41H
	RET
FTB0:	MOV	A,@R0
	MOV	C,ACC.7
	MOV	1DH,C
	CLR	ACC.7
	MOV	@R0,A
	LCALL	MVR0
	MOV	DPTR,#BFL0
	MOV	B,#0
	MOV	A,R2
	JNB	ACC.7,FTB1
	MOV	DPTR,#BTFL
	MOV	B,#0EDH
	ADD	A,#16
	JNC	FTB1
	MOV	DPTR,#BFLN
	MOV	B,#0FAH
FTB1:	CLR	A
	MOVC	A,@A+DPTR
	MOV	C,ACC.6
	MOV	ACC.7,C
	MOV	R5,A
	MOV	A,#1
	MOVC	A,@A+DPTR
	MOV	R6,A
	MOV	A,#2
	MOVC	A,@A+DPTR
	MOV	R7,A
	MOV	A,R5
	CLR	C
	SUBB	A,R2
	JB	ACC.7,FTB2
	JNZ	FTB3
	MOV	A,R6
	CLR	C
	SUBB	A,R3
	JC	FTB2
	JNZ	FTB3
	MOV	A,R7
	CLR	C
	SUBB	A,R4
	JC	FTB2
	JNZ	FTB3
	MOV	R5,B
	INC	R5
	MOV	R6,#10H
	MOV	R7,#0
	SJMP	FTB6
FTB2:	INC	DPTR
	INC	DPTR
	INC	DPTR
	INC	B
	SJMP	FTB1	
FTB3:	PUSH	B
	LCALL	DIV3
FTB4:	MOV	A,R2
	JZ	FTB5
	CLR	C
	LCALL	RR1
	SJMP	FTB4
FTB5:	POP	ACC
	MOV	R5,A
	LCALL	HB2
	MOV	R6,A
	LCALL	HB2
	MOV	R7,A
	MOV	A,R3
	RLC	A
	CLR	A
	ADDC	A,R7
	DA	A
	MOV	R7,A
	CLR	A
	ADDC	A,R6
	DA	A
	MOV	R6,A
	JNC	FTB6
	MOV	R6,#10H
	INC	R5
FTB6:	INC	R0
	INC	R0
	MOV	A,R7
	MOV	@R0,A
	DEC	R0
	MOV	A,R6
	MOV	@R0,A
	DEC	R0
	MOV	A,R5
	MOV	C,1DH
	MOV	ACC.7,C
	MOV	@R0,A	
	RET
HB2:	MOV	A,R4
	MOV	B,#100
	MUL	AB
	MOV	R4,A
	MOV	A,B
	XCH	A,R3
	MOV	B,#100
	MUL	AB
	ADD	A,R3
	MOV	R3,A
	JNC	HB21
	INC	B
HB21:	MOV	A,B
	MOV	B,#10
	DIV	AB
	SWAP	A
	ORL	A,B
	RET
	
BTFL:	DB	41H,0ECH,1EH	;1.0000E-19
	DB	45H,93H,93H	;1.0000E-18
	DB	48H,0B8H,78H	;1.0000E-17
	DB	4BH,0E6H,96H	;1.0000E-16
	DB	4FH,90H,1DH	;1.0000E-15
	DB	52H,0B4H,25H	;1.0000E-14
	DB	55H,0E1H,2EH	;1.0000E-13
	DB	59H,8CH,0BDH	;1.0000E-12
	DB	5CH,0AFH,0ECH	;1.0000E-11
	DB	5FH,0DBH,0E7H	;1.0000E-10
	DB	63H,89H,70H	;1.0000E-9
	DB	66H,0ABH,0CCH	;1.0000E-8
	DB	69H,0D6H,0C0H	;1.0000E-7
BFLN:	DB	6DH,86H,38H	;1.0000E-6
	DB	70H,0A7H,0C6H	;1.0000E-5
	DB	73H,0D1H,0B7H	;1.0000E-4
	DB	77H,83H,12H	;1.0000E-3
	DB	7AH,0A3H,0D7H	;1.0000E-2
	DB	7DH,0CCH,0CDH	;1.0000E-1
BFL0:	DB	1,80H,00H	;1.0000
	DB	4,0A0H,00H	;1.0000E1
	DB	7,0C8H,00H	;1.0000E2
	DB	0AH,0FAH,00H	;1.0000E3
	DB	0EH,9CH,40H	;1.0000E4
	DB	11H,0C3H,50H	;1.0000E5
	DB	14H,0F4H,24H	;1.0000E6
	DB	18H,98H,97H	;1.0000E7
	DB	1BH,0BEH,0BCH	;1.0000E8
	DB	1EH,0EEH,6BH	;1.0000E9
	DB	22H,95H,03H	;1.0000E10
	DB	25H,0BAH,44H	;1.0000E11
	DB	28H,0E8H,0D5H	;1.0000E12
	DB	2CH,91H,85H	;1.0000E13
	DB	2FH,0B5H,0E6H	;1.0000E14
	DB	32H,0E3H,60H	;1.0000E15
	DB	36H,8EH,1CH	;1.0000E16
	DB	39H,31H,0A3H	;1.0000E17
	DB	3CH,0DEH,0BH	;1.0000E18
	DB	40H,8AH,0C7H	;1.0000E19

;	以上是中型浮点库 可以单独使用            ;
;------------------------------------------------;
;       以下是大型浮点库 可以单独使用            ;

;****** [浮点数清零] FCLR ***********************;

;入口条件:	操作数在[R0]中。
;出口信息:	操作数被清零。
;影响资源:	A    堆栈需求:  2字节
;调用子程序:    无

FCLR:	INC	R0
	INC	R0
	CLR	A
	MOV	@R0,A
	DEC	R0
	MOV	@R0,A
	DEC	R0
	MOV	@R0,#41H
	RET      
	            
;------------------------------------------------;

;****** [浮点数判零] FZER ***********************;	            

;入口条件:	操作数在[R0]中。
;出口信息:	若累加器A为零,则操作数[R0]为零,否则不为零。
;影响资源:	A    堆栈需求:  2字节
;调用子程序:    无

FZER:	INC	R0
	INC	R0
	MOV	A,@R0
	DEC	R0
	ORL	A,@R0
	DEC	R0
	JNZ	ZERO
	MOV	@R0,#41H
ZERO:	RET     

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

;****** [浮点数传送] FMOV ***********************;

;入口条件:	源操作数在[R1]中,目标地址为[R0]。
;出口信息:	[R0]=[R1],[R1]不变。
;影响资源:	A   堆栈需求:  2字节
;调用子程序:    无

FMOV:	INC	R0
	INC	R0
	INC	R1
	INC	R1
	MOV	A,@R1
	MOV	@R0,A
	DEC	R0
	DEC	R1
	MOV	A,@R1
	MOV	@R0,A
	DEC	R0
	DEC	R1
	MOV	A,@R1
	MOV	@R0,A
	RET

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

;****** [浮点数压栈] FPUS ***********************;

;入口条件:	操作数在[R0]中。
;出口信息:	操作数压入栈顶。
;影响资源:	A、R2、R3    堆栈需求:  5字节
;调用子程序:	无

FPUS:	POP	ACC
	MOV	R2,A
	POP	ACC
	MOV	R3,A
	MOV	A,@R0
	PUSH	ACC
	INC	R0
	MOV	A,@R0
	PUSH	ACC
	INC	R0
	MOV	A,@R0
	PUSH	ACC
	DEC	R0
	DEC	R0
	MOV	A,R3
	PUSH	ACC
	MOV	A,R2
	PUSH	ACC
	RET

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

;****** [浮点数出栈] FPOP ***********************;

;入口条件:	操作数处于栈顶。
;出口信息:	操作数弹至[R0]中。
;影响资源:	A、R2、R3    堆栈需求:  2字节
;调用子程序:    无

FPOP:	POP	ACC
	MOV	R2,A
	POP	ACC
	MOV	R3,A
	INC	R0
	INC	R0
	POP	ACC
	MOV	@R0,A
	DEC	R0
	POP	ACC
	MOV	@R0,A
	DEC	R0
	POP	ACC
	MOV	@R0,A
	MOV	A,R3
	PUSH	ACC
	MOV	A,R2
	PUSH	ACC
	RET

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

;****** [浮点数符号函数] FSGN *******************;

;入口条件:	操作数在[R0]中。
;出口信息:	累加器 A=1 时为正数,A=0FFH时为负数,A=0 时为零。
;影响资源:	PSW、A    堆栈需求:  2字节
;调用子程序:	无

FSGN:	INC	R0
	MOV	A,@R0
	INC	R0
	ORL	A,@R0
	DEC	R0
	DEC	R0
	JNZ	SGN
	RET
SGN:	MOV	A,@R0
	RLC	A
	MOV	A,#1
	JNC	SGN1
	MOV	A,#0FFH
SGN1:	RET              

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

;****** [浮点取整函数] FINT *********************;

;入口条件:	操作数在[R0]中。
;出口信息:	结果仍在[R0]中。
;影响资源:	PSW、A、R2、R3、R4、位1FH    堆栈需求:  6字节
;调用子程序:    3个

FINT:	LCALL	MVR0
	LCALL	INT
	LCALL	MOV0
	RET
	
INT:	MOV	A,R3
	ORL	A,R4
	JNZ	INTA
	CLR	1FH
	MOV	R2,#41H
	RET
INTA:	MOV	A,R2
	JZ	INTB
	JB	ACC.7,INTB
	CLR	C
	SUBB	A,#10H
	JC	INTD
	RET
INTB:	CLR	A
	MOV	R4,A
	MOV	C,1FH
	RRC	A
	MOV	R3,A
	RL	A
	MOV	R2,A
	JNZ	INTC
	MOV	R2,#41H
INTC:	RET
INTD:	CLR	F0
INTE:	CLR	C
	LCALL	RR1
	ORL	C,F0
	MOV	F0,C
	CJNE	R2,#10H,INTE
	JNB	F0,INTF
	JNB	1FH,INTF
	INC	R4
	MOV	A,R4
	JNZ	INTF
	INC	R3
INTF:	ACALL	RLN
	RET

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

;****** [浮点数多项式计算] FPLN *****************;

;入口条件:	自变量在[R0]中,多项式系数在调用指令之后,以40H结束。
;出口信息:	OV=0时,结果仍在[R0]中,OV=1时,溢出。
;影响资源:	DPTR、PSW、A、B、R2~R7、位1EH、1FH    堆栈需求: 4字节
;调用子程序:    2个

FPLN:	POP	DPH
	POP	DPL
	XCH	A,R0
	XCH	A,R1
	XCH	A,R0
	CLR	A
	MOV	R2,A
	MOV	R3,A
	MOV	R4,A
	CLR	1FH
PLN1:	CLR	A
	MOVC	A,@A+DPTR
	MOV	C,ACC.7
	MOV	1EH,C
	MOV	C,ACC.6
	MOV	ACC.7,C
	MOV	R5,A
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	MOV	R6,A
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	MOV	R7,A
	INC	DPTR
	MOV	C,1EH
	RRC	A
	XRL	A,23H
	RLC	A
	MOV	F0,C
	LCALL	AS1
	CLR	A
	MOVC	A,@A+DPTR
	CJNE	A,#40H,PLN2
	XCH	A,R0
	XCH	A,R1
	XCH	A,R0
	LCALL	MOV0
	CLR	A
	INC	DPTR
	JMP	@A+DPTR
PLN2:	MOV	A,@R1
	XRL	A,23H
	RLC	A
	MOV	1FH,C
	LCALL	MUL0
	AJMP	PLN1
	        
;------------------------------------------------;

;****** [以10为底的浮点对数函数] FLOG ***********;

;入口条件:	操作数在[R0]中。
;出口信息:	OV=0时,结果仍在[R0]中,OV=1时,负数或零求对数出错。
;影响资源:	DPTR、PSW、A、B、R2~R7、位1EH、1FH  堆栈需求:9字节
;调用子程序:    3个

FLOG:	LCALL	FLN
	JNB	OV,LOG
	RET
LOG:	MOV	R5,#0FFH
	MOV	R6,#0DEH
	MOV	R7,#5CH
	LCALL	MUL1
	LCALL	MOV0     
	RET                                       
	
;------------------------------------------------;	

;****** [以e为底的浮点对数函数] FLN *************;

;入口条件:	操作数在[R0]中。
;出口信息:	OV=0时,结果仍在[R0]中,OV=1时,负数或零求对数出错。
;影响资源:	DPTR、PSW、A、B、R2~R7、位1EH、1FH  堆栈需求: 7字节
;调用子程序:                
                
FLN:	LCALL	MVR0
	JB	1FH,LNOV
	MOV	A,R3
	ORL	A,R4
	JNZ	LN0
LNOV:	SETB	OV
	RET
LN0:	CLR	C
	LCALL	RL1
	CLR	A
	XCH	A,R2
	PUSH	ACC
	LCALL	RLN
	LCALL	MOV0
	LCALL	FPLN
	DB	7BH,0F4H,30H
	DB	0FEH,85H,13H
	DB	7FH,91H,51H
	DB	0FFH,0FAH,0BAH
	DB	0,0FFH,0CAH
	DB	70H,0C0H,0
	DB	40H
	POP	ACC
	JNZ	LN1
	RET
LN1:	CLR	1EH
	MOV	C,ACC.7
	MOV	F0,C
	JNC	LN2
	CPL	A
	INC	A
LN2:	MOV	R2,A
	MOV	B,#72H
	MUL	AB
	XCH	A,R2
	MOV	R7,B
	MOV	B,#0B1H
	MUL	AB
	ADD	A,R7
	MOV	R7,A
	CLR	A
	ADDC	A,B
	MOV	R6,A
	MOV	R5,#8
LN3:	JB	ACC.7,LN4
	MOV	A,R2
	RLC	A
	MOV	R2,A
	MOV	A,R7
	RLC	A
	MOV	R7,A
	MOV	A,R6
	RLC	A
	MOV	R6,A
	DEC	R5
	SJMP	LN3
LN4:	MOV	C,F0
	MOV	ACC.7,C
	LCALL	ASN
	RET
	
;------------------------------------------------;

;****** [以10为底的浮点指数函数] FE10 ***********;

;入口条件:	操作数在[R0]中。
;出口信息:	OV=0时,结果仍在[R0]中,OV=1时,溢出。
;影响资源:	DPTR、PSW、A、B、R2~R7、位1EH、1FH  堆栈需求:6字节
;调用子程序:    1个

FE10:	MOV	R5,#2
	MOV	R6,#0D4H
	MOV	R7,#9AH
	ACALL	EXP     
	RET
	
;------------------------------------------------;

;****** [以e为底的浮点指数函数] FEXP ************;

;入口条件:	操作数在[R0]中。
;出口信息:	OV=0时,结果仍在[R0]中,OV=1时,溢出。
;影响资源:	DPTR、PSW、A、B、R2~R7、位1EH、1FH  堆栈需求:6字节
;调用子程序:    3个

FEXP:	MOV	R5,#1
	MOV	R6,#0B8H
	MOV	R7,#0ABH
EXP:	CLR	1EH
	LCALL	MVR0
	LCALL	MUL1
	ACALL	E20
	RET
	
;------------------------------------------------;

;****** [以2为底的浮点指数函数] FE2 *************;

;入口条件:	操作数在[R0]中。
;出口信息:	OV=0时,结果仍在[R0]中,OV=1时,溢出。
;影响资源:	DPTR、PSW、A、B、R2~R7、位1EH、1FH  堆栈需求:6字节
;调用子程序:	7 个

FE2:	LCALL	MVR0
E20:	MOV	A,R3
	ORL	A,R4
	JZ	EXP1
	MOV	A,R2
	JB	ACC.7,EXP2
	SETB	C
	SUBB	A,#6
	JC	EXP2
	JB	1FH,EXP0
	MOV	@R0,#3FH
	INC	R0
	MOV	@R0,#0FFH
	INC	R0
	MOV	@R0,#0FFH
	DEC	R0
	DEC	R0
	SETB	OV
	RET
EXP0:	MOV	@R0,#41H
	CLR	A
	INC	R0
	MOV	@R0,A
	INC	R0
	MOV	@R0,A
	DEC	R0
	DEC	R0
	CLR	OV
	RET
EXP1:	MOV	@R0,#1
	INC	R0
	MOV	@R0,#80H
	INC	R0
	MOV	@R0,#0
	DEC	R0
	DEC	R0
	CLR	OV
	RET
EXP2:	MOV	A,R2
	MOV	R5,A
	MOV	A,R3
	MOV	R6,A
	MOV	A,R4
	MOV	R7,A
	MOV	C,1FH
	MOV	1EH,C
	LCALL	INT
	MOV	A,R3
	JZ	EXP4
EXP3:	CLR	C
	RRC	A
	INC	R2
	CJNE	R2,#8,EXP3
EXP4:	MOV	R3,A
	JNB	1FH,EXP5
	CPL	A
	INC	A
EXP5:	PUSH	ACC
	LCALL	RLN
	CPL	1FH
	SETB	F0
	LCALL	AS1
	LCALL	MOV0
	LCALL	FPLN
	DB	77H,0B1H,0C9H
	DB	7AH,0A1H,68H
	DB	7CH,0E3H,4FH
	DB	7EH,0F5H,0E7H
	DB	0,0B1H,72H
	DB	1,80H,0
	DB	40H
	POP	ACC
	ADD	A,R2
	MOV	R2,A
	CLR	1FH
	ACALL	MOV0
	RET
	            
;------------------------------------------------;

;****** [浮点余弦函数] FCOS *********************;

;入口条件:	操作数在[R0]中。
;出口信息:	结果仍在[R0]中。
;影响资源:	DPTR、PSW、A、B、R2~R7、位1DH~1FH  堆栈需求:  6字节
;调用子程序:    5个
	            
FCOS:	LCALL	FABS
	MOV	R5,#1
	MOV	R6,#0C9H
	MOV	R7,#10H
	CLR	1EH
	LCALL	MVR0
	CLR	F0
	LCALL	AS1
	LCALL	MOV0 
	ACALL	FSIN
	RET
	
;------------------------------------------------;

;****** [浮点正弦函数] FSIN *********************;

;入口条件:	操作数在[R0]中。
;出口信息:	结果仍在[R0]中。
;影响资源:	DPTR、PSW、A、B、R2~R7、位1DH~1FH  堆栈需求:  6字节
;调用子程序:    7个

FSIN:	MOV	A,@R0
	MOV	C,ACC.7
	MOV	1DH,C
	CLR	ACC.7
	MOV	@R0,A
	LCALL	MVR0
	MOV	R5,#0
	MOV	R6,#0A2H
	MOV	R7,#0FAH
	CLR	1EH
	LCALL	MUL1
	MOV	A,R2
	MOV	R5,A
	MOV	A,R3
	MOV	R6,A
	MOV	A,R4
	MOV	R7,A
	LCALL	INT
	MOV	A,R2
	JZ	SIN2
SIN1:	CLR	C
	LCALL	RR1
	CJNE	R2,#10H,SIN1
	MOV	A,R4
	JNB	ACC.1,SIN2
	CPL	1DH
SIN2:	JB	ACC.0,SIN3
	CPL	1FH
	SJMP	SIN4
SIN3:	MOV	A,R4
	INC	A
	MOV	R4,A
	JNZ	SIN4
	INC	R3
SIN4:	LCALL	RLN
	SETB	F0
	LCALL	AS1
	LCALL	MOV0
	LCALL	FPLN
	DB	7DH,93H,28H
	DB	41H,0,0
	DB	80H,0A4H,64H
	DB	41H,0,0
	DB	1,0C9H,2
	DB	41H,0,0
	DB	40H
	MOV	A,@R0
	JZ	SIN5
	JB	ACC.6,SIN5
	INC	R0
	MOV	@R0,#80H
	INC	R0
	MOV	@R0,#0
	DEC	R0
	DEC	R0
	MOV	A,#1
SIN5:	MOV	C,1DH
	MOV	ACC.7,C
	MOV	@R0,A
	RET

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

;****** [浮点反正切函数] FATN *******************;

;入口条件:	操作数在[R0]中。
;出口信息:	结果仍在[R0]中。
;影响资源:	DPTR、PSW、A、B、R2~R7、位1CH~1FH 堆栈需求:7字节
;调用子程序:    4个

FATN:	MOV	A,@R0
	MOV	C,ACC.7
	MOV	1DH,C
	CLR	ACC.7
	MOV	@R0,A
	CLR	1CH
	JB	ACC.6,ATN1
	JZ	ATN1
	SETB	1CH
	LCALL	FRCP
ATN1:	LCALL	FPLN
	DB	0FCH,0E4H,91H
	DB	7FH,8FH,37H
	DB	0FFH,0EDH,0E0H
	DB	7BH,0E8H,77H
	DB	0,0FFH,68H
	DB	72H,85H,0ECH
	DB	40H
	JNB	1CH,ATN2
	CPL	1FH
	MOV	C,1FH
	MOV	F0,C
	MOV	R5,#1
	MOV	R6,#0C9H
	MOV	R7,#10H
	LCALL	AS1
	LCALL	MOV0
ATN2:	MOV	A,@R0
	MOV	C,1DH
	MOV	ACC.7,C
	MOV	@R0,A
	RET

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

;****** [浮点弧度数转换成浮点度数] RTOD *********;

;入口条件:	浮点弧度数在[R0]中。
;出口信息:	转换成的浮点度数仍在[R0]中。
;影响资源:	PSW、A、B、R2~R7、位1EH、1FH  堆栈需求:6字节
;调用子程序:	1个

RTOD:	MOV	R5,#6
	MOV	R6,#0E5H
	MOV	R7,#2FH
	ACALL	DR 
	RET

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

;****** [浮点度数转换成浮点弧度数] DTOR *********;

;入口条件:	浮点度数在[R0]中。
;出口信息:	转换成的浮点弧度数仍在[R0]中。
;影响资源:	PSW、A、B、R2~R7、位1EH、1FH  堆栈需求:6字节
;调用子程序:    3个
	
DTOR:	MOV	R5,#0FBH
	MOV	R6,#8EH
	MOV	R7,#0FAH
DR:	LCALL	MVR0
	CLR	1EH
	LCALL	MUL1
	LCALL	MOV0
	RET

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

⌨️ 快捷键说明

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