
// Skeleton c program using split Timer zero (mode 3)
// Compile SDCC Mode3Timer.c
// Packihx Mode3Timer.ihx > Mode3Timer.hex
   #include<8052.h> 
   unsigned char cMeasureDone;
   unsigned char cTimer1, cTimer2;
   unsigned char cCounter1, cCounter2;
   void measure_start( void );
   char measure_poll( void );
void main (void){
  PCON |= SMOD;                 
  SCON = 0x52;          	
  TMOD = 0x27;          	
  TH1 = 0xF3;           	
  TL1 = -1;
  for(;;){
    RI=0;
    measure_start();                    
    while( measure_poll() == 0 );       
    // YOUR CODE GOES HERE
    }

}
char measure_poll( void )
{
  return cMeasureDone;
}
void int_tl0 (void) interrupt 1        
{

  if( ++cCounter1 == 0 )                
    cCounter2++;
}
void int_th0 (void) interrupt 3 
{
  if( --cTimer1 == 0 ){          
    if( --cTimer2 == 0 )
        cMeasureDone = 1;}         
}
void measure_start( void )
{
  TR0 = 0;                      
  TF0 = 0;                      
  TL0 = 0;                      
  cCounter1 = 0;                 
  cCounter2 = 0;
  cTimer1 = 0;                   
  cTimer2 = 30;
  TR1 = 1;                      
  IT0 = 1;                      
  IE0 = 0;                     
  ET0 = 1;                     
  ET1 = 1;                     
  EA = 1;                      
  cMeasureDone = 0;
  TH0 = 0;                      
  TR0 = 1;                      
}
