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

📄 tj.asm

📁 在定时器中断中做LED的PWM输出 AT89C2051实现A/D转换的C51程序 单片机开发系统 指令系统 程序设计 定时与中断 系统扩展 接口技术 串行口
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;能剔除粗大误差样本的统计算法。
ADR	EQU	2000H	;样本数据数组首址。
FN	EQU	30H	;样本个数存放单元的首址。
XI	EQU	33H	;当前样本存放单元的首址。
AVE	EQU	36H	;平均值存放单元的首址。
S	EQU	39H	;均方差存放单元的首址。
TEMP	EQU	3CH	;辅助单元的首址。
CON	DATA	2EH	;循环计数器。
N	DATA	2FH	;样本个数(不超过255个)存放单元。
FIND	BIT	00H	;“发现粗大误差样本”的标志。

FLAG	DATA	23H	;浮点运算标志
PFA	BIT	FLAG.7
PFB	BIT	FLAG.6
PFC	BIT	FLAG.5
PFD	BIT	FLAG.4

	ORG	0000H
	LJMP	TEST
	
	ORG	100H
TEST:	MOV	N,#200		;共有200个样本数据。
	MOV	DPTR,#ADR	;片外RAM中样本数据存放首址。
	MOV	P2,DPH
	MOV	R0,DPL
	MOV	DPTR,#TABL	;测试用样本数据表首址。
	MOV	CON,N		;待测试数据个数。		
TEST1:	MOV	R6,#3
READ:	CLR	A
	MOVC	A,@A+DPTR	;将测试数据存放到片外RAM中。
	MOVX	@R0,A
	INC	DPTR
	INC	R0
	CJNE	R0,#0,READ1
	INC	P2
READ1:	DJNZ	R6,READ
	DJNZ	CON,TEST1
	LCALL	TJ		;调用能剔除粗大误差样本的统计算法。
STOP:	LJMP	STOP		

;最后结果:有效样本数N=196个( 0C4H )。
;平均值AVE=1.750 ( 01H 0DFH 0F3H )。
;均方差S=0.0535 ( 7CH 0DBH 0FH )。

TJ:	LCALL	AVERAG	;先求出平均值。
	LCALL	TJS	;再求出均方差。
TJ1:	MOV	R0,#S	;将均方差扩大三倍。
	MOV	R1,#TEMP;常数3.00。
	MOV	@R1,#2
	INC	R1
	MOV	@R1,#0C0H
	INC	R1
	MOV	@R1,#0
	DEC	R1
	DEC	R1
	LCALL	FMUL
	MOV	TEMP,AVE;将平均值复制到辅助单元。
	MOV	TEMP+1,AVE+1
	MOV	TEMP+2,AVE+2
	MOV	R0,#AVE	;平均值加上三倍均方差,得到样本上限。
	MOV	R1,#S
	LCALL	FADD
	MOV	R0,#TEMP;平均值减去三倍均方差,得到样本下限。
	MOV	R1,#S
	LCALL	FSUB
	MOV	CON,N	;准备对全部样本进行检查。
	MOV	DPTR,#ADR;指向样本数据首址。
	CLR	FIND	;初始化标志。
TJ2:	MOV	R2,#3	;将一个样本数据传送到片内XI单元中。
	MOV	R0,#XI
	MOV	R3,DPL
	MOV	R4,DPH
TJ3:	MOVX	A,@DPTR
	MOV	@R0,A
	INC	R0
	INC	DPTR
	DJNZ	R2,TJ3
	MOV	DPL,R3
	MOV	DPH,R4
	MOV	R0,#XI	;将样本和上限比较。
	MOV	R1,#AVE
	LCALL	FCMP
	JNC	TJ4	;将超过上限者剔除。
	MOV	R1,#TEMP;将样本和下限比较。
	LCALL	FCMP
	JNC	TJ5	;在合理范围内的样本通过。	
TJ4:	LCALL	DEL	;用最后一个样本覆盖这个坏样本,达到剔除的目的。
	SJMP	TJ6
TJ5:	INC	DPTR	;指向下一个样本。
	INC	DPTR
	INC	DPTR
