现在使用单片机构建了一个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 ,读取供电电压,每次循环读取电压,电压变化退出循环