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

📄 elc-1.asm

📁 该程序为测量交流电频率
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;功能:把(R0)指向的内部RAM中的三字节浮点数送到R6R2R3
;      把(R1)指向的内部RAM中的三字节浮点数送到R7R4R5
;程序使用A,R0-R7
;************************************************************
FMLD:	MOV   A,@R0        ;取操作数1
	MOV   R6,A
	INC   R0
	MOV   A,@R0
	MOV   R2,A
	INC   R0
	MOV   A,@R0
	MOV   R3,A
	DEC   R0           ;恢复(R0)的值
	DEC   R0
	MOV   A,@R1        ;取操作数2
	MOV   R7,A
	INC   R1
	MOV   A,@R1
	MOV   R4,A
	INC   R1
	MOV   A,@R1
	MOV   R5,A
	DEC   R1           ;恢复(R1)的值
	DEC   R1
	RET

;***************************浮点数存数子程序*************************************
;功能:将R4R2R3的浮点数送到(R1)指向的内部RAM单元中
FSTR:	MOV   A,R4
	MOV   @R1,A
	INC   R1
	MOV   A,R2
	MOV   @R1,A
	INC   R1
	MOV   A,R3
	MOV   @R1,A
	DEC   R1
	DEC   R1
	RET

;*******************************************************************************
;****************************浮点数加减法处理子程序*****************************
;功能:将R6R2R3和R7R4R5中的两个三字节浮点数进行相加或相减
;结果送R4R2R3
;*******************************************************************************
FABP:	MOV   A,R6
	MOV   C,ACC.7
	MOV   FG00,C          ;被加数符号保存
	XRL   A,R7
	JNB   ACC.7,FA1       ;两数同号转FA1
	CPL   FG02            ;两数异号,取反运算标志
FA1:	MOV   A,R6            ;扩张阶码为双符号位
	MOV   C,ACC.6
	MOV   ACC.7,C
	MOV   R6,A
	MOV   A,R7
	MOV   C,ACC.6
	MOV   ACC.7,C
	MOV   R7,A
	CLR   C
	MOV   A,R6
	SUBB  A,R7
	JZ    FA2
	CLR   PSW.5
	CLR   FG01
	JB    ACC.7,FA5
	CJNE  R4,#0,FA6
	CJNE  R5,#0,FA6
FA2:	JB    FG02,FA8        ;执行尾数加法
	MOV   A,R3
	ADD   A,R5
	MOV   R3,A
	MOV   A,R2
	ADDC  A,R4
	MOV   R2,A
	JNC   FA4
	SETB  FG01            ;溢出,尾数右移一位
	CLR   C
FA3:	CLR   PSW.5
	LCALL FSDT
FA4:	CJNE  R2,#0,FAA
	CJNE  R3,#0,FAA       ;当结果为0时处理
	MOV   R4,#41H
	RET
FAA:	MOV   A,R6
	MOV   C,FG00          ;回送结果符号
	MOV   ACC.7,C
	XCH   A,R4
	MOV   R6,A
	RET
FA5:	CJNE  R2,#0,FA7
	CJNE  R3,#0,FA7
	MOV   A,R7
	MOV   R6,A
	SJMP  FA2
FA6:	CPL   PSW.5
FA7:	CLR   C
	LCALL FSDT
	SJMP  FA1
FA8:	MOV   A,R3             ;执行尾数减法
	CLR   C                ;不够减,尾数取补
	SUBB  A,R5
	MOV   R3,A
	MOV   A,R2
	SUBB  A,R4
	MOV   R2,A
	JNC   FA9
	CLR   A
	CLR   C
	SUBB  A,R3
	MOV   R3,A
	CLR   A
	SUBB  A,R2
	MOV   R2,A
	CPL   FG00            ;结果符号取反
FA9:	SETB  C
	SJMP  FA3

