搜索
bottom↓
回复: 11

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

[复制链接]

出0入0汤圆

发表于 2015-7-15 21:54:53 | 显示全部楼层 |阅读模式
我在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();
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入8汤圆

发表于 2015-7-15 22:21:09 | 显示全部楼层

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

void extern_int0(void) interrupt 0 using 0
{
        P2 = 0X00;
        delay();         /* 去掉这句 */
}

出0入0汤圆

 楼主| 发表于 2015-7-15 22:25:19 | 显示全部楼层
可是中断时间远远长于delay()的延时时间,不知道为什么?按下中断键后等了很久才重现流水灯

出0入0汤圆

 楼主| 发表于 2015-7-15 22:26:26 | 显示全部楼层
中断里不能有延时吗?中断里添加延时会引起程序出错吗?

出0入0汤圆

 楼主| 发表于 2015-7-15 22:27:59 | 显示全部楼层
本帖最后由 daiya 于 2015-7-15 22:30 编辑

我的目的是想使P2口全亮一段时间,和流水灯区别以示进入中断

出0入8汤圆

发表于 2015-7-15 22:34:44 | 显示全部楼层

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

void extern_int0(void) interrupt 0 using 0
{
        P2 = 0X00;
        delay();         /* 去掉这句 */
}

出0入0汤圆

 楼主| 发表于 2015-7-15 23:03:47 | 显示全部楼层
板子上运行的情况是实际中断延时远远大于delay()函数的延时,想知道为什么会出现这种情况?

出0入0汤圆

 楼主| 发表于 2015-7-15 23:04:52 | 显示全部楼层
本帖最后由 daiya 于 2015-7-16 01:24 编辑

在Keil软件里模拟一切正常的,中断里的延时和delay()相同,到了板子上就不行了

出0入0汤圆

发表于 2015-7-16 07:44:39 来自手机 | 显示全部楼层
进入中断你用全亮表示,退出中断却没有指示,中断最后加个全灭试试

出0入0汤圆

发表于 2015-7-16 09:03:56 | 显示全部楼层
典型的可重入问题,keil C51默认不支持可重人

出0入0汤圆

发表于 2015-7-16 10:40:51 | 显示全部楼层
用指令延时要关闭中断对它的影响,中断优先级比较高,要执行完中断才会在处理主程序延时,这样延时时间会变长,一般比较长的延时用定时器计时,中断里面的延迟不能够超过定时中断

出0入0汤圆

发表于 2015-7-16 10:50:16 | 显示全部楼层
中断里忌用延时。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-6 15:39

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表