3.3V停止单片机定时器

现在使用单片机构建了一个90s开,10s关,总计循环72次的计数器。但现在希望当外部有一个电压拉高后,能退出这个循环,现在只能实现前半部分,实现不了退出功能

#include "STC11F04E.h"
#include <intrins.h>

#define u8 unsigned char
#define u16 unsigned int
#define u32 unsigned long

u32 T_on=9000;
u32 T_off=1000;
u32 T_n=72;

u32 T_Work;
u32 cnt_T,cnt_W;
void Timer0(void) interrupt 1
{
TL0 = 0xEF;
TH0 = 0xD8;

if(cnt_W<T_Work-T_off-1)    
{
    cnt_W++;
    if(cnt_T<T_on)    
    {
        P10=0;        
        cnt_T++;
    }
    else if(cnt_T<(T_on+T_off-1))    
    {
        P10=1;    
        cnt_T++;
    }
    else
        cnt_T=0;
}

else if(cnt_W==T_Work-T_off-1)            
{
    P10=1;    
}

}

void main()
{
cnt_T=0;
cnt_W=0;
T_Work=T_n*(T_on+T_off+1);
EA=1;
EX0=1;
ET0=1;

AUXR &= 0x7F;        
TMOD &= 0xF0;        
TMOD |= 0x01;        
TL0 = 0xEF;        
TH0 = 0xD8;        
TF0 = 0;        
TR0 = 1;        

P11=1;

while(1)
{;}

}

sbit PAUSE=P0^0;//根据实际自己改IO口
void main()
{
cnt_T=0;
cnt_W=0;
T_Work=T_n*(T_on+T_off+1);
EA=1;
EX0=1;
ET0=1;

AUXR &= 0x7F;        
TMOD &= 0xF0;        
TMOD |= 0x01;        
TL0 = 0xEF;        
TH0 = 0xD8;        
TF0 = 0;        
TR0 = 1;        
 
P11=1;
 
  while(1)
  {
    if(PAUSE==1)
    {
      TR0=0;
      P10=0; //推出后关还是开自己调整
    }
  }
}

加一个GPIO检测外部电平呗,每个循环看一下这个GPIO的电平,低电平的时候不影响原来的循环,高电平的时候直接break退出。

接一个数字电压芯片,如AT89c51 ,读取供电电压,每次循环读取电压,电压变化退出循环