;***************************浮点加法子程序FADD*************************
;功能:将(R0)指向的内部RAM中的三字节浮点数加上(R1)指向的浮点数
;结果送R4R2R3
;**********************************************************************
FADD:	CLR   FG02		;(R0)(R0+1)(R0+2)+(R1)(R1+1)(R1+2) -> R4R2R3
	LCALL FMLD
	LCALL FABP
	RET

;***************************浮点减法子程序SUB**************************
;功能:将(R0)指向的内部RAM中的三字节浮点数减去(R1)指向的浮点数
;结果送R4R2R3
;**********************************************************************
FSUB:	SETB  FG02
	LCALL FMLD
	LCALL FABP
	RET
;********************************************************************************
;**********************************************************************************


;***************************浮点乘法子程序FMUL*************************
FMUL:	LCALL FMLD		;(R0)(R0+1)(R0+2)乘(R1)(R1+1)(R1+2) -> R4R2R3
	MOV   A,R6
	XRL   A,R7
	MOV   C,ACC.7
	MOV   FG00,C
	LCALL DMUL
	MOV   A,R7
	MOV   C,ACC.7
	MOV   PSW.5,C
	MOV   A,@R0
	ADD   A,@R1
	MOV   R6,A
	SETB  C
	LCALL FSDT
	MOV   A,R6
	MOV   C,FG00
	MOV   ACC.7,C
	MOV   R4,A
	RET
;**************************************************************************
DMUL:	MOV   A,R3
	MOV   B,R5
	MUL   AB
	MOV   R7,B
	MOV   A,R3
	MOV   B,R4
	MUL   AB
	ADD   A,R7
	MOV   R7,A
	CLR   A
	ADDC  A,B
	MOV   R3,A
	MOV   A,R2
	MOV   B,R5
	MUL   AB
	ADD   A,R7
	MOV   R7,A
	MOV   A,R3
	ADDC  A,B
	MOV   R3,A
	MOV   PSW.5,C
	MOV   A,R2
	MOV   B,R4
	MUL   AB
	ADD   A,R3
	MOV   R3,A
	CLR   A
	ADDC  A,B
	MOV   C,PSW.5
	ADDC  A,#0
	MOV   R2,A
	RET

;********************************************************************
;将(R0)指向的内部RAM中的浮点整数除以(R1)指向的内部RAM中的浮点数,商送R4R3R2
;FDIV子程序使用累加器A,寄存器B,R0~R7,影响标志位F0,CY(除数尾数为0),调用FMLD、FSDT子程序
;******************************************************************
FDIV:	LCALL FMLD
	MOV   A,R6
	XRL   A,R7
	MOV   C,ACC.7
	MOV   FG00,C
	CLR   A
	MOV   R6,A
	MOV   R7,A
	CJNE  R4,#0,FD1
	CJNE  R5,#0,FD1
	SETB  C
	RET
FD1:	MOV   A,R3
	SUBB  A,R5
	MOV   A,R2
	SUBB  A,R4
	JC    FD2
	CLR   PSW.5
	CLR   FG01
	LCALL FSDT
	MOV   A,R7
	RRC   A
	MOV   R7,A
	CLR   C
	SJMP  FD1
FD2:	CLR   A
	XCH   A,R6
	PUSH  ACC
	LCALL WDIV
	POP   ACC
	ADD   A,@R0
	CLR   C
	SUBB  A,@R1
	MOV   C,FG00
	MOV   ACC.7,C
	MOV   R4,A
	CLR   C
	RET

;************************************************************************
WDIV:	MOV   A,R1
	PUSH  ACC
	MOV   B,#10H
DV1:	CLR   C
	MOV   A,R6
	RLC   A
	MOV   R6,A
	MOV   A,R7
	RLC   A
	MOV   R7,A
	MOV   A,R3
	RLC   A
	MOV   R3,A
	XCH   A,R2
	RLC   A
	XCH   A,R2
	MOV   PSW.5,C
	CLR   C
	SUBB  A,R5
	MOV   R1,A
	MOV   A,R2
	SUBB  A,R4
	JB    PSW.5,DV2
	JC    DV3
DV2:	MOV   R2,A
	MOV   A,R1
	MOV   R3,A
	INC   R6
