
#include<reg52.h>
#include<serial.h>
#include<generic.h>

char T2_higher_byte = 0x00,T2_lower_byte = 0x00;
char set_higher = 0x24,set_lower = 0x00;
/************************************************************************
The timer is triggered if either an overflow occurs
or the T2EX(P1.1) receives an 1 to 0 transition.
I am using a frequency of 100Hz for test purpose.
*************************************************************************/
void timer2_ISR (void) interrupt 5
{
if(EXF2 == 1)
   {
   TL2 = 0;//resetting lower timer register so that it starts from begining
   TH2 = 0;//resetting higher timer register so that it starts from begining
   T2_higher_byte = RCAP2H;//storing the captured higher byte 
   T2_lower_byte = RCAP2L;//storing the captured lower byte
   }
TF2 = 0;            /* Clear the interrupt request */
EXF2 = 0;			/* Clear the edge trigger flag */
}
/************************************************************************/
void initialize_timer2()
{
ET2 = 1;                      /* Enable Timer 2 Interrupts */
CP_RL2 = 1;					  /* Making the timer edge triggered */
EXEN2 = 1;					  /* Enabling pin 1.1 */
TR2 = 1;                      /* Start Timer 2 Running */
}
/************************************************************************/
void serial_interrupt() interrupt 4
{
	if(TI)
		{
		TI = 0;
		}	
	if(RI)
		{
		RI = 0;
		}
}
/************************************************************************/
void main()
{
initialize_serial();	 /* initializing serial interrupt */
SBUF = 0XA4;			 /* Sending dummy value */
initialize_timer2();	 /* initializing timer interrupt */
while(1)
     {
	 sec_wait(1);//wait for 1 sec
     TR2 = 0;	 //Disabling timer 2
     SBUF = 0XA1;//sending dummy value
     msec_wait(1);//wait to give time for serial sending
     SBUF = T2_higher_byte;//sending the higher byte
     msec_wait(1);//wait to give time for serial sending
     SBUF = T2_lower_byte;//sending the lower byte 
     T2_higher_byte = 0;//resetting both higher variables
     T2_lower_byte = 0;//resetting both lower variables 
     TR2 = 1;//enabling timer 2 again
	 }
}    
/************************************************************************/
