;********************************************** ;**********INTERRUPT SERVICE ROUTINE ********** ;********************************************** ; SAVE IMPORTANT REGISTER DATA INTERRUPT MOVWF TEMP_W ; SAVE W CONTENTS SWAPF STATUS,W ; SAVE STATUS WITH SWAPF TO ;PREVENT CHANGING STATUS REGISTER MOVWF TEMP_S ; SAVE STATUS (SWAPPED) MOVF FSR,W ; STATUS REGISTER IS SAVED SO NO NEED TO USE SWAPF MOVWF TEMP_FSR ; SAVE FSR INDEX REGISTER BANK0 ; MAKE SURE WE'RE USING BANK0 ; IS THIS A REAL TIME CLOCK INTERRUPT? BTFSC INTCON,T0IF ; IS THIS A TIMER0 INTERRUPT? GOTO RTC_INTERRUPT GOTO POP ; OTHERWISE EXIT INTERRUPT ROUTINE ; IS IT A RTC INTERRUPT RTC_INTERRUPT DECFSZ INTERRUPT_COUNTER,F GOTO POP MOVLW 15 ; ONLY PROCESS EVERY FIFTEENTH INTERRUPT MOVWF INTERRUPT_COUNTER CALL INIT_AD ; INITIALIZE DATA AND SAMPLE CHANNEL 0 = SENSOR1_V CALL CONVERT_ANALOG ; GET OTHER 2 CHANNELS = SENSOR2_V, SENSITIVITY_V ; RESET ALL TOOL ON FLAGS TO OFF SETOFF1 BCF FLAGS,SENSOR1 BCF FLAGS,SENSOR2 COMPARE_NUMBERS SENSOR1_V, SENSITIVITY_V ; CHECK SENSOR1 AGAINST LIMIT BTFSS FLAGS,VALUE_LT_LIMIT BSF FLAGS,SENSOR1 ; SENSOR1 VALUE IS > SENSITIVITY COMPARE_NUMBERS SENSOR2_V, SENSITIVITY_V ; CHECK SENSOR2 AGAINST LIMIT BTFSS FLAGS,VALUE_LT_LIMIT BSF FLAGS,SENSOR2 ; SENSOR2 VALUE IS > SENSITIVITY ; TURN ON RELAYS IF FLAGS SET BTFSC FLAGS,SENSOR1 ; IF SENSOR1 FLAG IS SET THEN PREPARE TO TURN ON GOTO TOOLON ; DUST COLLECTOR BTFSC FLAGS,SENSOR2 ; IF SENSOR2 FLAG IS SET THEN PREPARE TO TURN ON GOTO TOOLON ; DUST COLLECTOR BTFSC PORTE,M_SWITCH ; IF MANUAL SWITCH IN ON THEN PREPARE TO TURN ON GOTO TOOLON ; DUST COLLECTOR BTFSC SYSTEM,VACUUM_STATE ; IF NO TOOLS OR MANUAL SWITCH ARE ON AND CALL TURN_OFF ; DUST COLLECTOR IS ON, THEN PREPARE TO TURN OFF GOTO POP TOOLON BTFSS SYSTEM, VACUUM_STATE ; IF DUST COLLECTOR IS OFF AND ;TOOLS/SWITCH ARE ON CALL TURN_ON ; THEN PROCEED TO TURN ON DUST COLLECTOR ; RETURN REGISTERS POP CALL SET_TIMER ; RESET TIMER0 BCF INTCON,T0IF ; CLEAR TIMER0 INTERRUPT FLAG MOVF TEMP_FSR, W ; MOVE SAVED FSR REGISTER TO W MOVWF FSR ; RESTORE FSR REGISTER SWAPF TEMP_S, W ; SWAP STORED STATUS REGISTER TO W MOVWF STATUS ; RESTORE STATUS REGISTER SWAPF TEMP_W, F ;USE SWAPF INSTEAD OF MOVF SO Z BIT STATUS SWAPF TEMP_W, W ; WILL NOT BE CORRUPTED. RETFIE ; END OF INTERRUPT SERVICE ROUTINE