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

[复制链接]
 楼主| 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 | 显示全部楼层
是不是没有定义中断服务程序,但使能了中断,导致中断来了程序跑飞
ayb_ice 发表于 2012-8-16 11:16 | 显示全部楼层
把相应的中断程序加上

当然是返回被中断的地方继续运行
turf123 发表于 2012-8-16 11:19 | 显示全部楼层
如果如果没有中断程序,来了中断,地址指针跑到对应的中断位置,但是没有跳转程序。就继续往下走,自然就走到用户存储区了,主函数就在这块。看看51单片机的存储器结构就明白了。所以说中断不要乱开。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
@三月天 发表于 2012-8-16 13:02 | 显示全部楼层
用仿真器跟踪一下,在中断程序打个断点,单步运行,看SP,PC等寄存器是否正常。还要注意看看是否有复位发生。
 楼主| fxhfxh 发表于 2012-8-16 13:24 | 显示全部楼层
是返回while里面,这个问题汇编和C是一样的,检查你的其他地方,还有堆栈设置好了没有。
NE5532 发表于 2012-8-16 10:58

十分感谢大侠的回复。C语言里面的堆栈怎么设置?我真的不知道。汇编里面好像是设置SP的值吧。请告之。谢谢。
ayb_ice 发表于 2012-8-16 13:26 | 显示全部楼层
编译器已经帮你设置堆栈了
zhaofy521 发表于 2012-8-16 13:39 | 显示全部楼层
全部程序贴出来吧,应该是会跳到被中断处
turf123 发表于 2012-8-16 19:18 | 显示全部楼层
我说看着眼熟呢,用得着在两个论坛里都问么?哈哈
zxcscm 发表于 2012-8-16 19:50 | 显示全部楼层
把六楼的搞明白就可以了
zjgtan 发表于 2012-8-16 20:13 | 显示全部楼层
以前在其他平台上也遇到过,不小心把中断服务程序注释掉了,出来的问题也是莫名其妙。
fzy_666 发表于 2012-8-17 09:15 | 显示全部楼层
返回到中断发生的地方的下一条指令
 楼主| fxhfxh 发表于 2012-8-18 12:54 | 显示全部楼层
谢谢6楼的帮助回复。问题已经解决,确实是因为开了中断,而没有相应的中断函数存在造成的。(其实也是在修改程序时将定时中断函数屏蔽掉了而造成的)。谢谢所有朋友的回复。在此也提醒初学C语言编程的朋友,如果开了中断,一定记得要有相应的中断函数与之配套,否则将会发生不是预期的结果。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

382

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

52

主题

382

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部