//this exemples are tested on the hard with dspic30f2010 it work fine 
 //using timer1 #include 
#include 
#define PLL_VALUE 8.0 
#define CLOCK_TICKS 4000000 
#define TCY_PER_SECOND (PLL_VALUE*CLOCK_TICKS/4.0)
#define PRE_SCALE 256.0
 
 
void setupTimer1(float timeInS)
{
unsigned long period;
 
period=(unsigned long)(timeInS*TCY_PER_SECOND/PRE_SCALE)-1;
SetPriorityIntT1(3);
EnableIntT1;
OpenTimer1(T1_ON & T1_GATE_OFF & T1_IDLE_STOP & T1_PS_1_256 & T1_SYNC_EXT_OFF & T1_SOURCE_INT,period);
}
 
void interrupt tc_int(void) @ T1_VCTR
{
T1IF=0;
WriteTimer1(0);
 
LATE++;
 
}
 
int main(void)
{
TRISE=0; 
setupTimer1(1.0); // argument is interval (in seconds) between interrupts
 
while(1);
}
 
//e using timer2 
#include 
#include 
#define PLL_VALUE 8.0 
#define CLOCK_TICKS 4000000 //External 4Mhz cristal 
#define TCY_PER_SECOND (PLL_VALUE*CLOCK_TICKS/4.0)
#define PRE_SCALE 256.0
 
void setupTimer2(float timeInS)
{
unsigned long period;
period=(unsigned long)(timeInS*TCY_PER_SECOND/PRE_SCALE)-1;
SetPriorityIntT2(1);
EnableIntT2;
OpenTimer2(T2_ON & T2_GATE_OFF & T2_IDLE_STOP & T2_PS_1_256 & T2_SOURCE_INT &T2_32BIT_MODE_OFF,period);
}
void interrupt tc_int(void) @ T2_VCTR
{
T2IF=0;
WriteTimer2(0); 
LATE++;
 
}
int main(void)
{
TRISE=0; 
setupTimer2(1.0); // argument is interval (in seconds) between interrupts
 
while(1);
}
 
//if you tray with Setuptimer2(3.0) you have only 0.902816 second as interval betwin interrupt 
//because periode =((3*4000000* /4*256)-1 =16E35 the PR2 is only 16bits he take only 6E35=28213
/4*256)-1 =16E35 the PR2 is only 16bits he take only 6E35=28213
//calcul interval betwin interrupt= (PLL_VALUE*CLOCK_TICKS/4.0*PRE_SCALE)/28213= 902.816ms
//Simulation under MPLAB give 902.942125 ms 
 
// exemple 3 timer 2and 3 as 32 bits timer mode with dspic compiler
#include 
#include 
#define PLL_VALUE 8.0 
#define CLOCK_TICKS 4000000 
#define TCY_PER_SECOND (PLL_VALUE*CLOCK_TICKS/4.0)
#define PRE_SCALE 256.0
 
void setupTimer23(float timeInS)
{
unsigned long period;
period=(unsigned long)(timeInS*TCY_PER_SECOND/PRE_SCALE)-1;
SetPriorityIntT2(3);
EnableIntT3;
OpenTimer23(T2_ON & T2_GATE_OFF & T2_IDLE_STOP & T2_PS_1_256 & T2_SOURCE_INT &T2_32BIT_MODE_ON,period);
}
void interrupt tc_int(void) @ T3_VCTR
{
T3IF=0;
WriteTimer23(0);
 
LATE++;
 
}
int main(void)
{
TRISE=0; 
setupTimer23(1); // argument is interval (in seconds) between interrupts
 
while(1);
}
//with 32bit timer the interval betwin interrupts can go to 137438.95 sec (near 38 hours)