打印

请教:C语言中外部中断完成后,返回到什么地方?

[复制链接]
6285|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fxhfxh|  楼主 | 2012-8-16 10:53 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
void main(void)
{
   IO_init();
   int_init();   
   led=1;      
   delay(50);
   led=0;
   delay(50);
   led=1;
    EX1=1;   //外部中断1允许

   while(1){
   _nop_();      
     }
}
请教:用c语言写外部中断的程序,按上面的写法,应该是返回在while循环中吧?但是实际中间发现中断后都是又从main函数开始(为了观察用了发光管闪烁显示,看门狗没有用),又执行了一次初始化的工作,(而初始化的工作对一些口的操作和运行时是不同的),即我并不想再去操作发光管亮,只是希望在while循环中运行,应该怎么办呢?以前用汇编,没有这个问题,现在刚学c,概念还不清晰,恳请知道的朋友给予指教,谢谢先。

相关帖子

沙发
NE5532| | 2012-8-16 10:58 | 只看该作者
是返回while里面,这个问题汇编和C是一样的,检查你的其他地方,还有堆栈设置好了没有。

使用特权

评论回复
板凳
turf123| | 2012-8-16 11:10 | 只看该作者
你的中断函数呢?

使用特权

评论回复
地板
joyme| | 2012-8-16 11:11 | 只看该作者
是不是没有定义中断服务程序,但使能了中断,导致中断来了程序跑飞

使用特权

评论回复
5
ayb_ice| | 2012-8-16 11:16 | 只看该作者
把相应的中断程序加上

当然是返回被中断的地方继续运行

使用特权

评论回复
6
turf123| | 2012-8-16 11:19 | 只看该作者
如果如果没有中断程序,来了中断,地址指针跑到对应的中断位置,但是没有跳转程序。就继续往下走,自然就走到用户存储区了,主函数就在这块。看看51单片机的存储器结构就明白了。所以说中断不要乱开。

使用特权

评论回复
7
@三月天| | 2012-8-16 13:02 | 只看该作者
用仿真器跟踪一下,在中断程序打个断点,单步运行,看SP,PC等寄存器是否正常。还要注意看看是否有复位发生。

使用特权

评论回复
8
fxhfxh|  楼主 | 2012-8-16 13:24 | 只看该作者
是返回while里面,这个问题汇编和C是一样的,检查你的其他地方,还有堆栈设置好了没有。
NE5532 发表于 2012-8-16 10:58

十分感谢大侠的回复。C语言里面的堆栈怎么设置?我真的不知道。汇编里面好像是设置SP的值吧。请告之。谢谢。

使用特权

评论回复
9
ayb_ice| | 2012-8-16 13:26 | 只看该作者
编译器已经帮你设置堆栈了

使用特权

评论回复
10
zhaofy521| | 2012-8-16 13:39 | 只看该作者
全部程序贴出来吧,应该是会跳到被中断处

使用特权

评论回复
11
turf123| | 2012-8-16 19:18 | 只看该作者
我说看着眼熟呢,用得着在两个论坛里都问么?哈哈

使用特权

评论回复
12
zxcscm| | 2012-8-16 19:50 | 只看该作者
把六楼的搞明白就可以了

使用特权

评论回复
13
zjgtan| | 2012-8-16 20:13 | 只看该作者
以前在其他平台上也遇到过,不小心把中断服务程序注释掉了,出来的问题也是莫名其妙。

使用特权

评论回复
14
fzy_666| | 2012-8-17 09:15 | 只看该作者
返回到中断发生的地方的下一条指令

使用特权

评论回复
15
fxhfxh|  楼主 | 2012-8-18 12:54 | 只看该作者
谢谢6楼的帮助回复。问题已经解决,确实是因为开了中断,而没有相应的中断函数存在造成的。(其实也是在修改程序时将定时中断函数屏蔽掉了而造成的)。谢谢所有朋友的回复。在此也提醒初学C语言编程的朋友,如果开了中断,一定记得要有相应的中断函数与之配套,否则将会发生不是预期的结果。

使用特权

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

本版积分规则

52

主题

382

帖子

1

粉丝