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

📄 spm-02.asm

📁 pic16f877a simple mcu apply to industry automatic equipment.
💻 ASM
📖 第 1 页 / 共 5 页
字号:

	;***************   Specification of Limit   ***************
		;STDH_LIMIT (H'02 50' < STDH < H'03 50')
		MOVLW	H'02'					;B'0000 0010'
		MOVWF	STDH_LLMT_HB			;Set STDH_LLMT_HB Register
		MOVLW	H'50'					;B'0101 0000'
		MOVWF	STDH_LLMT_LB			;Set STDH_LLMT_LB Register
		MOVLW	H'03'					;B'0000 0011'
		MOVWF	STDH_ULMT_HB			;Set STDH_ULMT_HB Register
		MOVLW	H'50'					;B'0101 0000'
		MOVWF	STDH_ULMT_LB			;Set STDH_ULMT_LB Register
		;STDL_LIMIT (H'01 00' < STDL < H'01 40')
		MOVLW	H'01'					;B'0000 0001'
		MOVWF	STDL_LLMT_HB			;Set STDL_LLMT_HB Register
		MOVLW	H'00'					;B'0000 0000'
		MOVWF	STDL_LLMT_LB			;Set STDL_LLMT_LB Register
		MOVLW	H'01'					;B'0000 0001'
		MOVWF	STDL_ULMT_HB			;Set STDL_ULMT_HB Register
		MOVLW	H'40'					;B'0100 0000'
		MOVWF	STDL_ULMT_LB			;Set STDL_ULMT_LB Register
		;FINH_LIMIT (STDH - H'96' < FINH < STDH - H'96')
		MOVLW	H'96'					;B'1001 0110'
		MOVWF	FINH_LMT				;Set FINH_LMT Register
		;FINL_LIMIT (STDL - H'18' < FINL < STDL - H'18')
		MOVLW	H'18'					;B'0001 1000'
		MOVWF	FINL_LMT				;Set FINL_LMT Register

	;***************   Wait   ***************
		CALL	WAIT					;Wait 1 sec
		CALL	WAIT					;Wait 1 sec
		CALL	WAIT					;Wait 1 sec


;***************   STD Measurement Process   ***************
STD_MEASUREMENT
	;@@@@@ Mode Status @@@@@
		MOVLW	STD						;STD = H'01'
		MOVWF	MODE_STATUS				;"Wreg" --> "MODE_STATUS"(STD)

	;@@@@@ Clear of Register @@@@@
		CLRF	JUDG_STATUS				;Clear "JUDG_STATUS"

STD_LOOP
		BTFSC	PORTC,RC0				;Start Signal From PLC?
		GOTO	STD_LOOP				;No. Again

		CALL	WAIT_500M				;Wait 500 msec

	;***************   Measurement Frequency 4000[Hz]   ***************
		;@@@@@ Label Status @@@@@
		MOVLW	STDH					;STDH = H'01'
		MOVWF	LABEL_STATUS			;"Wreg" --> "LABEL_STATUS"(STDH)

		CALL	SET_FRQ_4000			;Set A/D Port Process
		CALL	AD_CONVERSION			;A/D Conversion Process
		CALL	SORT					;Sort Process
		CALL	CALCULATION_MEAN_VALUE	;Calculation of Mean Value Process
		CALL	DATA_HOLD				;Data Hold Process
		CALL	COMMUNICATION			;Communication Process

	;***************   Measurement Frequency 400[Hz]   ***************
		;@@@@@ Label Status @@@@@
		MOVLW	STDL					;STDL = H'02'
		MOVWF	LABEL_STATUS			;"Wreg" --> "LABEL_STATUS"(STDL)

		CALL	SET_FRQ_400				;Set A/D Port Process
		CALL	AD_CONVERSION			;A/D Conversion Process
		CALL	SORT					;Sort Process
		CALL	CALCULATION_MEAN_VALUE	;Calculation of Mean Value Process
		CALL	DATA_HOLD				;Data Hold Process
		CALL	COMMUNICATION			;Communication Process

	;***************   Data Comparison Process   ***************
		CALL	DATA_COMPARISON			;Data Comparison Process

	;***************   Judgment Process   ***************
		CALL	JUDG_OUT				;Judgment Output Process

	;***************   Next?   ***************
		BTFSC	JUDG_STATUS,0			;B'xxxx xxx0'?
		GOTO	STD_MEASUREMENT			;STD NG >>> Again!!

	;***************   Limit Generation Process   ***************
		CALL	LIMIT_GENERATION		;Limit Generation Process


;***************   Measurement Process   ***************
MEASUREMENT
	;@@@@@ Mode Status @@@@@
		MOVLW	MEA						;MEA = H'01'
		MOVWF	MODE_STATUS				;"Wreg" --> "MODE_STATUS"(MEA)

	;@@@@@ Clear of Register @@@@@
		CLRF	JUDG_STATUS				;Clear "JUDG_STATUS"

