当前位置: 代码迷 >> 单片机 >> 单片机间断
  详细解决方案

单片机间断

热度:69   发布时间:2016-04-28 15:27:42.0
单片机中断
各位大侠问一下,我在看单片机例程的时候发现,单片机中断使用时,在中断程序中为啥要先关中断再开中断,
void T0_INT(void) interrupt 1
{
TH0=0XEE;
TL0=0X00;  
ET0=0;    //关T0中断
time--;
if(time==0)
{
P0=~P0;
time=200;
}
ET0=1;  //开中断
}

而当我删掉上面注释的两行程序之后,对于程序本身没有什么影响,那为什么还都要加上呢?
单片机 中断

------解决方案--------------------
应该是为了精确进入中断的计时,比如说定时器1s中断一次,在中断子程序中执行一次操作,那么如果你的操作时间太长的话,比如说0.5s,那么如果你不关中断,下一次进入中断的时间就是0.5s后,不再是1s了。
------解决方案--------------------

void delay(long y)
{ while(y--); }

void T0_INT(void) interrupt 1
{
TH0=0XEE;
TL0=0X00;  
ET0=0;    //关T0中断
         delay(100);
time--;
if(time==0)
{
P0=~P0;
time=200;
}
ET0=1;  //开中断
}

程序进入delay时可以看到即使ET0设置成0,TH0,TL0的值仍然会累加,累加到0xffff后,再从0开始累加到0xffff,周而复始。ET0设置成0或者1,并不影响TH0,TL0的累加。时钟在TH0溢出后就会触发中断,楼主应该明白了吧。
  相关解决方案