打印

中断嵌套是否有问题???

[复制链接]
2806|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wangruixu1121|  楼主 | 2011-7-25 20:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
外部中断0启动后,返回主函数无法启动外部中断1
#include<reg52.h>
#define ulint unsigned long int
#define uchar unsigned char
sbit up=P1^0;
sbit down=P1^1;
sbit PW1=P1^2;
sbit PW2=P1^3;
#define motorup PW1=0; PW2=1;
#define motordown PW1=1; PW2=0;
#define stop PW1=1; PW2=1;

void delay(ulint z)
{
ulint x,y;
for(x=z;x>0;x--);
    for(y=4294967290;y>0;y--);
}


void main()
{
EA=1;
EX0=1;
EX1=1;
IT0=0;
IT1=1;
PX0=1;
while(1)
{
  stop;
  EX0=1;
  if(up==0&&down==1)
   {
    motorup;   
   }
  else if(up==0&&down==0)
   {
    stop;
   }
  else if(up==1&&down==0)
   {
    motordown;
   }
  else if(up==1&&down==1)
   {
    stop;
   }
}
}


void autostop() interrupt 0
{
stop;
main();
}



void autodo() interrupt 2
{
  motordown;
  delay(50000);
}

相关帖子

沙发
yewuyi| | 2011-7-25 22:20 | 只看该作者
如无必要,请不要轻易使用中断嵌套,特别是对于初学者而言,应当暂时尽量回避使用中断嵌套.

从你本贴体现出的技术水平看,个人建议你:暂时回避它.

另:从俺个人观察来看,绝大多数应用是不需要中断嵌套的。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
xlsbz + 1
板凳
wangruixu1121|  楼主 | 2011-7-27 16:15 | 只看该作者
我想利用外部中断控制直流电机的自动和堵转,利用我这个程序只能执行一次电机自动,不能再执行第二次 ,恳请贵人指导一二

使用特权

评论回复
地板
wangruixu1121|  楼主 | 2011-7-27 16:19 | 只看该作者
我想利用外部中断去控制直流电机的自动和堵转,PW1和PW2主要控制电机的正反转,UP是手动上升,down是手动下降,外部中断1是控制自动挡,外部中断0是控制电机堵转停止,可否指点一二,怎样更改才算成功呢?

使用特权

评论回复
5
liang7143| | 2011-7-27 17:20 | 只看该作者
void autodo() interrupt 2
{
  motordown;
  delay(50000);
}

在中断中延时这么久啊!!!!!
void autostop() interrupt 0
{
stop;
main();
}
头一回看见 main还可以被调用

使用特权

评论回复
6
wangruixu1121|  楼主 | 2011-7-27 21:30 | 只看该作者
谁能给我解惑啊 谢谢啦

使用特权

评论回复
7
mohanwei| | 2011-7-28 00:01 | 只看该作者
很强大……

使用特权

评论回复
8
xlsbz| | 2011-7-29 00:07 | 只看该作者
如无必要,请不要轻易使用中断嵌套,特别是对于初学者而言,应当暂时尽量回避使用中断嵌套.

从你本贴体现出的技术水平看,个人建议你:暂时回避它.

另:从俺个人观察来看,绝大多数应用是不需要中断嵌套的。 ...
yewuyi 发表于 2011-7-25 22:20

我也是这样觉得的。
嵌套一般为了实时性高点,但却有可能牺牲了稳定性(即便高人也有犯糊涂的时候)(为了提高点实时性,搞嵌套我看高人也是假高人)。
所以我是这样觉得的:
大部分场合下,建议初学者不要使用中断嵌套。
中级水平和水平一般的人经常使用中断嵌套。
高手的做法和初学者差不多,就是不使用中断嵌套。

使用特权

评论回复
9
yewuyi| | 2011-7-29 08:58 | 只看该作者
我也是这样觉得的。
嵌套一般为了实时性高点,但却有可能牺牲了稳定性(即便高人也有犯糊涂的时候)(为了提高点实时性,搞嵌套我看高人也是假高人)。
所以我是这样觉得的:
大部分场合下,建议初学者不要使用中断 ...
xlsbz 发表于 2011-7-29 00:07


也不是绝对,主要还是要看信号、任务调度、芯片资源等,是否使用是系统方案平衡出的结果,而不能预设前提。

使用特权

评论回复
10
delin17| | 2011-7-29 12:17 | 只看该作者
本帖最后由 delin17 于 2011-7-29 12:18 编辑

void autostop() interrupt 0
{
stop;
main();
}
第一次见这样写程序的。
中断返回会自动回到中断发生时,主程序的位置执行。

使用特权

评论回复
11
jianjian008| | 2011-7-29 15:10 | 只看该作者
嵌套真的不容易学啊

使用特权

评论回复
12
bbqqbbqqbbq| | 2011-7-29 17:27 | 只看该作者
void autostop() interrupt 0
{
stop;
main();
}
这段很有问题吧。。。。

使用特权

评论回复
13
DownCloud| | 2011-7-29 22:16 | 只看该作者
main()函数在中断中调用,必然死机。 中断X0讲永远不会退出。你想一下,不退出的话其他中断也响应不了,而且更可怕的是,堆栈一直在增长,这个程序是完全乱跑的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

76

帖子

1

粉丝