📄 tj.asm
字号:
;能剔除粗大误差样本的统计算法。
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 + -