找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9716|回复: 13
收起左侧

51单片机外部中断0当P3.2口断开后,中断程序为什么还在执行

[复制链接]
ID:134192 发表于 2017-3-2 21:40 | 显示全部楼层 |阅读模式
50黑币
我用外部中断0写了一个程序,用低电平触发,当p3.2松开后,为什么中断服务程序还在执行,没有立刻停止返回主程序中;
中断程序是
void exte0()  interrupt0
{
      P1=0X03;
      delay(1000);
}
void delay(unsigned c)
{
     unsigned int a,b;
     for(a=c;a>0;a--)
     {
             for(b=100;b>0;b--)
      }
}

回复

使用道具 举报

ID:134192 发表于 2017-3-2 22:02 | 显示全部楼层
不写delay(1000)这个程序就没问题了,但是如果换做别的带时间的中断程序就又有这个问题了,比如中断写成流水灯,
回复

使用道具 举报

ID:167311 发表于 2017-3-2 22:47 | 显示全部楼层
进入中断程序后,只有在执行完delay 延时后 才会返回到主程序,还有外部中断标志位 清下 试下
回复

使用道具 举报

ID:75631 发表于 2017-3-2 23:06 | 显示全部楼层
“为什么中断服务程序还在执行,没有立刻停止返回主程序中“
 delay(1000);
你还在延时啊!
回复

使用道具 举报

ID:167806 发表于 2017-3-3 09:31 | 显示全部楼层
一进入中断时就要关闭中断的,把EA=0
回复

使用道具 举报

ID:125378 发表于 2017-3-3 13:33 | 显示全部楼层
程序有优先级的问题,再看看。仔细检查
回复

使用道具 举报

ID:123289 发表于 2017-3-4 02:02 | 显示全部楼层
中断的返回,是由程序运行“RETI"决定的,而与接口无关,接口信号只能引起进入中断,而不能引起退出中断。
回复

使用道具 举报

ID:111634 发表于 2017-3-4 07:53 | 显示全部楼层
这句有问题,少“;”。 { for(b=100;b>0;b--)}
回复

使用道具 举报

ID:134192 发表于 2017-3-4 13:54 | 显示全部楼层
杰杰diy 发表于 2017-3-3 09:31
一进入中断时就要关闭中断的,把EA=0

谢谢我试试
回复

使用道具 举报

ID:134192 发表于 2017-3-4 13:55 | 显示全部楼层
yzwzfyz 发表于 2017-3-4 02:02
中断的返回,是由程序运行“RETI"决定的,而与接口无关,接口信号只能引起进入中断,而不能引起退出中断。

哦,谢谢,我先试试
回复

使用道具 举报

ID:134192 发表于 2017-3-4 13:56 | 显示全部楼层
TIANYUN1573 发表于 2017-3-2 22:02
不写delay(1000)这个程序就没问题了,但是如果换做别的带时间的中断程序就又有这个问题了,比如中断写成 ...

谢谢,就是不写就成了
回复

使用道具 举报

ID:134192 发表于 2017-3-4 13:56 | 显示全部楼层
hse 发表于 2017-3-2 22:47
进入中断程序后,只有在执行完delay 延时后 才会返回到主程序,还有外部中断标志位 清下 试下

嗯嗯,我试试,谢谢
回复

使用道具 举报

ID:111634 发表于 2017-3-4 21:11 | 显示全部楼层
TIANYUN1573 发表于 2017-3-4 13:55
哦,谢谢,我先试试

试什么啊?c程序没有RETI,不是汇编,中断返回是由c51根据正确的中断函数程序自动生成的。
回复

使用道具 举报

ID:163324 发表于 2017-3-4 23:31 | 显示全部楼层
因为你要等待delay执行完毕才能回主函数。
可以将delay函数放到主函数中执行
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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