MEASUREMENT_LOOP
		BTFSC	PORTC,RC0				;Start Signal From PLC?
		GOTO	MEASUREMENT_LOOP		;No. Again

	;***************   Measurement Frequency 4000[Hz]   ***************
		;@@@@@ Label Status @@@@@
		MOVLW	MEAH					;MEAH = H'04'
		MOVWF	LABEL_STATUS			;"Wreg" --> "LABEL_STATUS"(MEAH)

		CALL	SET_FRQ_4000			;Set A/D Port Process
		CALL	AD_CONVERSION			;A/D Conversion Process
		CALL	SORT					;Sort Process
		CALL	CALCULATION_MEAN_VALUE	;Calculation of Mean Value Process
		CALL	DATA_HOLD				;Data Hold Process
		CALL	COMMUNICATION			;Communication Process

	;***************   Measurement Frequency 400[Hz]   ***************
		;@@@@@ Label Status @@@@@
		MOVLW	MEAL					;MEAL = H'08'
		MOVWF	LABEL_STATUS			;"Wreg" --> "LABEL_STATUS"(MEAL)

		CALL	SET_FRQ_400				;Set A/D Port Process
		CALL	AD_CONVERSION			;A/D Conversion Process
		CALL	SORT					;Sort Process
		CALL	CALCULATION_MEAN_VALUE	;Calculation of Mean Value Process
		CALL	DATA_HOLD				;Data Hold Process
		CALL	COMMUNICATION			;Communication Process

	;***************   Data Comparison Process   ***************
		CALL	DATA_COMPARISON			;Data Comparison Process

	;***************   Judgment Process   ***************
		CALL	JUDG_OUT				;Judgment Output Process

		BTFSC	JUDG_STATUS,0			;B'xxxx xxx0'?
		GOTO	MEASUREMENT				;No. MEASUREMENT

		;@@@@@ Label Status @@@@@
		MOVLW	MEAH					;MEAH = H'04'
		MOVWF	LABEL_STATUS			;"Wreg" --> "LABEL_STATUS"(MEAH)
		CALL	COMMUNICATION			;Communication Process
		;@@@@@ Label Status @@@@@
		MOVLW	MEAL					;MEAL = H'08'
		MOVWF	LABEL_STATUS			;"Wreg" --> "LABEL_STATUS"(MEAL)
		CALL	COMMUNICATION			;Communication Process


;***************   Finish Process   ***************
FINISH
	;@@@@@ Mode Status @@@@@
		MOVLW	FIN						;FIN = H'04'
		MOVWF	MODE_STATUS				;"Wreg" --> "MODE_STATUS"(FIN)

	;@@@@@ Clear of Register @@@@@
		CLRF	JUDG_STATUS				;Clear "JUDG_STATUS"

FINISH_LOOP
		BTFSC	PORTC,RC0				;Start Signal From PLC?
		GOTO	FINISH_LOOP				;No. Again

	;***************   Measurement Frequency 4000[Hz]   ***************
		;@@@@@ Label Status @@@@@
		MOVLW	FINH					;FINH = H'10'
		MOVWF	LABEL_STATUS			;"Wreg" --> "LABEL_STATUS"(FINH)

		CALL	SET_FRQ_4000			;Set A/D Port Process
		CALL	AD_CONVERSION			;A/D Conversion Process
		CALL	SORT					;Sort Process
		CALL	CALCULATION_MEAN_VALUE	;Calculation of Mean Value Process
		CALL	DATA_HOLD				;Data Hold Process
		CALL	COMMUNICATION			;Communication Process

	;***************   Measurement Frequency 400[Hz]   ***************
		;@@@@@ Label Status @@@@@
		MOVLW	FINL					;FINH = H'20'
		MOVWF	LABEL_STATUS			;"Wreg" --> "LABEL_STATUS"(FINL)

		CALL	SET_FRQ_400				;Set A/D Port Process
		CALL	AD_CONVERSION			;A/D Conversion Process
		CALL	SORT					;Sort Process
		CALL	CALCULATION_MEAN_VALUE	;Calculation of Mean Value Process
		CALL	DATA_HOLD				;Data Hold Process
		CALL	COMMUNICATION			;Communication Process

	;***************   Data Comparison Process   ***************
		CALL	DATA_COMPARISON			;Data Comparison Process

	;***************   Judgment Process   ***************
		CALL	JUDG_OUT				;Judgment Output Process

		GOTO	MEASUREMENT				;MEASUREMENT



;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;		Set A/D Port Process
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