TJ6:	DJNZ	CON,TJ2	;比较完全部样本。
	LCALL	AVERAG	;重新求出平均值。
	LCALL	TJS	;重新求出均方差。
	JB	FIND,TJ1;若剔除过坏样本,则再进行一遍检查。
	RET		;没有发现坏样本,则平均值和均方差均有效。

DEL:	SETB	FIND	;发现超差样本,设立标志。
	MOV	A,CON	;这是最后一个样本吗?
	DEC	A
	JZ	DEL3	;最后一个样本,不用覆盖。
	MOV	R3,DPL	;保存当前地址。
	MOV	R4,DPH
	MOV	P2,DPH	;用P2+R1指向当前地址。
	MOV	R1,DPL
	MOV	DPTR,#ADR;计算最后一个样本的地址。
	MOV	A,N
	DEC	A
	MOV	B,#3
	MUL	AB
	ADD	A,DPL
	MOV	DPL,A
	MOV	A,B
	ADDC	A,DPH
	MOV	DPH,A
	MOV	R2,#3	;用最后一个样本覆盖当前的坏样本。
DEL1:	MOVX	A,@DPTR
	MOVX	@R1,A
	INC	DPTR
	INC	R1
	CJNE	R1,#0,DEL2
	INC	P2
DEL2:	DJNZ	R2,DEL1
	MOV	DPL,R3	;恢复当前地址。	
	MOV	DPH,R4
DEL3:	DEC	N	;有效样本总数减一。
	RET

TJS:	MOV	CON,N	;准备累加全部样本数据的方差。
	MOV	DPTR,#ADR;指向存放样本数据的片外RAM首址。
	MOV	R0,#S	;将浮点方差累加器清零。
	LCALL	FCLR
TJS1:	MOV	R2,#3	;将一个样本数据传送到片内XI单元中。
	MOV	R0,#XI
TJS2:	MOVX	A,@DPTR
	MOV	@R0,A
	INC	R0
	INC	DPTR
	DJNZ	R2,TJS2
	MOV	R0,#XI
	MOV	R1,#AVE	;减去平均值。
	LCALL	FSUB
	LCALL	FSQU	;再平方。
	MOV	R0,#S	;累加到方差单元中。
	MOV	R1,#XI
	LCALL	FADD
	DJNZ	CON,TJS1;累加完全部样本数据的方差。
	MOV	FN,#8	;将样本个数减一转换成格式化浮点数。
	MOV	A,N
	DEC	A
	MOV	FN+1,A
	MOV	FN+2,#0
	MOV	R0,#FN
	LCALL	FSDT
	MOV	R0,#S	;以方差累加和为被除数。
	MOV	R1,#FN	;以样本个数减一为除数。
	LCALL	FDIV	;相除。
	LCALL	FSQR	;开平方,得到均方差。
	RET		;求均方差的算法结束。

AVERAG:	MOV	CON,N	;准备累加全部样本数据。
	MOV	DPTR,#ADR;指向存放样本数据的片外RAM首址。
	MOV	R0,#AVE	;将浮点累加器清零。
	LCALL	FCLR
AVE1:	MOV	R2,#3	;将一个样本数据传送到片内XI单元中。
	MOV	R1,#XI
AVE2:	MOVX	A,@DPTR
	MOV	@R1,A
	INC	R1
	INC	DPTR
	DJNZ	R2,AVE2
	MOV	R1,#XI	;将这个样本数据累加到AVE中。
	LCALL	FADD
	DJNZ	CON,AVE1;累加完全部样本数据。
	MOV	FN,#8	;将样本个数转换成格式化浮点数。
	MOV	FN+1,N
	MOV	FN+2,#0
	MOV	R0,#FN
	LCALL	FSDT
	MOV	R0,#AVE	;将累加和作为被除数。
	MOV	R1,#FN	;以样本个数为除数。
	LCALL	FDIV	;相除后得到平均值。
	RET		;求平均值的算法结束。

