打印

stm8使用中奇怪问题

[复制链接]
1503|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
c555|  楼主 | 2013-9-16 20:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 c555 于 2013-9-18 10:23 编辑

    是一个关于中断的问题。
  首先,程序执行下面一个延时函数
  a=5000;
  while(a--){
      ........
       }
在执行这个延时函数的时候,外部电平变化触发了中断(程序中设置的
是仅仅下降沿触发中断),进入中断程序,在中断程序中,我将a赋值为1,
目的是让这个延时尽快结束。
  问题出来了。
  问题是,我在中断中赋值的这个1有时不起作用,中断出来后,它继续
进行这个长延时。但在多数情况下是起作用的,外部有中断,延时就结束
   这个问题郁闷了好久了,想不通是咋回事?
   曾示波器测试过,确实进入中断了,也确实将a赋值为1了,但就是延时
不停止。
沙发
xxiao6130| | 2013-9-16 20:54 | 只看该作者
请问while里面的a是++还是--,a是++的话,你把a=1,它肯定是要执行很长一段时间的,a是--,你把a=1就不和逻辑了。

使用特权

评论回复
板凳
c555|  楼主 | 2013-9-17 10:42 | 只看该作者
本帖最后由 c555 于 2013-9-18 10:24 编辑

回楼上,一楼帖子已经更正

使用特权

评论回复
地板
feilusia| | 2013-9-17 11:10 | 只看该作者
我觉得很可能是IO口电平不稳定,你是不是设置IO口悬浮输入?要设置为上拉才可以。

使用特权

评论回复
5
c555|  楼主 | 2013-9-18 10:21 | 只看该作者
感觉楼上说的有理,我程序中确实浮空输入,所以赶紧试验了一下,结果很失望,故障依旧

使用特权

评论回复
6
bobo5650| | 2013-9-18 10:58 | 只看该作者
试试做a--的时候禁能中断
16位数做自减的时候会被编译成3条语句,如果中断返回的时候执行第2或第3条指令,就会出错

使用特权

评论回复
7
feilusia| | 2013-9-18 11:19 | 只看该作者
还有一个问题,是你的中断是不是由定时器引起的,并且多久中断一次。
如果你的中断每次都在括号内来,那很不巧,你会经常卡死在这里,只有偶尔能出来,这样时间有长有短。
举个例子,你的while(a--)在判定的时候,a=1,判定正确,执行括号内内容,a--后等于0,结果在括号内中断来了,a又等于1,又判定成功,下一次中断又在括号内来,又a=1判定成功……依次循环。
所以说,你这么写不太合理。

使用特权

评论回复
8
feilusia| | 2013-9-18 11:26 | 只看该作者
你可以多定义一个中间的全局变量,比如u8 status=0,
在括号内写
if(status==1)
a=1;
在中断函数里把a=1改为status=1.

使用特权

评论回复
9
pofu007| | 2013-9-18 11:43 | 只看该作者
我理解是这样的,a的值已经搬到寄存器了正在计算a--,这时候中断来了,a=1,存回了变量a所在的地址,中断结束后继续进行a--的运算,运算完成(计算结果是原来的a,做a--计算),又把计算结果存回a所在地址,导致你所说的问题发生。

使用特权

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

本版积分规则

264

主题

556

帖子

3

粉丝