?? soc080225.asm
字號:
MOV DSPL5,#0EH ;;;傳感器信號線接反,或者傳感器上附加重量過大
MOV DSPL4,#18H ;;;顯示" Err-1"
MOV DSPL3,#18H
MOV DSPL2,#16H
MOV DSPL1,#01H
SJMP STCLR
STCLR2:
MOV MNDAT1,CQDAT1 ;;;保存修補質量對應的內碼
MOV MNDAT2,CQDAT2
MOV A,#15H
LCALL DISPLAY5 ;;;清0顯示
MOV DSPL1,#00H
JNB DDT,STCLR3
MOV DSPL2,#00H ;;;小數點顯示
STCLR3:
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INIB: ;;;功能說明:設置初始狀態位和狀態字.
CLR WDBB
CLR DDT ;;;開機允許小數點顯示
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
COMP: ;;;功能說明:處理每次稱重值
NOP
NOP
JBC ADEN,COMP0
RET
COMP0:
MOV DATZ1,DATD1
MOV DATZ2,DATD2
LCALL PCB ;;;對質量進行處理.
MOV TEMP1,MNDAT1
MOV TEMP2,MNDAT2 ;;;(D1-D0)*M/D
MOV CQDAT1,DQXS1
MOV CQDAT2,DQXS2
LCALL CTOM ;;;將內碼轉換為質量存放在DATZ
JBC BDB,COMP2
JB SYMB,COMP01
LCALL LIMCOMP
JNB LMC,COMP01
MOV DSPL5,#0EH ;;;并返回到重新稱量狀態.
MOV DSPL4,#18H ;;;超載顯示" Err-2"
MOV DSPL3,#18H
MOV DSPL2,#16H
MOV DSPL1,#04H
JMP COMP
COMP01:
MOV R5,CQXS1
MOV R6,CQXS2
COMP1:
MOV R1,#DSPT1 ;;;DATZ<MMDAT顯示負數
MOV R7,#00H
LCALL BCD ;;;數據轉換為顯示值送DSPT
MOV R2,#04H ;;;;;;;;;;;;;;;05H
MOV R0,#DSPT5 ;;;;;;;;;;;;;;;DSPT5
LCALL BANK ;;;顯示消隱
LCALL TTOL5 ;;;;;;;;;;;;;;;;TTOL5
JNB SYMB,COMP2
MOV A,CQXS1
ORL A,CQXS2
JZ COMP2 ;;;為0時不顯示負號
MOV DSPL5,#16H ;;;;;;;;;;;;;;;
COMP2:
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PCB: ;;;功能說明:根據當前接收到的質量與上一次的質量判斷秤體的狀態
MOV A,PREDAT1
JNZ PCB1
MOV A,PREDAT2
JNZ PCB1
MOV PREDAT1,DATZ1
MOV PREDAT2,DATZ2
RET
PCB1:
MOV R3,DATZ1
MOV R4,DATZ2
MOV R5,PREDAT1
MOV R6,PREDAT2
LCALL MAXMIN
MOV PREDAT1,DATZ1
MOV PREDAT2,DATZ2
MOV A,ADAT2
JNZ PCB2 ;;;確定為非穩定狀態
MOV A,ADAT1
JNZ PCB2 ;;;確定為非穩定狀態
INC WDB ;;;確定為穩定狀態
INC WDB1
MOV A,WDB
CLR C
SUBB A,#18H
JNC PCB6 ;;;直接更新序列
MOV A,WDB1
CJNE A,#06H,PCB3 ;;;直接更新序列
MOV WDB1,#00H
JMP PCB7 ;;;小于時轉入第一級濾波中
PCB2:
MOV WDB,#00H
MOV WDB1,#00H
MOV A,ADAT1
CLR C
SUBB A,#40H ;;;將差值與40H比較.
MOV A,ADAT2
SUBB A,#00H
JC PCB3 ;;;確定為擺動狀態
MOV A,ADAT2
CLR C
RRC A
MOV DQXS2,A
MOV A,ADAT1
RRC A
ADD A,MIN1
MOV DQXS1,A ;;;確定為抖動狀態
MOV A,DQXS2
ADDC A,MIN2
MOV DQXS2,A
RET
PCB3:
LCALL PXCPP ;;;第二級排序
RET
PCB7:
LCALL PXCPP06
RET
PCB6:
MOV DQXS1,DATZ1
MOV DQXS2,DATZ2
MOV WDB,#00H
MOV A,LED1
SETB ACC.0 ;;;穩定狀態燈亮.
MOV LED1,A
SETB WDBB
PCB8:
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAXMIN: ;;;判斷兩個數據的大小并求出差值.
MOV A,R3
CLR C
SUBB A,R5
MOV ADAT1,A
MOV A,R4
SUBB A,R6
MOV ADAT2,A
JC MAXMIN1
MOV MAX1,R3
MOV MAX2,R4
MOV MIN1,R5
MOV MIN2,R6
RET
MAXMIN1:
MOV A,ADAT1
CPL A
ADD A,#01H
MOV ADAT1,A
MOV A,ADAT2
CPL A
ADDC A,#00H
MOV ADAT2,A
MOV MAX1,R5
MOV MAX2,R6
MOV MIN1,R3
MOV MIN2,R4
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CTOM: ;;;功能說明:(CQDAT-NOADAT)*AQDAT/AQDAT'最后得到當前稱重的質量
;;;TEMP存放NOADAT或者MNDAT的值
MOV A,CQDAT1 ;;;當前內碼減去空載時內碼
CLR C
SUBB A,TEMP1
MOV R5,A
MOV A,CQDAT2
SUBB A,TEMP2
MOV R6,A ;;;實現CQDAT-TEMP并判斷符號
JC CTOM0
CLR SYMB ;;;正數
SJMP CTOM01
CTOM0:
MOV A,R5 ;;;對CQDAT-TEMP的結果取反
CPL A
ADD A,#01H
MOV R5,A
MOV A,R6
CPL A
ADDC A,#00H
MOV R6,A
SETB SYMB ;;;負數
CTOM01:
MOV R3,#00H
MOV R4,05H ;;;左移8位
MOV R5,06H
MOV TEMP1,XSDAT1
MOV TEMP2,XSDAT2
LCALL DIV32
CTOM1:
MOV CQXS1,R3 ;;;L
MOV CQXS2,R4 ;;;H
MOV R6,CQXS2 ;;;取消分度值
MOV R5,CQXS1
MOV R4,SCADAT
LCALL DIV21
MOV R2,06H
MOV R3,05H
MOV R4,SCADAT
LCALL MUL21
MOV CQXS2,R6
MOV CQXS1,R7
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PXCPP: ;;;功能說明:將接收的內碼依次推進到序列中.QUEQ1=0A0H
;;;QUEQ2=0A2H,QUEQ3=0A4H,QUEQ4=0A6H,QUEQ5=0A8H
MOV R0,#QUEQ2 ;;;當第二個數據為0時,以當前數據去更新序列
MOV A,@R0
JNZ PXCPP0
INC R0
MOV A,@R0
JNZ PXCPP0
MOV R2,#03H
MOV R0,#QUEQ1
PXCPP00:
MOV @R0,DATZ1
INC R0
MOV @R0,DATZ2
INC R0
DJNZ R2,PXCPP00
MOV DQXS1,DATZ1
MOV DQXS2,DATZ2
RET
PXCPP0:
MOV R0,#QUEQ3
MOV R1,#QUEQ2
INC R0
INC R1
MOV R2,#04H
PXCPP1: ;;;更新序列,將DATZ插入
MOV A,@R1
MOV @R0,A
DEC R1
DEC R0
DJNZ R2,PXCPP1
MOV @R0,DATZ2
DEC R0
MOV @R0,DATZ1
MOV R2,#03H ;;;比較X4與X1,X2,X3,X4,X5,X6,X7,X8,X9的關系
MOV R4,#00H ;;;將結果存放在R4,R5,R6中
MOV R5,#00H
MOV R6,#00H
MOV R1,#QUEQ1
PXCPP2:
MOV R0,#QUEQ2
MOV A,@R0
CLR C
SUBB A,@R1
MOV TEMP1,A
INC R0
INC R1
MOV A,@R0
SUBB A,@R1
INC R1
JNZ PXCPP3
MOV A,TEMP1
JNZ PXCPP3
INC R4 ;;;存放相等的次數
DJNZ R2,PXCPP2
SJMP PXCPP5
PXCPP3:
JC PXCPP4
INC R5 ;;;存放大于的次數
DJNZ R2,PXCPP2
SJMP PXCPP5
PXCPP4:
INC R6 ;;;存放小于的次數
DJNZ R2,PXCPP2
PXCPP5:
MOV A,R5
JZ PXCPP6 ;;;最小值時轉入最值處理
MOV A,R6
JZ PXCPP6 ;;;最大值時轉入最值處理
RET ;;;非最值時退出
PXCPP6: ;;;最值處理 ;;;;;;;;;;;;;;;;;;;;;;;
MOV R0,#QUEQ2 ;;;
MOV DATZ1,@R0 ;;;比較DATZ與QUE1是否相等?
INC R0 ;;;相等時不更新,直接退出
MOV DATZ2,@R0 ;;;不相等時更新.
MOV R0,#QUE1 ;;;
MOV A,@R0 ;;;
XRL A,DATZ1 ;;;
JNZ PXCPP06 ;;;
INC R0 ;;;
MOV A,@R0 ;;;
XRL A,DATZ2 ;;;
JNZ PXCPP06 ;;;
RET ;;;;;;;;;;;;;;;;;;;;;;;;
PXCPP06:
MOV R1,#QUE21
MOV R0,#QUE20
INC R1
INC R0
MOV R2,#1EH ;;;15個數據.
PXCPP7:
MOV A,@R0 ;;;將新數據插入先進先出隊列
MOV @R1,A
DEC R0
DEC R1
DJNZ R2,PXCPP7
MOV @R1,DATZ2 ;;;插入新值
DEC R1
MOV @R1,DATZ1
MOV R0,#QUE21 ;;;;隊列已滿
MOV A,@R0
JNZ PXCPP8
INC R0
MOV A,@R0
JNZ PXCPP8
MOV R1,#QUEK1 ;;;;隊列沒插滿
MOV @R1,DATZ1
INC R1 ;;;用當前內碼去更新QUEK隊列
MOV @R1,DATZ2
MOV R0,#QUE1
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -