📄 spm-02.asm
字号:
;@@@@@ FINH LIMIT @@@@@
;High-Level Lower_Limit (STDH - FINH_LMT --> FINH_LLMT)
BCF STATUS,C ;Clear "STATUS" C flag
MOVF FINH_LMT,W ;"FINH_LMT" --> "Wreg"
SUBWF STDH_DATA_LB,W ;"STDH_DATA_LB" - "Wreg" --> "Wreg"
MOVWF FINH_LLMT_LB ;"Wreg" --> "FINH_LLMT_LB"
MOVF STDH_DATA_HB,W ;"STDH_DATA_HB" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
DECF STDH_DATA_HB,W ;"STDH_DATA_HB" - '1' --> "Wreg"
MOVWF FINH_LLMT_HB ;"Wreg" --> "FINH_LLMT_HB"
;High-Level High_Limit (STDH + FINH_LMT --> FINH_ULMT)
BCF STATUS,C ;Clear "STATUS" C flag
MOVF FINH_LMT,W ;"FINH_LMT" --> "Wreg"
ADDWF STDH_DATA_LB,W ;"STDH_DATA_LB" + "Wreg" --> "Wreg"
MOVWF FINH_ULMT_LB ;"Wreg" --> "FINH_ULMT_LB"
MOVF STDH_DATA_HB,W ;"STDH_DATA_HB" --> "Wreg"
BTFSC STATUS,C ;C flag '0'?
INCF STDH_DATA_HB,W ;"STDH_DATA_HB" + '1' --> "Wreg"
MOVWF FINH_ULMT_HB ;"Wreg" --> "FINH_ULMT_HB"
;@@@@@ FINL LIMIT @@@@@
;Low-Level Lower_Limit (STDL - FINL_LMT --> FINL_LLMT)
BCF STATUS,C ;Clear "STATUS" C flag
MOVF FINL_LMT,W ;"FINL_LMT" --> "Wreg"
SUBWF STDL_DATA_LB,W ;"STDL_DATA_LB" - "Wreg" --> "Wreg"
MOVWF FINL_LLMT_LB ;"Wreg" --> "FINL_LLMT_LB"
MOVF STDL_DATA_HB,W ;"STDL_DATA_HB" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
DECF STDL_DATA_HB,W ;"STDL_DATA_HB" - '1' --> "Wreg"
MOVWF FINL_LLMT_HB ;"Wreg" --> "FINL_LLMT_HB"
;Low-Level High_Limit (STDL + FINL_LMT --> FINL_ULMT)
BCF STATUS,C ;Clear "STATUS" C flag
MOVF FINL_LMT,W ;"FINL_LMT" --> "Wreg"
ADDWF STDL_DATA_LB,W ;"STDL_DATA_LB" + "Wreg" --> "Wreg"
MOVWF FINL_ULMT_LB ;"Wreg" --> "FINL_ULMT_LB"
MOVF STDL_DATA_HB,W ;"STDL_DATA_HB" --> "Wreg"
BTFSC STATUS,C ;C flag '0'?
INCF STDL_DATA_HB,W ;"STDL_DATA_HB" + '1' --> "Wreg"
MOVWF FINL_ULMT_HB ;"Wreg" --> "FINL_ULMT_HB"
RETURN
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; Data Comparison Process
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
DATA_COMPARISON
;STD
BTFSC MODE_STATUS,0 ;B'xxxx xxx0'?
GOTO STD_DATA_COMP ;STD_DATA_COMP
;MEA
BTFSC MODE_STATUS,1 ;B'xxxx xx0x'?
GOTO MEA_DATA_COMP ;MEA_DATA_COMP
;FIN
BTFSC MODE_STATUS,2 ;B'xxxx x0xx'?
GOTO FIN_DATA_COMP ;FIN_DATA_COMP
;NOTHING
GOTO END_COMPARISON ;END_COMPARISON
;*************** Standard Data Comparison ***************
STD_DATA_COMP
;@@@@@ STDH @@@@@ (LLMT < STDH < ULMT)
;(LLMT < STDH)
BCF STATUS,C ;Clear "STATUS" C flag
MOVF STDH_LLMT_LB,W ;"STDH_LLMT_LB" --> "Wreg"
SUBWF STDH_DATA_LB,W ;"STDH_DATA_LB" - "Wreg" --> "Wreg"
MOVF STDH_LLMT_HB,W ;"STDH_LLMT_HB" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
INCF STDH_LLMT_HB,W ;No. "STDH_LLMT_HB" + '1' --> "Wreg"
SUBWF STDH_DATA_HB,W ;"STDH_DATA_HB" - "Wreg" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
GOTO DATA_NG ;No. DATA_NG
;(STDH < ULMT)
BCF STATUS,C ;Clear "STATUS" C flag
MOVF STDH_DATA_LB,W ;"STDH_DATA_LB" --> "Wreg"
SUBWF STDH_ULMT_LB,W ;"STDH_ULMT_LB" - "Wreg" --> "Wreg"
MOVF STDH_DATA_HB,W ;"STDH_DATA_HB" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
INCF STDH_DATA_HB,W ;No. "STDH_DATA_HB" + '1' --> "Wreg"
SUBWF STDH_ULMT_HB,W ;"STDH_ULMT_HB" - "Wreg" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
GOTO DATA_NG ;No. DATA_NG
;@@@@@ STDL @@@@@ (LLMT < STDL < ULMT)
;(LLMT < STDL)
BCF STATUS,C ;Clear "STATUS" C flag
MOVF STDL_LLMT_LB,W ;"STDL_LLMT_LB" --> "Wreg"
SUBWF STDL_DATA_LB,W ;"STDL_DATA_LB" - "Wreg" --> "Wreg"
MOVF STDL_LLMT_HB,W ;"STDL_LLMT_HB" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
INCF STDL_LLMT_HB,W ;No. "STDL_LLMT_HB" + '1' --> "Wreg"
SUBWF STDL_DATA_HB,W ;"STDL_DATA_HB" - "Wreg" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
GOTO DATA_NG ;No. DATA_NG
;(STDL < ULMT)
BCF STATUS,C ;Clear "STATUS" C flag
MOVF STDL_DATA_LB,W ;"STDL_DATA_LB" --> "Wreg"
SUBWF STDL_ULMT_LB,W ;"STDL_ULMT_LB" - "Wreg" --> "Wreg"
MOVF STDL_DATA_HB,W ;"STDL_DATA_HB" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
INCF STDL_DATA_HB,W ;No. "STDL_DATA_HB" + '1' --> "Wreg"
SUBWF STDL_ULMT_HB,W ;"STDL_ULMT_HB" - "Wreg" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
GOTO DATA_NG ;No. DATA_NG
GOTO END_COMPARISON ;END_COMPARISON
;*************** Measurement Data Comparison ***************
MEA_DATA_COMP
;@@@@@ MEAL @@@@@ (FINL_LLMT < MEAL < FINL_ULMT)
;(FINL_LLMT < MEAL)
BCF STATUS,C ;Clear "STATUS" C flag
MOVF FINL_LLMT_LB,W ;"FINL_LLMT_LB" --> "Wreg"
SUBWF MEAL_DATA_LB,W ;"MEAL_DATA_LB" - "Wreg" --> "Wreg"
MOVF FINL_LLMT_HB,W ;"FINL_LLMT_HB" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
INCF FINL_LLMT_HB,W ;No. "FINL_LLMT_HB" + '1' --> "Wreg"
SUBWF MEAL_DATA_HB,W ;"MEAL_DATA_HB" - "Wreg" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
GOTO DATA_NG ;No. DATA_NG
;(STDL < MEAL) ---->>>> (FINH_LLMT < MEAH < FINH_ULMT)
BCF STATUS,C ;Clear "STATUS" C flag
MOVF STDL_DATA_LB,W ;"STDL_DATA_LB" --> "Wreg"
SUBWF MEAL_DATA_LB,W ;"MEAL_DATA_LB" - "Wreg" --> "Wreg"
MOVF STDL_DATA_HB,W ;"STDL_DATA_HB" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
INCF STDL_DATA_HB,W ;No. "STDL_DATA_HB" + '1' --> "Wreg"
SUBWF MEAL_DATA_HB,W ;"MEAL_DATA_HB" - "Wreg" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
GOTO MEA_DATA_COMP1 ;No. MEA_DATA_COMP1
;(FINL_ULMT < MEAL) ---->>>> (STDH < MEAH < FINH_LLMT)
BCF STATUS,C ;Clear "STATUS" C flag
MOVLW H'10' ;B'0001 0000' --> "Wreg"
SUBWF FINL_ULMT_LB,W ;"FINL_ULMT_LB" - "Wreg" --> "Wreg"
SUBWF MEAL_DATA_LB,W ;"MEAL_DATA_LB" - "Wreg" --> "Wreg"
MOVF FINL_ULMT_HB,W ;"FINL_ULMT_HB" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
INCF FINL_ULMT_HB,W ;No. "FINL_ULMT_HB" + '1' --> "Wreg"
SUBWF MEAL_DATA_HB,W ;"MEAL_DATA_HB" - "Wreg" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
GOTO MEA_DATA_COMP2 ;No. MEA_DATA_COMP2
GOTO DATA_NG ;No. DATA_NG
;@@@@@ MEAL @@@@@ (FINH_LLMT < MEAH < FINH_ULMT)
MEA_DATA_COMP1
;(FINH_LLMT < MEAH < FINH_ULMT)
;(FINH_LLMT < MEAH)
BCF STATUS,C ;Clear "STATUS" C flag
MOVF FINH_LLMT_LB,W ;"FINH_LLMT_LB" --> "Wreg"
SUBWF MEAH_DATA_LB,W ;"MEAH_DATA_LB" - "Wreg" --> "Wreg"
MOVF FINH_LLMT_HB,W ;"FINH_LLMT_HB" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
INCF FINH_LLMT_HB,W ;No. "FINH_LLMT_HB" + '1' --> "Wreg"
SUBWF MEAH_DATA_HB,W ;"MEAH_DATA_HB" - "Wreg" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
GOTO DATA_NG ;No. DATA_NG
;(MEAH < FINH_ULMT)
BCF STATUS,C ;Clear "STATUS" C flag
MOVF MEAH_DATA_LB,W ;"MEAH_DATA_LB" --> "Wreg"
SUBWF FINH_ULMT_LB,W ;"FINH_ULMT_LB" - "Wreg" --> "Wreg"
MOVF MEAH_DATA_HB,W ;"MEAH_DATA_HB" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
INCF MEAH_DATA_HB,W ;No. "MEAH_DATA_HB" + '1' --> "Wreg"
SUBWF FINH_ULMT_HB,W ;"FINH_ULMT_HB" - "Wreg" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
GOTO DATA_NG ;DATA_NG
GOTO END_COMPARISON ;No. END_COMPARISON
MEA_DATA_COMP2
;(STDH < MEAH < FINH_ULMT)
;(STDH < MEAH)
BCF STATUS,C ;Clear "STATUS" C flag
MOVF STDH_DATA_LB,W ;"STDH_DATA_LB" --> "Wreg"
SUBWF MEAH_DATA_LB,W ;"MEAH_DATA_LB" - "Wreg" --> "Wreg"
MOVF STDH_DATA_HB,W ;"STDH_DATA_HB" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
INCF STDH_DATA_HB,W ;No. "STDH_DATA_HB" + '1' --> "Wreg"
SUBWF MEAH_DATA_HB,W ;"MEAH_DATA_HB" - "Wreg" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
GOTO DATA_NG ;No. DATA_NG
;(MEAH < FINH_ULMT)
BCF STATUS,C ;Clear "STATUS" C flag
MOVF MEAH_DATA_LB,W ;"MEAH_DATA_LB" --> "Wreg"
SUBWF FINH_ULMT_LB,W ;"FINH_ULMT_LB" - "Wreg" --> "Wreg"
MOVF MEAH_DATA_HB,W ;"MEAH_DATA_HB" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
INCF MEAH_DATA_HB,W ;No. "MEAH_DATA_HB" + '1' --> "Wreg"
SUBWF FINH_ULMT_HB,W ;"FINH_ULMT_HB" - "Wreg" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
GOTO DATA_NG ;DATA_NG
GOTO END_COMPARISON ;No. END_COMPARISON
;*************** Finish Data Comparison ***************
FIN_DATA_COMP
;@@@@@ FINH @@@@@ (FINH_LLMT < FINH < FINH_ULMT)
;(FINH_LLMT < FINH)
BCF STATUS,C ;Clear "STATUS" C flag
MOVF FINH_LLMT_LB,W ;"FINH_LLMT_LB" --> "Wreg"
SUBWF FINH_DATA_LB,W ;"FINH_DATA_LB" - "Wreg" --> "Wreg"
MOVF FINH_LLMT_HB,W ;"FINH_LLMT_HB" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
INCF FINH_LLMT_HB,W ;No. "FINH_LLMT_HB" + '1' --> "Wreg"
SUBWF FINH_DATA_HB,W ;"FINH_DATA_HB" - "Wreg" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
GOTO DATA_NG ;No. DATA_NG
;(FINH < FINH_ULMT)
BCF STATUS,C ;Clear "STATUS" C flag
MOVF FINH_DATA_LB,W ;"FINH_DATA_LB" --> "Wreg"
SUBWF FINH_ULMT_LB,W ;"FINH_ULMT_LB" - "Wreg" --> "Wreg"
MOVF FINH_DATA_HB,W ;"FINH_DATA_HB" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
INCF FINH_DATA_HB,W ;No. "FINH_DATA_HB" + '1' --> "Wreg"
SUBWF FINH_ULMT_HB,W ;"FINH_ULMT_HB" - "Wreg" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
GOTO DATA_NG ;No. DATA_NG
;@@@@@ FINL @@@@@ (FINL_LLMT < FINL < FINL_ULMT)
;(FINL_LLMT < FINL)
BCF STATUS,C ;Clear "STATUS" C flag
MOVF FINL_LLMT_LB,W ;"FINL_LLMT_LB" --> "Wreg"
SUBWF FINL_DATA_LB,W ;"FINL_DATA_LB" - "Wreg" --> "Wreg"
MOVF FINL_LLMT_HB,W ;"FINL_LLMT_HB" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
INCF FINL_LLMT_HB,W ;No. "FINL_LLMT_HB" + '1' --> "Wreg"
SUBWF FINL_DATA_HB,W ;"FINL_DATA_HB" - "Wreg" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
GOTO DATA_NG ;No. DATA_NG
;(FINL < FINL_ULMT)
BCF STATUS,C ;Clear "STATUS" C flag
MOVF FINL_DATA_LB,W ;"FINL_DATA_LB" --> "Wreg"
SUBWF FINL_ULMT_LB,W ;"FINL_ULMT_LB" - "Wreg" --> "Wreg"
MOVF FINL_DATA_HB,W ;"FINL_DATA_HB" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
INCF FINL_DATA_HB,W ;No. "FINL_DATA_HB" + '1' --> "Wreg"
SUBWF FINL_ULMT_HB,W ;"FINL_ULMT_HB" - "Wreg" --> "Wreg"
BTFSS STATUS,C ;C flag '1'?
GOTO DATA_NG ;No. DATA_NG
GOTO END_COMPARISON ;END_COMPARISON
;*************** Data NG ***************
DATA_NG
BSF JUDG_STATUS,0 ;B'0000 0001' --> "JUDG_STATUS" (x/x/x/x/x/x/x/1[NG] or 0[OK])
GOTO END_COMPARISON ;END_COMPARISON
;*************** End Data Comparison ***************
END_COMPARISON
RETURN
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; Judgment Output Process
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
JUDG_OUT
BTFSC JUDG_STATUS,0 ;B'xxxx xxx0'?
GOTO JUDG_NG ;No. JUDG_NG
GOTO JUDG_OK ;JUDG_OK
JUDG_NG
BSF PORTC,RC1 ;B'xxxx xx1x' --> "PORTC"
GOTO JUDG_END ;JUDG_END
JUDG_OK
BSF PORTC,RC2 ;B'xxxx x1xx' --> "PORTC"
JUDG_END
BTFSC MODE_STATUS,0 ;B'xxxx xxx0'?
CALL WAIT ;Wait 1 sec
BTFSC MODE_STATUS,1 ;B'xxxx xx0x'?
CALL WAIT_100MICRO ;Keep High Condition for 100 micro seconds
BTFSC MODE_STATUS,2 ;B'xxxx x0xx'?
CALL WAIT_100MICRO ;Keep High Condition for 100 micro seconds
BTFSC MODE_STATUS,3 ;B'xxxx xx0x'?
CALL WAIT_100MICRO ;Keep High Condition for 100 micro seconds
CLRF PORTC ;Clear "PORTC"
RETURN
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; Communication Process
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
COMMUNICATION
;STDH
BTFSC LABEL_STATUS,0 ;"LABEL_STATUS" = 'STDH'?
GOTO STDH_COM ;STDH_COM
;STDL
BTFSC LABEL_STATUS,1 ;"LABEL_STATUS" = 'STDL'?
GOTO STDL_COM ;STDL_COM
;MEAH
BTFSC LABEL_STATUS,2 ;"LABEL_STATUS" = 'MEAH'?
GOTO MEAH_COM ;MEAH_COM
;MEAL
BTFSC LABEL_STATUS,3 ;"LABEL_STATUS" = 'MEAL'?
GOTO MEAL_COM ;MEAL_COM
;FINH
BTFSC LABEL_STATUS,4 ;"LABEL_STATUS" = 'FINH'?
GOTO FINH_COM ;FINH_COM
;FINL
BTFSC LABEL_STATUS,5 ;"LABEL_STATUS" = 'FINL'?
GOTO FINL_COM ;FINL_COM
;NOTHING
GOTO COM_END ;COM_END
;*************** Standard-High Communication ***************
STDH_COM
MOVF STDH_DATA_HB,W ;"STDH_DATA_HB" --> "Wreg"
CALL SEND_HEX_NUM ;Send of hexadecimal Number Process
MOVF STDH_DATA_LB,W ;"STDH_DATA_LB" --> "Wreg"
CALL SEND_HEX_NUM ;Send of hexadecimal Number Process
CALL WRITE_LABEL ;Writing of Label Process
GOTO COM_END ;COM_END
;*************** Standard-Low Communication ***************
STDL_COM
MOVF STDL_DATA_HB,W ;"STDL_DATA_HB" --> "Wreg"
CALL SEND_HEX_NUM ;Send of hexadecimal Number Process
MOVF STDL_DATA_LB,W ;"STDL_DATA_LB" --> "Wreg"
CALL SEND_HEX_NUM ;Send of hexadecimal Number Process
CALL WRITE_LABEL ;Writing of Label Process
GOTO COM_END ;COM_END
;*************** Measurement-High Communication ***************
MEAH_COM
MOVF MEAH_DATA_HB,W ;"MEAH_DATA_HB" --> "Wreg"
CALL SEND_HEX_NUM ;Send of hexadecimal Number Process
MOVF MEAH_DATA_LB,W ;"MEAH_DATA_LB" --> "Wreg"
CALL SEND_HEX_NUM ;Send of hexadecimal Number Process
CALL WRITE_LABEL ;Writing of Label Process
GOTO COM_END ;COM_END
;*************** Measurement-Low Communication ***************
MEAL_COM
MOVF MEAL_DATA_HB,W ;"MEAL_DATA_HB" --> "Wreg"
CALL SEND_HEX_NUM ;Send of hexadecimal Number Process
MOVF MEAL_DATA_LB,W ;"MEAL_DATA_LB" --> "Wreg"
CALL SEND_HEX_NUM ;Send of hexadecimal Number Process
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -