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

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条回答
daiya
1楼-- · 2020-01-21 18:50
本帖最后由 daiya 于 2015-7-16 01:24 编辑

在Keil软件里模拟一切正常的,中断里的延时和delay()相同,到了板子上就不行了
bbglx
2楼-- · 2020-01-21 19:43
 精彩回答 2  元偷偷看……
ruanxianwu
3楼-- · 2020-01-22 01:04
典型的可重入问题,keil C51默认不支持可重人
ldx24511
4楼-- · 2020-01-22 04:55
用指令延时要关闭中断对它的影响,中断优先级比较高,要执行完中断才会在处理主程序延时,这样延时时间会变长,一般比较长的延时用定时器计时,中断里面的延迟不能够超过定时中断
lans0625
5楼-- · 2020-01-22 07:41
中断里忌用延时。

一周热门 更多>