Recently I completed a home project for controlling a light and a fan with an IR remote.
Some relevant details are given below.
PIC used: 16F689 - 20-pin device OSC: 8MHz
PicBasicPro Version 2.60C MicroCodeStudio Version 4.0.0.0

Thanks to Darrel Taylor, I am using three DT interrupts.
1. ExtInt is used for receiving IR commands
2. PortB IntOnChange is used for detecting the mains zero crossings (100 ZC per second). A random phase triac driver is used to fire the triac that controls the fan.
3. Timer1 Interrupt is for the Elapsed Timer. Fan speed is changed after the selected duration. The duration can be from 30 minutes to 15 hours and 30minutes in steps of 30 minutes (31 Steps).

Ext Int works perfectly. The commands from the IR remote used for switching on/off the light/fan and to change the fan speed or the fan duration are working perfectly.
PortB IntOnChange works as expected. The fan can be operated at 10 different speeds and this also works nicely.
The problem I am facing is that the the Elapsed Timer does not work properly. There seems to be a clash between the Timer1 interrupt used by the Elapsed Timer and PortB IntOnChange.
They both occur once in 10mS (100 Interrupts in a second). If I set Elapsed Timer duration for 2 hours so that the fan gets switched off after 2 hours, the switching off takes place after more than 3 hours.
If I disable PortB IntOnChange, the Elapsed Timer works perfectly.

What can I do to solve this problem?
Is there a version of Elapsed Timer that uses Timer0 instead of Timer1?
I would highly appreciate any solution / suggestion / guidance to sort out the issue.

- Bala