谁帮我看一下,我的外部中断是真么了?

daring1981 2009-10-30 09:23:33
#include <reg52.h>
sbit light=P1^0;
void delay();
void main()
{
while(1)
{
light=1;//灭灯
EA=1;//开总中断
EX0=1;//开外部中断0
IT0=1;//设置中断触发方式 :跳沿触发
}

}

void zhongduan() interrupt 0
{
light=0;//亮灯
delay(); //延迟一会
}

void delay()
{
unsigned int i,j;
for (i=100;i>0;i--)
for(j=1000;j>0;j--);
}
我把51单片机20口VSS与P3.2口短接,产生中断二极管发光,延迟一会,然后我断开连接,为什么二极管又亮一回?
...全文
38 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
daring1981 2009-10-30
  • 打赏
  • 举报
回复
谢谢楼上,明白啦是手动连接的抖动中断,我用软件中断测试P3.2口由高电平到低电平变化时产生中断,灯亮,P3.2口由低电平到高电平灯不亮
shanzhao2009 2009-10-30
  • 打赏
  • 举报
回复
给楼主个建议:

void main()
{
while(1)
{
light=1;//灭灯
EA=1;//开总中断
EX0=1;//开外部中断0
IT0=1;//设置中断触发方式 :跳沿触发
}
}

你这样的主程序写法是会出现问题的,中断的初始化怎么能在主循环中进行呢,另外初始化的次序我认为也不合适,应首先设置触发方式再开中断,建议改成这样:

void main()
{
light=1;//灭灯
IT0=1;//设置中断触发方式 :跳沿触发
EX0=1;//开外部中断0
EA=1;//开总中断
while(1);
}

至于亮两次的问题,不知道是不是由于楼主手动连接的抖动所引起的错误中断...

27,370

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