void tim1_isr (void) interrupt 3 using 1//定时器1中断服务函数
{
irtime++;
}
/*************************************************************/
//外部中断1解码程序
void ex1_isr (void) interrupt 2 using 2//外部中断1服务函数
{
static uchar i,p,z;
static bit startflag;
TR1=1; //定时器1开启
if(startflag)
{
if(irtime<100&&irtime>=53)//引导码 TC9012的头码
{
i=0;
p=1;
z=0;
irdata[i]=irtime;
irtime=0;
}
z++;
if(z>=18)
{
irdata[p]=irtime;
irtime=0;
p++;
if(p==17)
{
new_code=1;
p=0;
TR1=0;
}
}
else
irtime=0;
}
else
{
irtime=0;
startflag=1;
}
}
这是一个红外解码程序,,外部中断1是下降沿触发,
当进入中断1处理函数后,启动定时器1,startflag =0 执行else语句,irtime = 0; startflag = 1;
退出中断函数,下次再进入中断1函数,由于start是局部变量,startflag 是不是又重新分配存储空间,
startflag的值是不是又变为0了?
还有,如果进入if(startflag)语句,定时器计数,irtime =0,后面的if(irtime<100&&irtime>=53)与if(z>=18)都不执行,进入else irtime=0; irtime=0,那岂不是if(irtime<100&&irtime>=53)与if(z>=18)永远都不执行了
irtime是全局变量,进外部中断后TR1=1启动定时器1后,程序是怎样运行的,,, |