SET_FRQ_400
	;***************   Set AN0   ***************
		MOVLW	H'81'					;B'1000 0001' = D'129' (ADCS = 10, CHS = AN0 ADON = ON)
		MOVWF	ADCON0					;Set ADCON0 Register
		CALL	WAIT_20MICRO			;Acquisition Time
		RETURN

SET_FRQ_4000
	;***************   Set AN1   ***************
		MOVLW	H'89'					;B'1000 1001' = D'137' (ADCS = 10, CHS = AN1 ADON = ON)
		MOVWF	ADCON0					;Set ADCON0 Register
		CALL	WAIT_20MICRO			;Acquisition Time
		RETURN



;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;		A/D Conversion Process
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

AD_CONVERSION
	;***************   Start of A/D Conversion, 1to8   ***************
		BSF		ADCON0,GO				;Start of A/D Conversion
AD_CHECK1
		BTFSC	ADCON0,GO				;A/D Conversion End?
		GOTO	AD_CHECK1				;No. Again
		MOVFW	ADRESH					;Read "ADRESH"
		MOVWF	AD_DATA1_HB				;Save Converted Data
		BSF		STATUS,RP0				;Change to Bank1
		MOVFW	ADRESL					;Read "ADRESL"
		BCF		STATUS,RP0				;Change to Bank0
		MOVWF	AD_DATA1_LB				;Save Converted Data
		CALL	WAIT_20MICRO			;Wait 20 micro seconds

	;***************   Start of A/D Conversion, 2to8   ***************
		BSF		ADCON0,GO				;Start of A/D Conversion
AD_CHECK2
		BTFSC	ADCON0,GO				;A/D Conversion End?
		GOTO	AD_CHECK2				;No. Again
		MOVFW	ADRESH					;Read "ADRESH"
		MOVWF	AD_DATA2_HB				;Save Converted Data
		BSF		STATUS,RP0				;Change to Bank1
		MOVFW	ADRESL					;Read "ADRESL"
		BCF		STATUS,RP0				;Change to Bank0
		MOVWF	AD_DATA2_LB				;Save Converted Data
		CALL	WAIT_20MICRO			;Wait 20 micro seconds

	;***************   Start of A/D Conversion, 3to8   ***************
		BSF		ADCON0,GO				;Start of A/D Conversion
AD_CHECK3
		BTFSC	ADCON0,GO				;A/D Conversion End?
		GOTO	AD_CHECK3				;No. Again
		MOVFW	ADRESH					;Read "ADRESH"
		MOVWF	AD_DATA3_HB				;Save Converted Data
		BSF		STATUS,RP0				;Change to Bank1
		MOVFW	ADRESL					;Read "ADRESL"
		BCF		STATUS,RP0				;Change to Bank0
		MOVWF	AD_DATA3_LB				;Save Converted Data
		CALL	WAIT_20MICRO			;Wait 20 micro seconds

	;***************   Start of A/D Conversion, 4to8   ***************
		BSF		ADCON0,GO				;Start of A/D Conversion
AD_CHECK4
		BTFSC	ADCON0,GO				;A/D Conversion End?
		GOTO	AD_CHECK4				;No. Again
		MOVFW	ADRESH					;Read "ADRESH"
		MOVWF	AD_DATA4_HB				;Save Converted Data
		BSF		STATUS,RP0				;Change to Bank1
		MOVFW	ADRESL					;Read "ADRESL"
		BCF		STATUS,RP0				;Change to Bank0
		MOVWF	AD_DATA4_LB				;Save Converted Data
		CALL	WAIT_20MICRO			;Wait 20 micro seconds

	;***************   Start of A/D Conversion, 5to8   ***************
		BSF		ADCON0,GO				;Start of A/D Conversion
AD_CHECK5
		BTFSC	ADCON0,GO				;A/D Conversion End?
		GOTO	AD_CHECK5				;No. Again
		MOVFW	ADRESH					;Read "ADRESH"
		MOVWF	AD_DATA5_HB				;Save Converted Data
		BSF		STATUS,RP0				;Change to Bank1
		MOVFW	ADRESL					;Read "ADRESL"
		BCF		STATUS,RP0				;Change to Bank0
		MOVWF	AD_DATA5_LB				;Save Converted Data
		CALL	WAIT_20MICRO			;Wait 20 micro seconds

	;***************   Start of A/D Conversion, 6to8   ***************
		BSF		ADCON0,GO				;Start of A/D Conversion
AD_CHECK6
		BTFSC	ADCON0,GO				;A/D Conversion End?
		GOTO	AD_CHECK6				;No. Again
		MOVFW	ADRESH					;Read "ADRESH"
		MOVWF	AD_DATA6_HB				;Save Converted Data
		BSF		STATUS,RP0				;Change to Bank1
		MOVFW	ADRESL					;Read "ADRESL"
		BCF		STATUS,RP0				;Change to Bank0
		MOVWF	AD_DATA6_LB				;Save Converted Data
		CALL	WAIT_20MICRO			;Wait 20 micro seconds

	;***************   Start of A/D Conversion, 7to8   ***************
		BSF		ADCON0,GO				;Start of A/D Conversion
