注册 登录
编程论坛 单片机编程

求问个单片机关于中断的问题

朱三哥 发布于 2013-03-04 15:49, 4099 次点击
#include <reg51.h>
sbit red_line=P3^2;
sbit red_line1=P2^0;
void init_int0()  // 初始化外部中断,选择下降沿有效
{
    EA=1;
    EX0=1;
    IT0=1;
}
void init_xlat0(unsigned char high,unsigned char low)        //T0时钟初始化,模式1
{
    TMOD=9;
    TH0=high;
    TL0=low;
    TF0=0;
     TR0=1;
}

void delay(unsigned char a,unsigned char b)     //时钟延时        
{
    init_xlat0(a,b);
    while(1){
        if(TF0==1)
            break;
    }
}
void main()
{
    init_int0();
   while(1){
       P2=0;
      delay(0,0);
      red_line=0;
   }   
}
void into_in(void) interrupt 0
{   
    red_line=1;    // 放在这运行是正常的,能出中断
    EX0=0;      
     P2=0xCC;
    delay(0,0);
    //red_line=1;  //把上面的red_line删掉,用下面的这个就出不了中断了,求问为什么   
    EX0=1;
    //red_line=1;  //同样这个地方也是不正常的
}
3 回复
#2
一介草莽2013-05-05 21:42
一定不要在中断里面延时 这是大忌
在中断延时太久 那么当你还在延时时 有可能第二次中断又来了
那么就始终没法执行完中断函数 你上面就是这种情况把延时放在中断外就对了
#3
小xiong2013-05-23 13:55
嗯,是的,把ex0=1放到最后一行,
#4
猴哥取经2013-06-02 16:45
长知识了.
1