新手请教:关于进入中断后退出时间的问题

2020-01-20 18:55发布

我在Keil里编译了下面的程序,烧写进芯片后运行情况却很奇怪,P2口外接8个LED,流水灯停止进入中断后8个LED全亮,但是持续了好一阵子才退出中断,完全超出延时函数的延时,一时想不明白,请各位高手指教!程序如下:

#include<REG51.H>

void init(void)
{
        EX0=1;
        IT0=1;
        EA=1;
}

void delay(void)
{
        unsigned int i,j;
        for(i=0;i<500;i++)
        {
                for(j=0;j<121;j++)
                {
                        ;
                }
        }
}

void light1(void)
{
        P2=0XAA;
}

void light2(void)
{
        P2=0X55;
}

void main(void)
{
        init();
        while(1)
        {
                light1();
                delay();
                light2();
                delay();
        }
}

void extern_int0(void) interrupt 0 using 0
{
        P2 = 0X00;
        delay();
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
Jmhh247
1楼-- · 2020-01-21 00:54

你的程序很奇怪,不太清楚你想要什么样的效果,中断时间长是因为中断服务里有延时,去掉这个延时,中断应该就正常了,见下面

void extern_int0(void) interrupt 0 using 0
{
        P2 = 0X00;
        delay();         /* 去掉这句 */
}
daiya
2楼-- · 2020-01-21 01:33
可是中断时间远远长于delay()的延时时间,不知道为什么?按下中断键后等了很久才重现流水灯
daiya
3楼-- · 2020-01-21 04:58
 精彩回答 2  元偷偷看……
daiya
4楼-- · 2020-01-21 07:17
本帖最后由 daiya 于 2015-7-15 22:30 编辑

我的目的是想使P2口全亮一段时间,和流水灯区别以示进入中断
Jmhh247
5楼-- · 2020-01-21 12:30

你的程序很奇怪,不太清楚你想要什么样的效果,中断时间长是因为中断服务里有延时,去掉这个延时,中断应该就正常了,见下面

void extern_int0(void) interrupt 0 using 0
{
        P2 = 0X00;
        delay();         /* 去掉这句 */
}
daiya
6楼-- · 2020-01-21 16:37
板子上运行的情况是实际中断延时远远大于delay()函数的延时,想知道为什么会出现这种情况?

一周热门 更多>