51单片机这两个中断函数如何协调工作

来源:百度知道 编辑:UC知道 时间:2024/06/19 17:54:48
void main(void)
{ IT0 = 1; // INT0 (P3.2)
EX0 = 1; // Enable EX0 Interrupt
EA = 1;
TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值
TH0=0x00;//reload value
TL0=0x00;//initial value
ET0=1;//开中断
TR0=1;
P2=0x00;//1位数码管全部显示

while(1)//主循环
{ if(irok)
{ Ircordpro();//码值处理
irok=0; }
if(irpro_ok)//step press key
{Ir_work();//码值识别散转 }
}
}

//////////////////////////////////////////////////////////////////
void tim0_isr (void) interrupt 1 using 1//定时器0中断服务函数
{
irtime++;
}

////////////////////////////////////////////////////////////////////
void ex0_isr (void) interrupt 0 using 0//外部中断0服务函数
{ static unsigned char i;
if(irtime<42&&irtime>=33)//引导码 TC9012的头码
i=0;
irdata[i]=irtime;//一次存储32位电平宽度
irtime=0;
i++;
if(i==33)
{ irok=1;

晕,就是要根据变化后的irtime测量脉冲宽度来区分
如果你是怕中断被打断在中断函数中假如EA=0,中断函数结束后EA=1

时间用KEIL仿真时你拉抵ET0进入中断,记录一下运行时间,然后出中断在记录一下时间就知道