Here is some code that will measure an RC receiver pulse width coming in on GPIO.2, perform a little math on the value, and put out the wave form out on GPIO.1, using DT Interrupts.

It's on a little 12F683 and was written for 8mhz internal. Looks pretty good on the scope. I need to test it on a motor controller though. But time for bed.....

Code:
<html>
<head></head>
<body><!--StartFragment--><pre><code><font color="#000080"><i>
</i></font><b>DEFINE </b>OSC 8
<b>INCLUDE </b><font color="#FF0000">&quot;DT_INTS-14.bas&quot;</font><font color="#000080"><i>;interrupt routines
</i></font><b>INCLUDE </b><font color="#FF0000">&quot;sub16.inc&quot;     </font><font color="#000080"><i>; subtract 16 bit macro

</i></font><b>DEFINE </b>DEBUG_REG	GPIO
<b>DEFINE </b>DEBUG_BIT	0
<b>DEFINE </b>DEBUGIN_BIT	1

<b>DEFINE </b>DEBUG_BAUD	38400
<b>DEFINE </b>DEBUG_MODE	0

INTCON = %10101000      <font color="#000080"><i>'
</i></font>OSCCON = %01110000      <font color="#000080"><i>'set for 8mhz internal
</i></font>CMCON0 = 7              <font color="#000080"><i>'TURN COMPARITORS OFF
</i></font>ANSEL  = %00000000      <font color="#000080"><i>'Set A/D OFF
</i></font>ADCON0 = %00000000      <font color="#000080"><i>'Analog converter OFF 
</i></font>TRISIO = %010100        <font color="#000080"><i>'Set GSIO 4 and 2 to INPUT, others to OUTPUT
</i></font>OPTION_REG = %11000010
T1CON  = %00110001
T2CON  = %01001110
CCP1CON = %00000101

risetime <b>VAR WORD       </b><font color="#000080"><i>;used for pulse width measure start of pw

</i></font>falltime <b>VAR WORD       </b><font color="#000080"><i>;time at end of pulse width
</i></font>falltime_l <b>VAR </b>falltime.Byte0
falltime_h <b>VAR </b>falltime.Byte1
risetime_l <b>VAR </b>risetime.Byte0
risetime_h <b>VAR </b>risetime.Byte1
pulsewidth <b>VAR WORD
</b>pulsewidth_l <b>VAR </b>pulsewidth.Byte0
pulsewidth_h <b>VAR </b>pulsewidth.Byte1

ServoOut <b>VAR </b>GPIO.1
ServoOut = 0
pulse <b>VAR BYTE

</b>TMR0 = 0
pulse = 255
bittest <b>VAR BIT

ASM
</b><font color="#008000">INT_LIST  macro    </font><font color="#000080"><i>; IntSource,        Label,  Type, ResetFlag?
        </i></font><font color="#008000">INT_Handler   TMR0_INT,   PulseOut,   ASM,  yes
        INT_Handler   TMR2_INT,   period,     ASM,  yes
        INT_Handler   CCP1_INT,   PWMeasure,  ASM,  yes
    endm
    INT_CREATE               </font><font color="#000080"><i>; Creates the interrupt processor

    </i></font><font color="#008000">INT_ENABLE  TMR0_INT     </font><font color="#000080"><i>; Enable pulseout interrupts  
    </i></font><font color="#008000">INT_ENABLE  TMR2_INT     </font><font color="#000080"><i>; enable period interrupt (20ms)
    </i></font><font color="#008000">INT_ENABLE  CCP1_INT     </font><font color="#000080"><i>; enable interrupt to increment pulse width (test)
</i></font><b>ENDASM
    PAUSE </b>200
Main:
    <b>PAUSE </b>20
    <font color="#000080"><i>;debug dec pulsewidth,&quot; &quot;,10,13
    </i></font>pulse = ((pulsewidth * 8)/10)-167 <font color="#000080"><i>;scale to fit into a byte
    </i></font>pulse = 255 - pulse               <font color="#000080"><i>;reverse the stick 
    

</i></font><b>GOTO </b>Main

<font color="#000080"><i>'---[TMR0_INT - interrupt handler]------------------------------------------

