首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

单片机间断

2013-04-05 
单片机中断各位大侠问一下,我在看单片机例程的时候发现,单片机中断使用时,在中断程序中为啥要先关中断再开

单片机中断
各位大侠问一下,我在看单片机例程的时候发现,单片机中断使用时,在中断程序中为啥要先关中断再开中断,

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溢出后就会触发中断,楼主应该明白了吧。

热点排行