This is very helpful.
http://www.picbasic.co.uk/forum/cont....-PICMultiCalc

Probably the easiest way to get started is with ON INTERRUPT. It is not the most accurate, it will only interrupt when nothing else is going on. Sound silly but..
An example would be a long PAUSE, the ON INTERRUPT will flag and run when the PAUSE is finished. ASM interrupts or DT's instant interrupts will work as true interrupts, but for your case ON INTERRUPT should be close enough.

This should be close. Run it on your board and see what happens.
Code:
'FL PIC16F887
'16F887 INT RUPT
'44 PIN DEMO BOARD
   @ __config _CONFIG1, _INTRC_OSC_NOCLKOUT & _WDT_ON & _MCLRE_OFF & _LVP_OFF & _CP_OFF
   INTCON.5 = 1
   OSCCON = %01110000 '8 Mhz
   DEFINE OSC 8
   OPTION_REG = %01000111  ' 1:256 PRESCALE
   ON INTERRUPT GOTO TLOOP
   CNT  VAR BYTE
   D    VAR BYTE
   D = 0
   DATA @10,10,20,30
   TCNT  VAR    BYTE
   
   START:
   FOR CNT = 0 TO 150
   PWM PORTD.7,D,10
   D = D + 2
   NEXT CNT
   GOTO START
   
   DISABLE
   TLOOP:
   TCNT = TCNT + 1
   INTCON.2=0
   IF TCNT = 8 THEN
   TOGGLE PORTD.4
   TCNT = 0
   ENDIF
   RESUME
   ENABLE