外部中断0嵌套定时器中断

进入外部中断之后启动定时器中断,执行完之后关掉定时器中断unsigned char time;

sbit bb1=P1^0;

void int0(void) interrupt 0     using 1
{
        TMOD=0x01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        ET0=1;
        time = 0;       //计数器清零
        TR0=1;  

        while(time<20);  //等待定时中断计数器溢出      
        ET0=0;  
        bb1 = !bb1;            
}

void timer0(void) interrupt 1
{      
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        time++;
}

void main()
{      
        EX0 = 1;        //外部中断初始化
        IT0 = 0;        //低电平中断
        PT0 = 1;        //关键,让定时器中断优先级高于外部中断
        EA=1;           //开总中断
        while(1);
}
运行的效果是每按键产生一次外部中断,相对中断按键延迟一段时间后LED翻转。