📄 spm-02.asm
字号:
;*************** 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 + -