</i></font><b>ASM
</b><font color="#008000">PulseOut
    btfsc _bittest      </font><font color="#000080"><i>;test status of bittest bit
    </i></font><font color="#008000">goto $+7            </font><font color="#000080"><i>;if high skip 7 lines
    </i></font><font color="#008000">bcf INTCON,5        </font><font color="#000080"><i>;stop timer
    </i></font><font color="#008000">movf _pulse,w       </font><font color="#000080"><i>;load TMR0 with value of pulse variable
    </i></font><font color="#008000">movwf TMR0
    bsf _bittest        </font><font color="#000080"><i>;set bittest bit, indicating we are on second half
    </i></font><font color="#008000">bsf INTCON,5        </font><font color="#000080"><i>;start timer again for second interrupt
    </i></font><font color="#008000">goto $+3            </font><font color="#000080"><i>;skip to return from interrupt
    </i></font><font color="#008000">bcf INTCON,5        </font><font color="#000080"><i>;stop timer
    </i></font><font color="#008000">bcf _ServoOut       </font><font color="#000080"><i>;bring ServoOut pin low for end of pulse width
    </i></font><font color="#008000">INT_RETURN



</font><b>ENDASM
</b><font color="#000080"><i>'---[TMR2_INT - interrupt handler]------------------------------------------
</i></font><b>ASM
</b><font color="#008000">period
    movlw d'72'          </font><font color="#000080"><i>;fine tune timer2 period
    </i></font><font color="#008000">movwf TMR2    
    bcf INTCON,2         </font><font color="#000080"><i>;clear timer flag if set
    </i></font><font color="#008000">movlw d'17'          </font><font color="#000080"><i>;set timer0 first 1ms time base
    </i></font><font color="#008000">movwf TMR0    
    bsf INTCON,5         </font><font color="#000080"><i>;enable timer0 interrupt 
    </i></font><font color="#008000">bsf _ServoOut        </font><font color="#000080"><i>;set ServoOut pin high (begin pulse width)
    </i></font><font color="#008000">bcf _bittest
    INT_RETURN
</font><b>ENDASM
</b><font color="#000080"><i>'---[CCP1_INT - interrupt handler]------------------------------------------
</i></font><b>ASM

</b><font color="#008000">PWMeasure

    BTFSS   CCP1CON, CCP1M0 </font><font color="#000080"><i>; Check for falling edge watch
    </i></font><font color="#008000">GOTO    FALL_EDGE       </font><font color="#000080"><i>; Go pick up the falling edge
    </i></font><font color="#008000">MOVF    CCPR1L,W        </font><font color="#000080"><i>; else store leading edge value
    </i></font><font color="#008000">MOVWF   _risetime_l         </font><font color="#000080"><i>; into 16 bit word risetime
    </i></font><font color="#008000">MOVF    CCPR1H,W
    MOVWF   _risetime_h
    BCF     CCP1CON, CCP1M0 </font><font color="#000080"><i>; Now capture the trailing edge
    </i></font><font color="#008000">GOTO    ISR_2           </font><font color="#000080"><i>; Exit the interrupt service routine
        
</i></font><font color="#008000">FALL_EDGE:
    BSF     CCP1CON, CCP1M0 </font><font color="#000080"><i>; Re-set for trailing edge capture
    </i></font><font color="#008000">MOVF    CCPR1L,W        </font><font color="#000080"><i>; Store the captured value into
    </i></font><font color="#008000">MOVWF   _falltime_l         </font><font color="#000080"><i>; falltime_l and ...
    </i></font><font color="#008000">MOVF    CCPR1H,W
    MOVWF   _falltime_h       </font><font color="#000080"><i>;             ... falltime_h
    ;
    ; 16 bit subtract 
    ;     falltime = falltime - risetime
    ;
    </i></font><font color="#008000">SUB16   _falltime, _risetime   </font><font color="#000080"><i>;do 16 bit subtraction to find width
    </i></font><font color="#008000">movf _falltime_l,w
    movwf _pulsewidth_l
    movf _falltime_h,w
    movwf _pulsewidth_h
ISR_2
    INT_RETURN


</font><b>ENDASM


</b></code></pre><!--EndFragment--></body>
</html>