;THIS IS THE INTERRUPT SERVICE ROUTINE WHICH GETS VISITED EVERY 10ms FOR THE SERVO SIGNAL LINE "CLEAR PERIOD"
;AND THEN TURNS TMR2 (WHICH CREATED THE 10ms DELAY) OFF, AND THEN LOADS IN THE CALCULATED VALUE FOR TMR1
;TO SET THE APPROPRIATE TIME TO HOLD THE SERVO SIGNAL LINE HIGH, AND TURNS IT ON. AFTER THAT TIME ELAPSES,
;IT CLEARS THE SIGNAL LINE FOR ANOTHER 20ms
;IN ACTUALITY, IT ALTERNATES BETWEEN SETTING EACH OF THE TWO SERVO'S HIGH EVERY 10ms, SO ANY ONE PARTICULAR SERVO ONLY SEES A
;PULSE EVERY 20ms
ISR
INCF XYALTERNATE
BANKSEL PIR1 ;SELECT PERIPH INT FLAG REGISTER 1
BTFSC PIR1,TMR2IF ;TEST TMR2 PR2 REGISTER MATCH INT FLAG
GOTO START_TMR1 ;if tmr2 was source of int, then 20ms has passed and need to send servo a pulse
BTFSC PIR1,TMR1IF ;TEST FOR TMR1 OVERFLOW INT FLAG
GOTO START_TMR2 ;if tmr1 was source, then the pulse is over and we need to start tmr2 back up to count 20ms
START_TMR1
BCF PIR1,TMR2IF ;CLEAR THE TMR2 PR2 REG MATCH INT FLAG
MOVLW .1
SUBWF XYALTERNATE,W
BTFSC STATUS,Z ;TESTS TO SEE IF XYALTERNATE IS 1, IF IS IT SETS UP X AXIS FOR SERVO PULSE
GOTO SETXAXISPULSE
GOTO SETYAXISPULSE
SETXAXISPULSE
BCF PORTD,0
BSF PORTC,1 ;SET PORTC BIT 1 HIGH TO CREATE PULSE ON X AXIS SERVO (GIVEN TMR CREATED DELAY)
BCF T2CON,TMR2ON ;TURN OFF TMR2 SO THE PULSE CODE CAN RUN APPROPRIATELY
MOVF TMR1XHOLD_L,W
MOVWF TMR1L
MOVF TMR1XHOLD_H,W
MOVWF TMR1H
BSF T1CON,TMR1ON ;TURN ON TMR1 AFTER HAVING PRELOADED THE COUNTER
GOTO ENDISR
SETYAXISPULSE
BCF PORTC,1
BSF PORTD,0 ;SET PORTC BIT 0 HIGH TO CREATE PULSE ON Y AXIS SERVO (GIVEN TMR CREATED DELAY)
BCF T2CON,TMR2ON ;TURN OFF TMR2 SO THE PULSE CODE CAN RUN APPROPRIATELY
CLRF XYALTERNATE ;CLEAR THE XYALTERNATE FILE SO THE NEXT PULSE WILL BE ON THE X AXIS SERVO
MOVF TMR1YHOLD_L,W
MOVWF TMR1L
MOVF TMR1YHOLD_H,W
MOVWF TMR1H
BSF T1CON,TMR1ON ;TURN ON TMR1 AFTER HAVING PRELOADED THE COUNTER
GOTO ENDISR
START_TMR2 ;TIMER 2 IS FOR GENERATING THE 10 ms WINDOW
BCF PIR1,TMR1IF ;CLEAR TIMER 1 INTERRUPT FLAG
BCF PORTD,0 ;STOP HI SIGNAL TO Y AXIS SERVO
BCF PORTC,1 ;STOP HI SIGNAL TO X AXIS SERVO
BCF T1CON,TMR1ON ;TURN OFF TIMER1 OR IT WILL INTERRUPT IN THE MIDDLE OF THE 20MS COUNT
BSF T2CON,TMR2ON ;TURN ON TIMER 2 SO IT CAN START TIMING FOR 10MS AGAIN
BTFSS XYALTERNATE,1 ;IF AXISCOUNT IS ALREADY 2 (AS IT BIT 1 SET), SKIP NEXT
CLRF XYALTERNATE
ENDISR
RETFIE