AD_CHECK7
		BTFSC	ADCON0,GO				;A/D Conversion End?
		GOTO	AD_CHECK7				;No. Again
		MOVFW	ADRESH					;Read "ADRESH"
		MOVWF	AD_DATA7_HB				;Save Converted Data
		BSF		STATUS,RP0				;Change to Bank1
		MOVFW	ADRESL					;Read "ADRESL"
		BCF		STATUS,RP0				;Change to Bank0
		MOVWF	AD_DATA7_LB				;Save Converted Data
		CALL	WAIT_20MICRO			;Wait 20 micro seconds

	;***************   Start of A/D Conversion, 8to8   ***************
		BSF		ADCON0,GO				;Start of A/D Conversion
AD_CHECK8
		BTFSC	ADCON0,GO				;A/D Conversion End?
		GOTO	AD_CHECK8				;No. Again
		MOVFW	ADRESH					;Read "ADRESH"
		MOVWF	AD_DATA8_HB				;Save Converted Data
		BSF		STATUS,RP0				;Change to Bank1
		MOVFW	ADRESL					;Read "ADRESL"
		BCF		STATUS,RP0				;Change to Bank0
		MOVWF	AD_DATA8_LB				;Save Converted Data
		CALL	WAIT_20MICRO			;Wait 20 micro seconds

	;***************   A/D End   ***************
		RETURN



;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;		Sort Process
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

SORT
	;***************   AD_DATA --> SORT_DATA   ***************
		;***************   AD_DATA1 --> SORT_DATA1   ***************
		MOVF	AD_DATA1_HB,W			;"AD_DATA1_HB" --> "Wreg"
		MOVWF	SORT_DATA1_HB			;"Wreg" --> "SORT_DATA1_HB"
		MOVF	AD_DATA1_LB,W			;"AD_DATA1_LB" --> "Wreg"
		MOVWF	SORT_DATA1_LB			;"Wreg" --> "SORT_DATA1_LB"
		;***************   AD_DATA2 --> SORT_DATA2   ***************
		MOVF	AD_DATA2_HB,W			;"AD_DATA2_HB" --> "Wreg"
		MOVWF	SORT_DATA2_HB			;"Wreg" --> "SORT_DATA2_HB"
		MOVF	AD_DATA2_LB,W			;"AD_DATA2_LB" --> "Wreg"
		MOVWF	SORT_DATA2_LB			;"Wreg" --> "SORT_DATA2_LB"
		;***************   AD_DATA3 --> SORT_DATA3   ***************
		MOVF	AD_DATA3_HB,W			;"AD_DATA3_HB" --> "Wreg"
		MOVWF	SORT_DATA3_HB			;"Wreg" --> "SORT_DATA3_HB"
		MOVF	AD_DATA3_LB,W			;"AD_DATA3_LB" --> "Wreg"
		MOVWF	SORT_DATA3_LB			;"Wreg" --> "SORT_DATA3_LB"
		;***************   AD_DATA4 --> SORT_DATA4   ***************
		MOVF	AD_DATA4_HB,W			;"AD_DATA4_HB" --> "Wreg"
		MOVWF	SORT_DATA4_HB			;"Wreg" --> "SORT_DATA4_HB"
		MOVF	AD_DATA4_LB,W			;"AD_DATA4_LB" --> "Wreg"
		MOVWF	SORT_DATA4_LB			;"Wreg" --> "SORT_DATA4_LB"
		;***************   AD_DATA5 --> SORT_DATA5   ***************
		MOVF	AD_DATA5_HB,W			;"AD_DATA5_HB" --> "Wreg"
		MOVWF	SORT_DATA5_HB			;"Wreg" --> "SORT_DATA5_HB"
		MOVF	AD_DATA5_LB,W			;"AD_DATA5_LB" --> "Wreg"
		MOVWF	SORT_DATA5_LB			;"Wreg" --> "SORT_DATA5_LB"
		;***************   AD_DATA6 --> SORT_DATA6   ***************
		MOVF	AD_DATA6_HB,W			;"AD_DATA6_HB" --> "Wreg"
		MOVWF	SORT_DATA6_HB			;"Wreg" --> "SORT_DATA6_HB"
		MOVF	AD_DATA6_LB,W			;"AD_DATA6_LB" --> "Wreg"
		MOVWF	SORT_DATA6_LB			;"Wreg" --> "SORT_DATA6_LB"
		;***************   AD_DATA7 --> SORT_DATA7   ***************
		MOVF	AD_DATA7_HB,W			;"AD_DATA7_HB" --> "Wreg"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -