📄 bd.asm
字号:
;仪器系数自动标定算法。
FORMER EQU 2000H ;五个模型的已知含量数据存放首址。
CPS EQU 2030H ;五个模型的检测数据存放首址。
RTKS1 EQU 2060H ;9个小写字母系数存放首址。
RTKS2 EQU 2080H ;9个大写字母系数存放首址。
RTKS0 EQU 209BH ;3个本底计数率存放首址。
POINT1 DATA 13H ;辅助指针1。
POINT2 DATA 14H ;辅助指针2。
CONT DATA 2FH ;计数器。
TEMP EQU 5DH ;浮点数辅助存放单元首址。
OK 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 SP,#67H ;设置系统堆栈。
CLR OK ;初始化成功标志。
MOV P2,#20H ;片外RAM使用页面。
MOV R0,#0 ;将模型含量和检测到的计数率拷贝到片外RAM中。
MOV DPTR,#QQQ
COPY: CLR A
MOVC A,@A+DPTR
MOVX @R0,A
INC R0
INC DPTR
CJNE R0,#60H,COPY
LCALL BD ;调用仪器系数标定算法。
STOP: LJMP STOP ;标定结束。
;标定的结果:
;R1: 4.287 ( 2080H:03H,89H,2EH )
;R2:-2.185 ( 2083H:82H,8BH,0D8H )
;R3:-0.1944 ( 2086H:0FEH,0C7H,09H )
;T1:-0.3185 ( 2089H:0FFH,0A3H,12H )
;T2: 10.56 ( 208CH:04H,0A8H,0F6H )
;T3:-0.2129 ( 208FH:0FEH,0DAH,08H )
;K1:-0.3802 ( 2092H:0FFH,0C2H,0A9H )
;K2:-0.1864 ( 2095H:0FEH,0BEH,0E0H )
;K3: 0.3893 ( 2098H:7FH,0C7H,54H )
;铀道本底: 0.2785 ( 209BH:7FH,8EH,94H )
;钍道本底: 0.1106 ( 209EH:7DH,0E2H,78H )
;钾道本底: 0.6740 ( 20A1H:00H,0ACH,90H )
BD : CLR OK ;初始化成功标志。
MOV P2,#HIGH(RTKS1) ;将标定结果存放空间清零。
MOV R0,#LOW(RTKS1)
CLR A
INIT1 : MOVX @R0,A
INC R0
CJNE R0,#0B0H,INIT1
MOV CONT,#5 ;准备进行5次迭代运算。
BIAD : MOV POINT1,#0;铀道。
MOV POINT2,#60H;系数存放首址。
LCALL RTK ;计算系数r1、r2、r3。
MOV POINT1,#3;钍道。
MOV POINT2,#69H;系数存放首址。
LCALL RTK ;计算系数t1、t2、t3。
MOV POINT1,#6;钾道。
MOV POINT2,#72H;系数存放首址。
LCALL RTK ;计算系数k1、k2、k3。
MOV R0,#60H ;将刚刚计算出来的9个系数,
MOV R1,#30H ;存放的片内RAM中。
BID1 : MOVX A,@R0
MOV @R1,A
INC R0
INC R1
CJNE R1,#4BH,BID1
MOV R0,#24H ;将零值模型的含量数据,
MOV R1,#4BH ;也调入片内RAM中。
BID2 : MOVX A,@R0
MOV @R1,A
INC R0
INC R1
CJNE R1,#54H,BID2
LCALL JIS1 ;计算理论上各道的净计数率。
MOV POINT1,#0;铀道。
MOV POINT2,#30H;零值模型铀道理论计数率。
LCALL DISU ;通过与实测计数率比较,求得铀道本底计数率。
MOV POINT1,#3;钍道。
MOV POINT2,#39H;零值模型钍道理论计数率。
LCALL DISU ;通过与实测计数率比较,求得钍道本底计数率。
MOV POINT1,#6;钾道。
MOV POINT2,#42H;零值模型钾道理论计数率。
LCALL DISU ;通过与实测计数率比较,求得钾道本底计数率。
DEC CONT ;完成一次迭代运算。
MOV A,CONT ;五次迭代运算全部完成否?
JZ BIDU
LJMP BIAD ;未完成,继续迭代。
BIDU : MOV R0,#60H ;将9个小写字母系数,
MOV R1,#30H ;调入片内RAM中,准备转换成9个大写字母系数。
BIDK : MOVX A,@R0
MOV @R1,A
INC R0
INC R1
CJNE R0,#7BH,BIDK
LCALL DETA ;求系数行列式的值。
MOV DPTR,#RTKS2;系数R1、R2、R3存放地址。
MOV R2,#3CH
MOV R3,#45H
LCALL KTR ;计算并存放R1。
MOV R2,#45H
MOV R3,#33H
LCALL KTR ;计算并存放R2。
MOV R2,#33H
MOV R3,#3CH
LCALL KTR ;计算并存放R3。
MOV DPTR,#RTKS2+9;系数T1、T2、T3存放地址。
MOV R2,#42H
MOV R3,#39H
LCALL KRT ;计算并存放T1。
MOV R2,#30H
MOV R3,#42H
LCALL KRT ;计算并存放T2。
MOV R2,#39H
MOV R3,#30H
LCALL KRT ;计算并存放T3。
MOV DPTR,#RTKS2+18;系数K1、K2、K3存放地址。
MOV R2,#39H
MOV R3,#42H
LCALL KTR ;计算并存放K1。
MOV R2,#42H
MOV R3,#30H
LCALL KTR ;计算并存放K2。
MOV R2,#30H
MOV R3,#39H
LCALL KTR ;计算并存放K3。
MOV R1,#4BH ;将混合模型的实测计数率,
MOV R0,#5AH ;调入片内RAM中。
MM : MOVX A,@R1
MOV @R0,A
INC R0
INC R1
CJNE R0,#63H,MM
LCALL JISN ;用转换后的系数计算混合模型的含量数据。
MOV R0,#1BH ;取混合模型的实际含量数据。
MOV R1,#54H
BID5 : MOVX A,@R0
MOV @R1,A
INC R0
INC R1
CJNE R1,#TEMP,BID5
MOV R0,#30H ;指向计算出来的铀含量。
MOV R1,#54H ;指向实际铀含量。
MOV TEMP,#7CH;允许误差范围为百分之四。
MOV TEMP+1,#0A3H
MOV TEMP+2,#0D8H
LCALL COVV ;计算铀含量相对测量误差。
JNB ACC.7,BIDE;超过百分之四,标定失败。
MOV R0,#39H ;指向计算出来的钍含量。
MOV R1,#57H ;指向实际钍含量。
MOV TEMP,#7CH;允许误差范围为百分之六。
MOV TEMP+1,#0F5H
MOV TEMP+2,#0C3H
LCALL COVV ;计算钍含量相对测量误差。
JNB ACC.7,BIDE;超过百分之六,标定失败。
MOV R0,#42H ;指向计算出来的钾含量。
MOV R1,#5AH ;指向实际钾含量。
MOV TEMP,#7DH;允许误差范围为百分之十二。
MOV TEMP+1,#0F5H
MOV TEMP+2,#0C3H
LCALL COVV ;计算钾含量相对测量误差。
JNB ACC.7,BIDE;超过百分之十二,标定失败。
SETB OK ;各项误差均未超标,标定成功。
BIDE : RET ;算法结束。
KRT: MOV A,R2
MOV R0,A
MOV R1,#4BH
LCALL KRT3
INC R0
INC R0
INC R0
LCALL KRT3
MOV A,R3
MOV R0,A
MOV R1,#57H
LCALL KRT3
INC R0
INC R0
INC R0
LCALL KRT3
LJMP KTR2
KRT3: MOV R4,#3
KRT4: MOV A,@R0
MOV @R1,A
INC R0
INC R1
DJNZ R4,KRT4
RET
KTR: MOV A,R2
MOV R0,A
MOV R1,#4BH
KTR0: MOV A,@R0
MOV @R1,A
INC R0
INC R1
CJNE R1,#51H,KTR0
MOV A,R3
MOV R0,A
MOV R1,#57H
KTR1: MOV A,@R0
MOV @R1,A
INC R0
INC R1
CJNE R1,#5DH,KTR1
KTR2: MOV R0,#57H
MOV R1,#4EH
LCALL FMUL
MOV R0,#4BH
MOV R1,#5AH
LCALL FMUL
MOV R1,#57H
LCALL FSUB
MOV R1,#54H
LCALL FDIV
MOV A,4BH
MOVX @DPTR,A
INC DPTR
MOV A,4CH
MOVX @DPTR,A
INC DPTR
MOV A,4DH
MOVX @DPTR,A
INC DPTR
RET
COVV: LCALL FSUB
MOV A,@R0
CLR ACC.7
MOV @R0,A
LCALL FDIV
MOV R1,#5DH
LJMP FSUB
DISU: MOV A,#54H
ADD A,13H
MOV R0,A
MOVX A,@R0
MOV 5DH,A
INC R0
MOVX A,@R0
MOV 5EH,A
INC R0
MOVX A,@R0
MOV 5FH,A
MOV R1,14H
MOV R0,#5DH
LCALL SUBN
MOV A,13H
ADD A,#9BH
MOV R0,A
MOV A,5DH
MOVX @R0,A
INC R0
MOV A,5EH
MOVX @R0,A
INC R0
MOV A,5FH
MOVX @R0,A
RET
RTK: MOV R0,#0
MOV R1,#30H
RTK0: MOVX A,@R0
MOV @R1,A
INC R0
INC R1
CJNE R1,#4BH,RTK0
MOV A,13H
ADD A,#9BH
MOV R1,A
MOV R0,#5DH
LCALL RDF
MOV A,#30H
ADD A,13H
MOV R1,A
MOV R0,#4BH
LCALL RDF
MOV R0,#4EH
MOV A,#39H
ADD A,13H
MOV R1,A
LCALL RDF
MOV R0,#51H
MOV A,#42H
ADD A,13H
MOV R1,A
LCALL RDF
MOV R1,#5DH
MOV R0,#4BH
LCALL SUBN
MOV R0,#4EH
LCALL SUBN
MOV R0,#51H
LCALL SUBN
LCALL XYZ
MOV R0,#5DH
MOV R1,14H
RTK1: MOV A,@R0
MOVX @R1,A
INC R0
INC R1
CJNE R0,#66H,RTK1
RET
RDF: MOV B,#3
RDF0: MOVX A,@R1
MOV @R0,A
INC R0
INC R1
DJNZ B,RDF0
RET
SUBN: LCALL FSUB
MOV A,@R0
JB ACC.7,SUBE
RET
SUBZ: LCALL FSUB
MOV A,@R0
JBC ACC.7,SBZE
SUBE: CLR A
INC R0
MOV @R0,A
INC R0
MOV @R0,A
DEC R0
DEC R0
MOV A,#41H
SBZE: MOV @R0,A
RET
JISN: MOV R0,#80H
MOV R1,#30H
JIN0: MOVX A,@R0
MOV @R1,A
INC R0
INC R1
CJNE R1,#54H,JIN0
MOV R0,#4BH
MOV R1,#5AH
LCALL SUBZ
MOV R1,#5DH
MOV R0,#4EH
LCALL SUBZ
MOV R1,#60H
MOV R0,#51H
LCALL SUBZ
JIS1: MOV R1,#4BH
MOV R0,#30H
LCALL FMUL
MOV R0,#39H
LCALL FMUL
MOV R0,#42H
LCALL FMUL
MOV R1,#4EH
MOV R0,#33H
LCALL FMUL
MOV R0,#3CH
LCALL FMUL
MOV R0,#45H
LCALL FMUL
MOV R1,#51H
MOV R0,#36H
LCALL FMUL
MOV R0,#3FH
LCALL FMUL
MOV R0,#48H
LCALL FMUL
MOV R0,#30H
MOV R1,#33H
LCALL FADD
MOV R1,#36H
LCALL FADD
MOV R0,#39H
MOV R1,#3CH
LCALL FADD
MOV R1,#3FH
LCALL FADD
MOV R0,#42H
MOV R1,#45H
LCALL FADD
MOV R1,#48H
LJMP FADD
XYZ: LCALL DETA
MOV 63H,54H
MOV 64H,55H
MOV 65H,56H
MOV R0,#30H
MOV R1,#4BH
LCALL XCHM
LCALL DETA
MOV R1,#63H
LCALL FDIV
MOV 5DH,54H
MOV 5EH,55H
MOV 5FH,56H
MOV R0,#30H
MOV R1,#4BH
LCALL XCHM
MOV R0,#33H
MOV R1,#4BH
LCALL XCHM
LCALL DETA
MOV R1,#63H
LCALL FDIV
MOV 60H,54H
MOV 61H,55H
MOV 62H,56H
MOV R0,#33H
MOV R1,#4BH
LCALL XCHM
MOV R0,#36H
MOV R1,#4BH
LCALL XCHM
LCALL DETA
MOV R1,#63H
LCALL FDIV
MOV 63H,54H
MOV 64H,55H
MOV 65H,56H
RET
XCHM: MOV R2,#3
XCH1: MOV R3,#3
XCH2: MOV A,@R0
XCH A,@R1
XCH A,@R0
INC R0
INC R1
DJNZ R3,XCH2
MOV A,#6
ADD A,R0
MOV R0,A
DJNZ R2,XCH1
RET
DETA: MOV 5AH,30H
MOV 5BH,31H
MOV 5CH,32H
MOV R0,#5AH
MOV R1,#45H
LCALL FMUL
MOV R1,#3FH
LCALL FMUL
MOV 54H,33H
MOV 55H,34H
MOV 56H,35H
MOV R0,#54H
MOV R1,#39H
LCALL FMUL
MOV R1,#48H
LCALL FMUL
MOV R1,#5AH
LCALL FADD
MOV 5AH,36H
MOV 5BH,37H
MOV 5CH,38H
MOV R0,#5AH
MOV R1,#3CH
LCALL FMUL
MOV R1,#42H
LCALL FMUL
MOV R1,#54H
LCALL FADD
MOV 54H,30H
MOV 55H,31H
MOV 56H,32H
MOV R0,#54H
MOV R1,#3CH
LCALL FMUL
MOV R1,#48H
LCALL FMUL
MOV 57H,36H
MOV 58H,37H
MOV 59H,38H
MOV R0,#57H
MOV R1,#39H
LCALL FMUL
MOV R1,#45H
LCALL FMUL
MOV R1,#54H
LCALL FADD
MOV 54H,33H
MOV 55H,34H
MOV 56H,35H
MOV R0,#54H
MOV R1,#3FH
LCALL FMUL
MOV R1,#42H
LCALL FMUL
MOV R1,#57H
LCALL FADD
MOV R1,#5AH
LJMP FSUB
QQQ: DB 8,89H,66H ;铀模型的铀含量:137.4
DB 4,99H,0C3H ;铀模型的钍含量:9.61
DB 0,97H,0AH ;铀模型的钾含量:0.59
DB 3,0A1H,9AH ;钍模型的铀含量:5.05
DB 9,8EH,26H ;钍模型的钍含量:284.3
DB 7FH,0BDH,71H ;钍模型的钾含量:0.37
DB 2,9BH,85H ;钾模型的铀含量:2.43
DB 4,86H,0B8H ;钾模型的钍含量:8.42
DB 3,0B6H,0B8H ;钾模型的钾含量:5.71
DB 7,0EDH,0CDH ;混合模型的铀含量:118.9
DB 9,87H,73H ;混合模型的钍含量:270.9
DB 2,0C3H,33H ;混合模型的钾含量:3.05
DB 2,0B8H,0F6H ;零值模型的铀含量:2.89
DB 3,0E9H,9AH ;零值模型的钍含量:7.3
DB 0,0E6H,66H ;零值模型的钾含量:0.9
DB 0,0AAH,55H
DB 6,8DH,96H ;铀模型的铀道计数率:35.396
DB 2,0B4H,0FFH ;铀模型的钍道计数率:2.828
DB 6,97H,26H ;铀模型的钾道计数率:37.787
DB 5,89H,3BH ;钍模型的铀道计数率:17.154
DB 5,0E1H,50H ;钍模型的钍道计数率:28.164
DB 5,0FCH,4CH ;钍模型的钾道计数率:31.537
DB 2,8FH,14H ;钾模型的铀道计数率:2.236
DB 1,0A8H,06H ;钾模型的钍道计数率:1.313
DB 5,8EH,0A0H ;钾模型的钾道计数率:17.828
DB 6,0B5H,0B2H ;混合模型的铀道计数率:45.424
DB 5,0E3H,91H ;混合模型的钍道计数率:28.446
DB 7,84H,55H ;混合模型的钾道计数率:66.166
DB 1,0C5H,88H ;零值模型的铀道计数率:1.543
DB 0,0EBH,59H ;零值模型的钍道计数率:0.919
DB 3,93H,77H ;零值模型的钾道计数率:4.608
DB 0,0AAH,55H
;以下是浮点子运算程序:
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
ORL A,R7
JZ AS2
MOV A,R3
ORL A,R4
JNZ EQ1
MOV A,R6
MOV R3,A
MOV A,R7
MOV R4,A
MOV A,R5
MOV R2,A
MOV C,PFB
MOV PFA,C
AS2: RET
EQ1: MOV A,R2
XRL A,R5
JZ AS4
JB ACC.7,EQ3
MOV A,R2
CLR C
SUBB A,R5
JC EQ4
EQ2: CLR C
MOV A,R6
RRC A
MOV R6,A
MOV A,R7
RRC A
MOV R7,A
INC R5
ORL A,R6
JNZ EQ1
MOV A,R2
MOV R5,A
SJMP AS4
EQ3: MOV A,R2
JNB ACC.7,EQ2
EQ4: CLR C
LCALL RR1
ORL A,R3
JNZ EQ1
MOV A,R5
MOV R2,A
AS4: JB F0,AS5
MOV A,R4
ADD A,R7
MOV R4,A
MOV A,R3
ADDC A,R6
MOV R3,A
JNC AS2
LJMP RR1
AS5: CLR C
MOV A,R4
SUBB A,R7
MOV B,A
MOV A,R3
SUBB A,R6
JC AS6
MOV R4,B
MOV R3,A
LJMP RLN
AS6: CPL PFA
CLR C
MOV A,R7
SUBB A,R4
MOV R4,A
MOV A,R6
SUBB A,R3
MOV R3,A
RLN: MOV A,R3
ORL A,R4
JNZ RLN1
MOV R2,#0C1H
RET
RLN1: MOV A,R3
JB ACC.7,RLN2
CLR C
LCALL RL1
SJMP RLN
RLN2: CLR OV
RET
RL1: MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
DEC R2
CJNE R2,#0C0H,RL1E
CLR A
MOV R3,A
MOV R4,A
MOV R2,#0C1H
RL1E: CLR OV
RET
RR1: MOV A,R3
RRC A
MOV R3,A
MOV A,R4
RRC A
MOV R4,A
INC R2
CLR OV
CJNE R2,#40H,RR1E
MOV R2,#3FH
SETB OV
RR1E: RET
FMUL: LCALL MVR0
MOV A,@R0
XRL A,@R1
RLC A
MOV PFA,C
LCALL MUL0
LJMP MOV0
MUL0: LCALL MVR1
MUL1: MOV A,R3
ORL A,R4
JZ MUL6
MOV A,R6
ORL A,R7
JZ MUL5
MOV A,R7
MOV B,R4
MUL AB
MOV A,B
XCH A,R7
MOV B,R3
MUL AB
ADD A,R7
MOV R7,A
CLR A
ADDC A,B
XCH A,R4
MOV B,R6
MUL AB
ADD A,R7
MOV R7,A
MOV A,B
ADDC A,R4
MOV R4,A
CLR A
RLC A
XCH A,R3
MOV B,R6
MUL AB
ADD A,R4
MOV R4,A
MOV A,B
ADDC A,R3
MOV R3,A
JB ACC.7,MUL2
MOV A,R7
RLC A
MOV R7,A
LCALL RL1
MUL2: MOV A,R7
JNB ACC.7,MUL3
INC R4
MOV A,R4
JNZ MUL3
INC R3
MOV A,R3
JNZ MUL3
MOV R3,#80H
INC R2
MUL3: MOV A,R2
ADD A,R5
MD: MOV R2,A
JB ACC.7,MUL4
JNB ACC.6,MUL6
MOV R2,#3FH
SETB OV
RET
MUL4: JB ACC.6,MUL6
MUL5: CLR A
MOV R3,A
MOV R4,A
MOV R2,#41H
MUL6: CLR OV
RET
FDIV: INC R0
MOV A,@R0
INC R0
ORL A,@R0
DEC R0
DEC R0
JNZ DIV1
MOV @R0,#41H
CLR OV
RET
DIV1: INC R1
MOV A,@R1
INC R1
ORL A,@R1
DEC R1
DEC R1
JNZ DIV2
SETB OV
RET
DIV2: LCALL MVR0
MOV A,@R0
XRL A,@R1
RLC A
MOV PFA,C
LCALL MVR1
LCALL DIV3
LJMP MOV0
DIV3: CLR C
MOV A,R4
SUBB A,R7
MOV A,R3
SUBB A,R6
JC DIV4
LCALL RR1
SJMP DIV3
DIV4: CLR A
XCH A,R0
PUSH ACC
CLR A
XCH A,R1
PUSH ACC
MOV A,R2
PUSH ACC
MOV B,#10H
DIV5: CLR C
MOV A,R1
RLC A
MOV R1,A
MOV A,R0
RLC A
MOV R0,A
MOV A,R4
RLC A
MOV R4,A
XCH A,R3
RLC A
XCH A,R3
MOV F0,C
CLR C
SUBB A,R7
MOV R2,A
MOV A,R3
SUBB A,R6
ANL C,/F0
JC DIV6
MOV R3,A
MOV A,R2
MOV R4,A
INC R1
DIV6: DJNZ B,DIV5
MOV A,R6
CLR C
RRC A
SUBB A,R3
CLR A
ADDC A,R1
MOV R4,A
CLR A
ADDC A,R0
MOV R3,A
POP ACC
MOV R2,A
POP ACC
MOV R1,A
POP ACC
MOV R0,A
MOV A,R2
CLR C
SUBB A,R5
LCALL MD
LJMP RLN
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -