I am using 4Mhz crystal with pic16F886 using timer interrupt 1ms. In below
Here i could able to display set value and process value.During ontime Setvalue displayed on bottom Dissect(value) & process value on top Dissect_2(value) For Off time Setvalue displayed on TOp Dissect_2(value) & process value on bottomDissect(value)
First cycle where first ontime with process value and second offtime value with process value work properly. Now this cycle has to repeat But in third cycle it will display on time and offtime Set value.But wont process the value.
[COLOR=#242729][FONT=Arial]My working should be I have 2 time on time and Off time.It has been set initial stage. First on time come into picture. where bottom display show set value and top display show process value. when counter reached then top display show off time value as setted and bottom value as process value. cycle keep repeat



Code:
#include <htc.h>
#include <stdio.h>
#include <math.h>
#include "delay.h"
#define _XTAL_FREQ 4000000


__CONFIG(FOSC_HS & WDTE_ON& PWRTE_ON & CP_OFF & BOREN_ON & LVP_OFF & CPD_OFF  & DEBUG_OFF&MCLRE_ON &BOREN_ON&FCMEN_ON &WRT_OFF);
#define RLY_DRV1        RB4
#define	DISPCLK			RB5
#define	DISPDATA		RB6
#define STROBE			RB7


#define	LED_MS		RA0
#define LED_HM      RA1
#define LED_SS      RA2
#define RLY_DRV2     RC0
unsigned int On_Time=0;
unsigned int Off_Time=0;
unsigned char Cylic_Flag=0;


unsigned char LED_MS_Flag = 0;
unsigned char LED_SeMi_Flag = 0;
unsigned char LED_HM_Flag = 0;
unsigned char ON_Prg_Flag = 0;
unsigned char Off_Prg_Flag = 0;
unsigned char RLY_Off_Flag=0;
unsigned char On_Int_Flag=1;
unsigned char LEDBuffer_1[8];
const unsigned char DISPTABLE[27] = {0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09,0x11,0x83,0x31,
                                     //0  //1  //2  //3  //4  //5  //6  //7  //8  //9  //A  //U  //P
                                     0xD1,0xE3,0x89,0x63,0xE1,0xF5,0xC1,0x61,0x71,0xF3,0xFD,0xD5,0x85,0xFF
                                    };
//h  //L  //Y  //C  //t  //r  //b   //E //F  //I  //-  //n //d  //blank


void Dissect(unsigned int Value) { // Spliting of process value in digits form
  unsigned char a, Temp;


  for (a = 8; a >= 5; a--) {
    Temp = Value % 10;
    Value = Value / 10;
    LEDBuffer_1[a - 1] = DISPTABLE[Temp];


  }


}


void Dissect_2(unsigned int Value) { // Spliting of process value in digits form
  unsigned char a, Temp;
  for (a = 4; a >= 1; a--) {


    Temp = Value % 10;
    Value = Value / 10;
    LEDBuffer_1[a - 1] = DISPTABLE[Temp];


  }


}


void Display() {
  switch (DgtSel) {
  case 1:


    ShiftData(LEDBuffer_1[4]); //display changed for dold
    ShiftData(0x80);
    EnableStrobe();
    DgtSel = 2;
    break;


  case 2:


    ShiftData(LEDBuffer_1[5]);
    ShiftData(0x40);
    EnableStrobe();
    DgtSel = 3;
    break;


  case 3:


    ShiftData(LEDBuffer_1[6]);
    ShiftData(0x20);
    EnableStrobe();
    DgtSel = 4;
    break;


  case 4:
    Dec_pt = 0;
    ShiftData(LEDBuffer_1[7]);
    ShiftData(0x10);
    EnableStrobe();
    DgtSel = 5;
    break;
    //************************************************************************************************
  case 5:
    ShiftData(LEDBuffer_1[0]);
    ShiftData(0x08);
    EnableStrobe();
    DgtSel = 6;
    break;


  case 6:
    ShiftData(LEDBuffer_1[1]);
    ShiftData(0x04);
    EnableStrobe();
    DgtSel = 7;


    break;


  case 7:


    ShiftData(LEDBuffer_1[2]);
    ShiftData(0x02);
    EnableStrobe();
    DgtSel = 8;


    break;


  case 8:
    ShiftData(LEDBuffer_1[3]);
    ShiftData(0x01);
    EnableStrobe();
    DgtSel = 1;
    break;


  default:
    break;
  }
}


void PRG_RUN_RESET() {
  Bottom_Value = 0;
  Sec = 0;
  Hour = 0;
  Min = 0;
  MSec = 0;
  RLY_Off_Flag = 0;
  On_Int_Flag = 0;
  Cylic_Flag = 0;
  On_Time = 1032;
  Off_Time = 1234;
  Top_Display = 0;


  if (Sub_Relay == 1) {
    RLY_DRV2 = 1;
    if (Sub_Time == 1) {
      RLY_DRV1 = 0;
    } else if (Sub_Time == 2) {
      RLY_DRV1 = 1;
    }


  } else if (Sub_Relay == 2) { // 2 Change Over relay section
    if (Sub_Time == 1) {
      RLY_DRV2 = 0;
      RLY_DRV1 = 0;
    } else if (Sub_Time == 2) {
      RLY_DRV2 = 1;
      RLY_DRV1 = 1;
    }
  }


}


void Key_CHK_RESET() {


  if (!RESET && !bits.KeyLock_RESET1) { // CHECK IF SELECT IS PRESSED
    Debounce++;
    if (Debounce > 10) {
      Debounce = 0;
      bits.KeyLock_RESET1 = 1;
      PRG_RUN_RESET();
    }
  } else if (RESET && bits.KeyLock_RESET1) {
    bits.KeyLock_RESET1 = 0;
    Debounce = 0;
  }
}


void RLY_CHG_CHK() {
  RLY_Off_Flag = 0;
  if (Sub_Relay == 1) {
    RLY_DRV2 = 1;
    if (Sub_Time == 1) {
      RLY_DRV1 = 0;
    } else if (Sub_Time == 2) {
      RLY_DRV1 = 1;
    }


  } else if (Sub_Relay == 2) { // 2 Change Over relay section
    if (Sub_Time == 1) {
      RLY_DRV2 = 0;
      RLY_DRV1 = 0;
    } else if (Sub_Time == 2) {
      RLY_DRV2 = 1;
      RLY_DRV1 = 1;
    }
  }
}


void Relay_OFF()


{
  RLY_Off_Flag = 1;
  if (Sub_Relay == 1) { // One Relay change over selection
    RLY_DRV2 = 0;
    if (Sub_Time == 1) {
      RLY_DRV1 = 1;
    } else if (Sub_Time == 2) {
      RLY_DRV1 = 1;
    }
  } else


  if (Sub_Relay == 2) { // 2 Change Over relay section
    if (Sub_Time == 1) {
      RLY_DRV2 = 1;
      RLY_DRV1 = 1;
    } else if (Sub_Time == 2) {
      RLY_DRV2 = 0;
      RLY_DRV1 = 0;
    }
  }


}


void Process_RUN_MODE() {


    Sub_Time = 1;
    Sub_Relay = 1;
    LED_MS_Flag = 1;
    On_Int_Flag = 0;
    Key_CHK_RESET();


    if (LED_MS_Flag == 1) {


      if (On_Int_Flag == 1) {
        if (RLY_Off_Flag == 0) {
          RLY_CHG_CHK();
        }


        LED_HM_Flag = 0; //min_Hour Flag
        LED_SeMi_Flag = 0; // Sec & min FLag
        LED_MS = 1;
        LED_SS = 0;
        LED_HM = 1;
        Dissect_2(Top_Display);
        Dissect(Bottom_Value);
      } else


      if (On_Int_Flag == 0) {


        if (Cylic_Flag == 0) {
          On_Time = 2525;
          if (RLY_Off_Flag == 0) {
            RLY_CHG_CHK();
          }


          LED_HM_Flag = 0; //min_Hour Flag
          LED_SeMi_Flag = 0; // Sec & min FLag
          LED_MS = 1;
          LED_SS = 0;
          LED_HM = 1;
          Dissect_2(On_Time);
          Dissect(Bottom_Value);
          //Cylic_Flag=1;


        }
        if (Cylic_Flag == 1) {
          Off_Time = 3636;
          if (RLY_Off_Flag == 0) {
            RLY_CHG_CHK();
          }


          LED_HM_Flag = 0; //min_Hour Flag
          LED_SeMi_Flag = 0; // Sec & min FLag
          LED_MS = 1;
          LED_SS = 0;
          LED_HM = 1;
          Dissect_2(Top_Display);
          Dissect(Off_Time);
          //Cylic_Flag=0;
        }
      }
    }


    void main(void) {


      On_Time = 2525;
      Off_Time = 3535;
      Cylic_Flag = 0;


      while (1) {


        Process_RUN_MODE();


      }


    }


    void interrupt isr(void) {


      asm("clrwdt");


      if (TMR1IF) {
        TMR1IF = 0;
        //	TMR1H = 0x3C;
        //  TMR1L = 0xB0;100ms


        TMR1H = 0xFE;
        TMR1L = 0x0C; // timer interrupt for 1ms


        if (On_Int_Flag == 1) {
          if (Top_Display > Bottom_Value) {
            if (LED_MS_Flag == 1) {
              Bottom_Value = (Sec * 1000) + MSec;
            } else if (LED_SeMi_Flag == 1) {
              Bottom_Value = (Min * 100) + Sec;
            } else if (LED_HM_Flag == 1) {
              Bottom_Value = (Hour * 100) + Min;
            }


          } else


          if (Top_Display == Bottom_Value) {


            Relay_OFF();
          }
        } else if (On_Int_Flag == 0) {
          // Cyclic timer....................................................................
          if (Cylic_Flag == 0) {
            if (On_Time > Bottom_Value) {
              if (LED_MS_Flag == 1) {
                Bottom_Value = (Sec * 1000) + MSec;
              } else if (LED_SeMi_Flag == 1) {
                Bottom_Value = (Min * 100) + Sec;
              } else if (LED_HM_Flag == 1) {
                Bottom_Value = (Hour * 100) + Min;
              }


            } else


            if (Bottom_Value == On_Time) {
              Cylic_Flag = 1;
              Relay_OFF();
              //Off_Time=1234;
              On_Int_Flag = 0;
              Bottom_Value = 0;
            }


          } else


          if (Cylic_Flag == 1) {
            if (Off_Time > Top_Display) {
              if (LED_MS_Flag == 1) {
                Top_Display = (Sec * 1000) + MSec;
              } else if (LED_SeMi_Flag == 1) {
                Top_Display = (Min * 100) + Sec;
              } else if (LED_HM_Flag == 1) {
                Top_Display = (Hour * 100) + Min;
              }


            } else


            if (Top_Display == Off_Time) {
              Cylic_Flag = 0;
              Relay_OFF();
              //On_Time=1032;
              On_Int_Flag = 0;
              Top_Display = 0;
            }


          }


          On_Int_Flag = 0;


        }


        MSec++;
        if (MSec >= 1000) {
          MSec = 0;
          Sec = Sec + 1;
        } else if (Sec >= 59) {
          Sec = 0;
          Min = Min + 1;
        } else if (Min >= 59) {
          Min = 0;
          Hour = Hour + 1;
        } else if (Hour > 99) {
          Hour = 0;
        }


        Display();
      }


    }