
void externalinterrupt(void) interrupt 0    //invoked on every positive edge
{
   if( !flag ) {
   TR0 = 1;    //enable timer0
   flag = !flag;        <---- shouldn't this be !flag=flag  ??
  }