DV3:	DJNZ  B,DV1
	POP   ACC
	MOV   R1,A
	MOV   A,R7
	MOV   R2,A
	MOV   A,R6
	MOV   R3,A
	RET


;***************************************************************************
;功能:将FG04(数符)R2R3中的整数转换成三字节浮点数送(R1)指向的内部RAM单元中
;程序使用A,R1,R2,R3,R6,调用FSDT,FSTR子程序
;***************************************************************************
INTF:	MOV	R6,#10H		; 双字节整数 -> 三字节浮点数
	SETB	C		; FG04(数符)R2R3 -> @R1为首址的三字节
	CLR	PSW.5
	LCALL	FSDT
	MOV	A,R6
	MOV	C,FG04
	MOV	ACC.7,C
	MOV	R4,A
	LCALL	FSTR
	RET

;*******************************************************************
FINT:	CLR	PSW.5		;浮点数取整 (R0)(R0+1)(R0+2) -> FG04(数符)R2R3
	INC	R0
	MOV	A,@R0
	MOV	R2,A
	INC	R0
	MOV	A,@R0
	MOV	R3,A
	DEC	R0
	DEC	R0
	MOV	A,@R0
	MOV	C,ACC.7
	MOV	FG04,C
	CLR	ACC.7
	JNB	ACC.6,FIN1
	MOV	R2,#00H
	MOV	R3,#00H
	RET
FIN1:	CJNE	A,#11H,FIN2
FIN5:	SETB	PSW.5
	MOV	R2,#0FFH
	MOV	R3,#0FFH
	RET
FIN2:	JNC	FIN5
FIN3:	CJNE	A,#10H,FIN4
	RET
FIN4:	CLR	C
	XCH	A,R2
	RRC	A
	XCH	A,R2
	XCH	A,R3
	RRC	A
	XCH	A,R3
	INC	A
	MOV	FG02,C
	SJMP	FIN3

;************************************************************************8
IDTB:	MOV	A,@R0		;R0为首址的2位十进制整数 -> R2R3二进制整数
	MOV	B,#10
	MUL	AB
	INC	R0
	ADD	A,@R0
	MOV	R3,A
	MOV	R2,#0
	RET

;*************************************************************************
PDTB:	MOV   R3,#0		;4位十进制小数 -> 二进制数小数,结果存R3R4中
	MOV   R4,#0		;R0指向4位十进制数的最低位  R2待转换十进制数的位数
PDTL:	MOV   A,R3
	MOV   B,#9AH
	MUL   AB		; (R3)*9AH
	MOV   R5,B
	XCH   A,R4
	MOV   B,#19H
	MUL   AB		;  (R4)*19H
	ADD   A,R4
	MOV   A,R5
	ADDC  A,B
	MOV   R5,A
	MOV   A,@R0
	MOV   B,#9AH
	MUL   AB		;  ((R0))*9AH
	ADD   A,R5
	MOV   R4,A		; ****
	CLR   A
	ADDC  A,B
	XCH   A,R3
	MOV   B,#19H
	MUL   AB		;  (R3)*19H
	ADD   A,R4
	MOV   R4,A
	MOV   A,B
	ADDC  A,R3
	MOV   R3,A
	MOV   A,@R0
	MOV   B,#19H
	MUL   AB		;  ((R0))*19H
	ADD   A,R3
	MOV   R3,A
	DEC   R0
	DJNZ  R2,PDTL
	RET

;***********************************************************************
FBTD:	MOV	A,@R0
	MOV	C,ACC.7
	MOV	FG04,C
	MOV	C,ACC.6
	MOV	ACC.7,C
	MOV	R6,A
	INC	R0
	MOV	A,@R0
	MOV	R2,A
	INC	R0
	MOV	A,@R0
	MOV	R3,A
	DEC	R0
	DEC	R0
	CJNE	R2,#0,FB3
	CJNE	R3,#0,FB3
	CLR	A
	MOV	@R1,A
	INC	R1
	MOV	@R1,A
	INC	R1
	MOV	@R1,A
	INC	R1
	MOV	@R1,A
	INC	R1
	MOV	@R1,A
	INC	R1
	MOV	@R1,A
