Another weird thing - If I comment out this line:

Code:
' Enable interrupts on RPM control now that motors are fully spun up
INTCON   = %10001000        ' Global int enabled, IOCI enabled, 
                            ' INTF flag bit 0 clr, IOCI flag bit 0 clr
IOCAP.0  = 1                ' Enable positive (rising edge) change
IOCAP.1  = 1                ' Enable positive (rising edge) change
IOCAN.0  = 1                ' Enable negative (falling edge) change
IOCAN.1  = 1                ' Enable negative (falling edge) change
IOCAF.0  = 0                ' Clear interupt-on-change flag
IOCAF.1  = 0                ' Clear interupt-on-change flag

@ INT_ENABLE   IOC_INT      ; Interrupt-on-Change interrupt
and these ones:

Code:
' ***************************************************************
' [IOC - interrupt handler]
' ***************************************************************
RotEncAdjust:
    New_Bits = PORTA & (%00000011)
    IF (New_Bits & %00000011) = (Old_Bits & %00000011) Then DoneRotEnc

    RotEncDir = New_Bits.1 ^ Old_Bits.0
    IF RotEncDir = 1 Then
        ; CW rotation - increase speed but only to a max of 'MaxDuty'
        IF MotorRPM < MaxDuty then MotorRPM = MotorRPM + 1
    Else
        ' CCW rotation - decrease speed to a min of 0
        IF MotorRPM > 0 Then MotorRPM = MotorRPM - 1
    EndIF

;    WRITE EE_MotorRPM, MotorRPM
;    pause 100

DoneRotEnc:
    Old_Bits = New_Bits
    
    IOCAF.0 = 0      ' Clear interrupt flags
    IOCAF.1 = 0

@ INT_RETURN
... the interrupts don't seem to fire. And then the button push doesn't work, either (and that's not interrupt driven):

Code:
Main:
    ' Check if motor RPM has changed
    IF MotorRPM <> Old_RPM Then
        Old_RPM = MotorRPM
        GOSUB ChngMotorHPWM
    EndIF   
   
    TimeCnt = 0
	While ButtonPress = 0
	    TimeCnt = TimeCnt + 1
	    Pause 10
	    If TimeCnt > 500 Then BtnAction
	Wend
 
    BtnAction:
        If TimeCnt > 0 and TimeCnt < 200 Then
            PortEngDir = PortEngDir + 1
            If PortEngDir > 1 Then PortEngDir = 0
    
            WRITE EE_PortEngDir, PortEngDir
            #IFDEF USE_LCD_FOR_DEBUG
                HSEROUT [LCD_INST, LCD_CLR]
                pause 5
                HSEROUT ["PortEngDir=", DEC PortEngDir, "  ", 13, 10] ' Send text followed by carriage return and linefeed
            #ENDIF

            GOSUB ReversePortEng
        ElseIf TimeCnt >= 200 Then
            WRITE EE_MotorRPM, MotorRPM_Default  ; restore Default value
        
            MotorRPM = MotorRPM_Default
        EndIf
 
    GOTO Main