小白 求助一个 很简单的 外部中断问题

2019-07-16 05:38发布

用的是 stc89c52rc      外部中断使用 下降沿触发



#include<reg51.h>
sbit LED = P2^3;
sbit LE =P2^0;
void delay(unsigned int t);
void s() interrupt 0 using 2
{
   LED = ~LED;
   delay(100);
   }
void main()
{
     EX0 = 1;    // 外部中断0开中断;   
     EA = 1;      // 使能全局中断。
     IT0=1;
   while(1)            
   {
      LE= 0;     // 点亮LED
      delay(100);    // 延时大约0.1s
      LE= 1;    // 熄灭LED
      delay(100);    // 延时大约0.1s
   }
}
void delay(unsigned int t)      //延时子程序
{
   while(t--);
}



我是想主函数使 P2。0 的LED灯闪      然后 中断程序中 就 P2。。3 的LED闪  
但是 运行后  一旦进入中断程序  就不能返回主函数了  
就是 一开始 是P2.0闪    按了中断按钮后   就P2,3闪   但是再按还是P2,3闪   P2,0就不闪了~~
求助各位大神呀  那里出问题了    中断不能返回呢···


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
kk8770560
1楼-- · 2019-07-16 08:46
顶~~上去···
efanser
2楼-- · 2019-07-16 14:28
IT0=0;好像是低电平触发吧
▄︻┳═一
3楼-- · 2019-07-16 19:39
。。。你可以弄一个切换标志位,随便拿个标志,不如说“f”。中断里直接 f=~f。大循环里就弄两个小循环判断,当第一个就是当f=0时闪2.0,第二个就是当f=1时闪2.3。。。。我也是刚学,给个建议。
▄︻┳═一
4楼-- · 2019-07-17 00:38
而且在我看来,你这个程序2.3是不会闪的,因为是边沿触发方式,你按一下最多2.3闪0.1s,就继续闪2.0了。  除非你把IT0=1改成IT0=0.这样你就按着外部中断不放,2.3就会闪。还有抗干扰延时也没有。。模拟还可以,实物的话就可能会干扰很大了。。一点建议高手们别笑。
kk8770560
5楼-- · 2019-07-17 02:08
 精彩回答 2  元偷偷看……
kk8770560
6楼-- · 2019-07-17 06:38
▄︻┳═一 发表于 2012-5-27 18:40
。。。你可以弄一个切换标志位,随便拿个标志,不如说“f”。中断里直接 f=~f。大循环里就弄两个小循环判断 ...

呵呵··这个我可以做到    其实这个是个简化程序··我想做的不仅是闪两个灯而已···只是拿出来做个简化
主要问题 在于  中断后 不能返回主函数

一周热门 更多>