TABL:	DB	01H,0E7H,41H	;1.807   以下是200个测试样本数据。
	DB	01H,0DDH,83H	;1.731
	DB	01H,0E8H,14H	;1.813
	DB	01H,0E8H,0C3H	;1.818
	DB	01H,0E8H,7DH	;1.816
	DB	01H,0DCH,58H	;1.721
	DB	01H,0D7H,0E3H	;1.687
	DB	01H,0DAH,15H	;1.704
	DB	01H,0D6H,0CAH	;1.678
	DB	01H,0D6H,60H	;1.675
	DB	01H,0E9H,0FFH	;1.828
	DB	01H,0D9H,0F2H	;1.703
	DB	01H,0E1H,49H	;1.760
	DB	01H,0E6H,16H	;1.798
	DB	01H,0E2H,97H	;1.770
	DB	01H,0DFH,0EAH	;1.749
	DB	01H,0E0H,0E0H	;1.757
	DB	01H,0E2H,74H	;1.769
	DB	01H,0E2H,0AH	;1.766
	DB	01H,0E2H,0BAH	;1.771
	DB	01H,0E3H,8DH	;1.778
	DB	01H,0DAH,5BH	;1.706
	DB	01H,0DEH,8AH	;1.739
	DB	01H,0DCH,0C2H	;1.725
	DB	01H,0DAH,5BH	;1.706
	DB	01H,0E4H,0A6H	;1.786
	DB	01H,0DBH,97H	;1.716
	DB	01H,0D9H,0CFH	;1.702
	DB	01H,0E7H,1EH	;1.806
	DB	01H,0DEH,67H	;1.738
	DB	01H,0E7H,1EH	;1.806
	DB	01H,0DCH,6AH	;1.722
	DB	01H,0D7H,10H	;1.680
	DB	01H,0DEH,33H	;1.736
	DB	01H,0E9H,73H	;1.824
	DB	01H,0D5H,0D4H	;1.671
	DB	01H,0E3H,0D3H	;1.780
	DB	01H,0D5H,8EH	;1.668
	DB	01H,0EAH,69H	;1.831
	DB	01H,0D7H,56H	;1.682
	DB	01H,0DDH,0DBH	;1.733
	DB	01H,0E0H,0E0H	;1.757
	DB	01H,0E1H,6CH	;1.761
	DB	01H,0E3H,9EH	;1.778
	DB	01H,0E6H,28H	;1.798
	DB	01H,0E3H,35H	;1.775
	DB	01H,0DDH,08H	;1.727
	DB	01H,0E0H,76H	;1.754
	DB	01H,0E4H,94H	;1.786
	DB	01H,0E6H,91H	;1.801
	DB	01H,0D7H,79H	;1.683
	DB	01H,0E0H,53H	;1.753
	DB	01H,0DBH,63H	;1.714
	DB	01H,0E7H,87H	;1.809
	DB	01H,0D7H,79H	;1.683
	DB	01H,0D3H,0E8H	;1.656
	DB	01H,0D8H,0D9H	;1.694
	DB	01H,0D3H,0E8H	;1.656
	DB	01H,0DEH,33H	;1.736
	DB	01H,0E2H,2DH	;1.767
	DB	01H,0D8H,0B6H	;1.693
	DB	01H,0E3H,0C1H	;1.779
	DB	01H,0E9H,2DH	;1.822
	DB	01H,0DFH,05H	;1.742
	DB	01H,0DFH,4CH	;1.744
	DB	01H,0EBH,0EBH	;1.843
	DB	01H,0E1H,7EH	;1.762
	DB	01H,0DDH,0B8H	;1.732
	DB	01H,0DEH,9CH	;1.739
	DB	01H,0ECH,0EH	;1.844
	DB	01H,0DCH,24H	;1.720
	DB	01H,0D4H,75H	;1.660
	DB	01H,0E3H,00H	;1.773
	DB	01H,0EBH,0A5H	;1.841
	DB	01H,0D8H,0D9H	;1.694
	DB	01H,0E6H,91H	;1.801
	DB	01H,0EDH,4BH	;1.854
	DB	01H,0EDH,04H	;1.852
	DB	01H,0DEH,33H	;1.736
	DB	01H,0DFH,0A3H	;1.747
	DB	01H,0E2H,0AH	;1.766
	DB	01H,0DCH,58H	;1.721
	DB	01H,0DAH,0D6H	;1.710
	DB	01H,0DCH,12H	;1.719
	DB	01H,0EAH,69H	;1.831
	DB	01H,0D2H,0F2H	;1.648
	DB	01H,0D3H,15H	;1.649
	DB	01H,0E5H,8AH	;1.793
	DB	01H,0DFH,80H	;1.746
	DB	01H,0EDH,0D7H	;1.858
	DB	01H,0DFH,0B5H	;1.748
	DB	01H,0E2H,97H	;1.770
	DB	01H,0DEH,0F4H	;1.742
	DB	01H,0E3H,58H	;1.776
	DB	01H,0E5H,78H	;1.793
	DB	01H,0E5H,0BFH	;1.795
	DB	01H,0DAH,7EH	;1.707
	DB	01H,0E1H,0B2H	;1.763
	DB	01H,0E6H,0C6H	;1.803
	DB	01H,0D5H,01H	;1.664
	DB	01H,0E1H,6CH	;1.761
	DB	01H,0E9H,73H	;1.824
	DB	01H,0D6H,0CAH	;1.678
	DB	01H,0D8H,6FH	;1.691
	DB	01H,0DDH,60H	;1.729
	DB	01H,0E4H,3CH	;1.783
	DB	01H,0D0H,0D2H	;1.631
	DB	01H,0D1H,0D9H	;1.639
	DB	01H,0E9H,2DH	;1.822
	DB	01H,0E0H,88H	;1.754
	DB	01H,0DFH,29H	;1.743
	DB	01H,0DDH,0A6H	;1.732
	DB	01H,0DBH,63H	;1.714
	DB	01H,0DCH,12H	;1.719
	DB	01H,0E7H,0CEH	;1.811
	DB	01H,0E2H,1CH	;1.766
	DB	01H,0D6H,83H	;1.676
	DB	01H,0DFH,0FBH	;1.750
	DB	01H,0ECH,78H	;1.847
	DB	01H,0D0H,0D2H	;1.631
	DB	01H,0EFH,02H	;1.867
	DB	01H,0E0H,65H	;1.753
	DB	01H,0E3H,0D3H	;1.780
	DB	01H,0E4H,4EH	;1.784
	DB	01H,0D8H,0D9H	;1.694
	DB	01H,0E7H,1EH	;1.806
	DB	01H,0E0H,1EH	;1.751
	DB	01H,0E9H,0AH	;1.821
	DB	01H,0DDH,71H	;1.730
	DB	01H,0D8H,4CH	;1.690
	DB	01H,0DFH,0FBH	;1.750
	DB	01H,0E2H,0BAH	;1.771
	DB	01H,0E5H,32H	;1.791
	DB	01H,0EFH,5AH	;1.870
	DB	01H,0CCH,0A2H	;1.599
	DB	01H,0DDH,0FEH	;1.734
	DB	01H,0E3H,8DH	;1.778
	DB	01H,0DEH,67H	;1.738
	DB	01H,0EAH,69H	;1.831
	DB	01H,0F1H,0D2H	;1.889
	DB	01H,0DDH,2BH	;1.728
	DB	01H,0E1H,5BH	;1.761
	DB	01H,0E1H,0C4H	;1.764
	DB	01H,0E6H,5DH	;1.800
	DB	01H,0D6H,1AH	;1.673
	DB	01H,0F2H,0A5H	;1.896
	DB	01H,0DBH,74H	;1.714
	DB	01H,0E4H,0B7H	;1.787
	DB	01H,0E5H,67H	;1.792
	DB	01H,0D9H,42H	;1.697
	DB	01H,0D3H,5CH	;1.651
	DB	01H,0E1H,8FH	;1.762
	DB	01H,0E4H,94H	;1.786
	DB	01H,0DDH,0C9H	;1.733
	DB	01H,0E6H,0D8H	;1.803
	DB	01H,9AH,0E1H	;1.210
	DB	01H,0ACH,0CDH	;1.350
	DB	01H,8EH,14H	;1.110
	DB	01H,0DFH,0D8H	;1.749
	DB	02H,96H,66H	;2.350
	DB	01H,0DFH,0B5H	;1.748
	DB	01H,0E2H,0AH	;1.766
	DB	01H,0E5H,78H	;1.793
	DB	01H,0E4H,0ECH	;1.788
	DB	01H,0DFH,4CH	;1.744
	DB	01H,0E3H,7BH	;1.777
	DB	01H,0DDH,2BH	;1.728
	DB	01H,0DBH,0CCH	;1.717
	DB	01H,0DCH,12H	;1.719
	DB	01H,0E1H,37H	;1.760
	DB	01H,0E2H,0BAH	;1.771
	DB	01H,0E0H,65H	;1.753
	DB	01H,0DBH,0BH	;1.711
	DB	01H,0D9H,0F2H	;1.703
	DB	01H,0E3H,0D3H	;1.780
	DB	01H,0DAH,0F9H	;1.711
	DB	01H,0DCH,35H	;1.720
	DB	01H,0E4H,0ECH	;1.788
	DB	01H,0EAH,0AFH	;1.833
	DB	01H,0DEH,8AH	;1.739
	DB	01H,0DDH,1AH	;1.727
	DB	01H,0E1H,0F9H	;1.765
	DB	01H,0DDH,08H	;1.727
	DB	01H,0E1H,8FH	;1.762
	DB	01H,0E3H,0D3H	;1.780
	DB	01H,0E0H,42H	;1.752
	DB	01H,0DAH,0A1H	;1.708
	DB	01H,0D9H,77H	;1.699
	DB	01H,0E5H,0BFH	;1.795
	DB	01H,0D8H,29H	;1.689
	DB	01H,0E7H,1EH	;1.806
	DB	01H,0D9H,0E0H	;1.702
	DB	01H,0DCH,47H	;1.721
	DB	01H,0DFH,3AH	;1.744
	DB	01H,0DDH,0B8H	;1.732
	DB	01H,0DFH,80H	;1.746
	DB	01H,0E5H,67H	;1.792
	DB	01H,0E6H,6EH	;1.800
	DB	01H,0DAH,0F9H	;1.711
	DB	01H,0E2H,62H	;1.769