FB1:	DEC	R1
	DEC	R1
	DEC	R1
	DEC	R1
	DEC	R1
	RET
FB3:	MOV	@R1,#0
	JB	FG06,FB4
	DEC	@R1
FB4:	INC	R1
	MOV	@R1,#1
	JNB	FG06,FB5
	INC	@R1
	JNB	FG07,FB5
	INC	@R1
FB5:	MOV	A,R6
	CLR	C
	SUBB	A,@R1
	JZ	FB13
	JNB	ACC.6,FB14
FB6:	DEC	@R1
	DEC	@R1
	DEC	@R1
	DEC	@R1
FB7:	MOV	A,R6
	CLR	C
	SUBB	A,@R1
	JZ	FB16
	JB	ACC.6,FB17
FB8:	JNB	FG06,FB9
	DEC	R6
	JNB	FG07,FB9
	DEC	R6
FB9:	CJNE	R6,#0,FB19
	MOV	R6,#5
	JNB	FG06,FB12
	MOV	R7,#1
	JNB	FG07,FB10
	INC	R7
FB10:	CLR	A
	CLR	C
FB11:	XCH	A,R3
	RLC	A
	XCH	A,R3
	XCH	A,R2
	RLC	A
	XCH	A,R2
	RLC	A
	DJNZ	R7,FB11
	DEC	R6
	MOV	@R1,A
	INC	R1
FB12:	MOV	A,R3
	MOV	B,#10
	MUL	AB
	MOV	R3,A
	MOV	R7,B
	MOV	A,R2
	MOV	B,#10
	MUL	AB
	ADD	A,R7
	MOV	R2,A
	CLR	A
	ADDC	A,B
	MOV	@R1,A
	INC	R1
	DJNZ	R6,FB12
	SJMP	FB1
FB13:	MOV	A,R2
	SUBB	A,#80H
	JC	FB6
FB14:	MOV	R5,#0CDH
	MOV	R4,#0CCH
	LCALL	DMUL
	MOV	A,R2
	JB	ACC.7,FB20
	MOV	A,R7
	MOV	C,ACC.7
	ORL	C,ACC.6
	MOV	A,R3
	RLC	A
	MOV	R3,A
	MOV	A,R2
	RLC	A
	MOV	R2,A
	DEC	R6
FB15:	MOV	A,R6
	ADD	A,#0FDH
	MOV	R6,A
	DEC	R1
	INC	@R1
	INC	R1
	SJMP	FB5
FBX:	SJMP	FB7
FB19:	MOV	A,R2
	RRC	A
	MOV	R2,A
	MOV	A,R3
	RRC	A
	MOV	R3,A
	INC	R6
	SJMP	FB9
FB16:	MOV	A,#0CBH
	CLR	C
	SUBB	A,R3
	MOV	A,#0CCH
	SUBB	A,R2
	JC	FB8
FB17:	MOV	R4,#0A0H
	MOV	R5,#0
	LCALL	DMUL
	MOV	A,R2
	JB	ACC.7,FB21
	MOV	A,R7
	MOV	C,ACC.7
	ORL	C,ACC.6
	MOV	A,R3
	RLC	A
	MOV	R3,A
	MOV	A,R2
	RLC	A
	MOV	R2,A
	DEC	R6
FB18:	MOV	A,R6
	ADD	A,#4
	MOV	R6,A
	DEC	R1
	DEC	@R1
	INC	R1
	SJMP	FBX
FB20:	MOV	A,R7
	JNB	ACC.7,FB15
	MOV	A,R3
	ORL	A,#1
	MOV	R3,A
	SJMP	FB15
FB21:	MOV	A,R7
	JNB	ACC.7,FB18
	MOV	A,R3
	ORL	A,#1
	MOV	R3,A
	SJMP	FB18

 END

⌨️ 快捷键说明

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