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

📄 spm-02.asm

📁 pic16f877a simple mcu apply to industry automatic equipment.
💻 ASM
📖 第 1 页 / 共 5 页
字号:
	;@@@@@ 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 + -