One small thing I notice is that your:

Code:
    TMR1L = timerone.byte0
    TMR1H = timerone.byte1     
    CCPR1L = sineval[STEPCOUNT]>>1 
    stepcount = stepcount -1
    if stepcount = 0 then stepcount = 36
will read the value of stepcount 36 (doesn't exist), and never get to read stepcount 0.

I don't think this is the dramatic fix you are looking for, but maybe it's one small step forward.

Code:
    TMR1L = timerone.byte0
    TMR1H = timerone.byte1     
    CCPR1L = sineval[STEPCOUNT]>>1 
    if stepcount = 0 then stepcount = 36
    stepcount = stepcount -1