;以下是浮点子程序库中的有关子程序。
FSDT:	LCALL	MVR0
	LCALL	RLN
	LJMP	MOV0

FADD:	CLR	F0
	SJMP	AS
FSUB:	SETB	F0
AS:	LCALL	MVR1
	MOV	C,F0
	RRC	A
	XRL	A,@R1
	MOV	C,ACC.7
ASN:	MOV	PFB,C
	XRL	A,@R0
	RLC	A
	MOV	F0,C
	LCALL	MVR0
	LCALL	AS1
MOV0:	INC	R0
	INC	R0
	MOV	A,R4
	MOV	@R0,A
	DEC	R0
	MOV	A,R3
	MOV	@R0,A
	DEC	R0
	MOV	A,R2
	MOV	C,PFA
	MOV	ACC.7,C
	MOV	@R0,A
	CLR	ACC.7
	CLR	OV
	CJNE	A,#3FH,MV01
	SETB	OV
MV01:	MOV	A,@R0
	RET

MVR0:	MOV	A,@R0
	MOV	C,ACC.7
	MOV	PFA,C
	MOV	C,ACC.6
	MOV	ACC.7,C
	MOV	R2,A
	INC	R0
	MOV	A,@R0
	MOV	R3,A
	INC	R0
	MOV	A,@R0
	MOV	R4,A
	DEC	R0
	DEC	R0
	RET

MVR1:	MOV	A,@R1
	MOV	C,ACC.7
	MOV	PFB,C
	MOV	C,ACC.6
	MOV	ACC.7,C
	MOV	R5,A
	INC	R1
	MOV	A,@R1
	MOV	R6,A
	INC	R1
	MOV	A,@R1
	MOV	R7,A
	DEC	R1
	DEC	R1
	RET

AS1:	MOV	A,R6

⌨️ 快捷键说明

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