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

📄 数字滤波子程序.txt

📁 基于51单片机的滤波程序
💻 TXT
📖 第 1 页 / 共 2 页
字号:
	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 + -