📄 数字滤波子程序.txt
字号:
DEC R0
DJNZ R7,LDGloop
JMP PDWD
LDG1: ;CLR ZZLDBZ ;'非真正零点
;' 以下程序判断数据稳定
PDWD: MOV R1,#ZMAX ;'数字滤波时,存10次中最大值
LCALL R1W2 ;'10次中最大值送WRA2
LCALL R1W1 ;'10次中最小值送WRA1
CALL FSB ;'极差=ZMAX-ZMIN ;'WRA2-WRA1->WRA1
CALL CFDZ ;'找出检定分度值在计算用分度值表FDZ中的地址偏移量
;' 出口:DPTR
CALL DPC2
INC WRA2+3 ;'2e
mov R2,#0fbh ;送低地址
mov R4,#01fh ;高地址
call BYTERD ;A为出口
cjne A,#1,NextWDFW0
INC WRA2+3 ;'4e
;call qddx ;For testing
jmp WDFWOK
NextWDFW0:
cjne A,#2,NextWDFW1
INC WRA2+3 ;'4e
INC WRA2+3 ;'8e
;call qdcx ;For testing
jmp WDFWOK
NextWDFW1:
cjne A,#3,NextWDFW2
INC WRA2+3 ;'4e
INC WRA2+3 ;'8e
INC WRA2+3 ;'16e
;call qddx ;For testing
jmp WDFWOK
NextWDFW2:
INC WRA2+3 ;'4e
INC WRA2+3 ;'8e
INC WRA2+3 ;'16e
INC WRA2+3 ;'32e
;call qdcx ;For testing
WDFWOK:
CALL BJ ;'比较极差和16e的大小,结果在C和F0
JC PDWD2 ;'16e<极差转
;********************************************************************************************
mov c,SJWD
jc next ;如果已经稳定了,则跳转到NEXT
;lcall fill
;********************************************************************************************
next:
SETB SJWD ;'置称重数据稳定标志
; ORL XSH+11,#60H ;'显示单位kg
LCALL XSKG ;'显示单位KG
LCALL XSWD ;'显示称定状态
JMP ZCJS
PDWD2: CLR SJWD ;'置称重数据不稳定标志
; ANL XSH+11,#9FH ;'熄灭单位kg
LCALL XSKG ;'显示单位KG
LCALL XSNWD ;'显示不稳定状态
ZCJS:
;保存当前的JZZ
mov DPTR,#Last_JZZ ;写入口1
mov R1,#JZZ ;写入口2
lcall R1TDP ;调用存储函数将JZZ保存到Last_JZZ
RET
SRSBUF: MOV DPTR,#RSBUF
MOV A,#02H ;1
MOVX @DPTR,A ;送起始符
INC DPTR ;状态符空,地址为1
INC DPTR ;序号头,#或L
INC DPTR ;2
MOV A,XSH+10
CJNE A,#2BH,SRSBUFF
MOV A,#46H ;F
LJMP SRSBUFA
SRSBUFF:CJNE A,#0FH,SRSBUFE
MOV A,#046H
LJMP SRSBUFA ;若为负称,则为F
SRSBUFE:CLR C
MOV B,A
SUBB A,#1CH
JC SRSBUFC
MOV B,A ;若大于1C,则减1C
SRSBUFC:MOV A,B
ADD A,#30H
SRSBUFA:MOVX @DPTR,A
INC DPTR
MOV A,XSH+9
ADD A,#30H
MOVX @DPTR,A
INC DPTR
MOV A,XSH+8 ;3
CLR C
MOV B,A
SUBB A,#1CH
JC SRSBUFD
MOV B,A
SRSBUFD:MOV A,B
ADD A,#30H
SRSBUFB:MOVX @DPTR,A ;送序号
INC DPTR
MOV A,#20H
MOVX @DPTR,A ;1
MOV R7,#8
MOV DPTR,#RSBUF+15
MOV R0,#XSH+0 ;8
RSBUF1: DB 0A5H ;只有WW77E58可用,是一个指令码
MOV A,@R0
MOV B,A
CLR C
SUBB A,#01CH
JC RSBUF6 ;当不带点时,跳
MOV B,A ;将余下的数给B,
MOV A,#2EH
MOVX @DPTR,A ;写一个小数点
DB 0A5H
DEC R7
RSBUF6: MOV A,B ;取出值
CJNE A,#1BH,RSBUF2
MOV A,#2DH ;-
LJMP RSBUF4
RSBUF2: CJNE A,#10H,RSBUF3
MOV A,#20H ;' '
LJMP RSBUF4
RSBUF3: CJNE A,#0CH,RSBUFA1
MOV A,#43H ;c
LJMP RSBUF4
RSBUFA1:CJNE A,#0FH,RSBUFA2
MOV A,#46H ;f
LJMP RSBUF4
RSBUFA2:CJNE A,#17H,RSBUFA3
MOV A,#48H ;h
LJMP RSBUF4
RSBUFA3:CJNE A,#0AH,RSBUFA4
MOV A,#41H ;a
LJMP RSBUF4
RSBUFA4:CJNE A,#16H,RSBUFA5
MOV A,#4FH ;o
LJMP RSBUF4
RSBUFA5:CJNE A,#19H,RSBUFA6
MOV A,#55H ;u
LJMP RSBUF4
RSBUFA6:
ADD A,#30H ;当为负号时,转为负号,当为空格时转为空格,当为数字时,转为字符
RSBUF4: MOVX @DPTR,A
INC R0
DJNZ R7,RSBUF1 ;共8个
MOV DPTR,#RSBUF+15
MOV A,#20H
MOVX @DPTR,A
INC DPTR ;1
MOV A,#6BH
MOVX @DPTR,A ;2
INC DPTR ;KG
MOV A,#67H
MOVX @DPTR,A
INC DPTR
MOV A,#0DH
MOVX @DPTR,A ;1
MOV DPTR,#RSBUF+11
MOVX A,@DPTR
CLR C
SUBB A,#40H ;当小于40H,时,说明是数字,当大于时,说明是字母,则不显示单位
JC RSBUF7
MOV DPTR,#RSBUF+16
MOV A,#20H
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
RSBUF7:
MOV DPTR,#RSBUF ;校验第一个已经取出
MOVX A,@DPTR
MOV R1,A
INC DPTR
MOV R7,#18
RSBUF5: MOVX A,@DPTR
XRL A,R1
MOV R1,A
INC DPTR
DJNZ R7,RSBUF5
MOV A,R1 ;取出校验值
MOV DPTR,#RSBUF+19
MOVX @DPTR,A
MOV COMJSQ,#00H
MOV SBUF1,#02H ;发送起始符
RSBUFEND: RET
nop
nop
nop
ljmp START
nop
nop
nop
ljmp START
SZWDFWm:
call SZWDFW ;'设置稳定范围
ret
nop
nop
nop
ljmp START
nop
nop
nop
ljmp START
SZHLSJm:
call SZHLSJ ; 设置回0时间
ret
nop
nop
nop
ljmp START
nop
nop
nop
ljmp START
SZHLFWm:
call SZHLFW ; 设置回0范围 060216 modified
ret
nop
nop
nop
ljmp START
nop
nop
nop
ljmp START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -