打印

楼主想要的是掉电一秒内的**功能吧

[复制链接]
3797|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ch_ljun|  楼主 | 2007-3-18 22:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在做一个项目的时候,遇到一个问题请那位高手指点一下!非常感谢!
当单片机在中断返回以后,要求它不返回到原来的地方,而是返回到我指定的地方去?
具体的情况如下:有10种模式在循环运行,在这个过程之中突然断电,然后再次上电。如果时间在一秒内,则从断电处运行的那一种模式的下一种模式变化开始运行,如果断电时间超过一秒,则从本次模式再次循环。在整个程序的运行过程之中,我用中断探测到何时断电,当我中断返回以后就不能再返回到原处了,而是返回到我指定的地方去从新运行,不知这里如何处理,请高手指点。谢谢!
沙发
fzj| | 2007-3-19 13:41 | 只看该作者

应该讲你的程序设计思路不对

如果中断返回要返回到你指定的地方也可以,可以根据你中断事件判断建立几个标志位,然后根据标志位去执行不同的子程序.

使用特权

评论回复
板凳
ch_ljun|  楼主 | 2007-3-19 19:35 | 只看该作者

这位仁兄说的可能有点问题。

非常感谢2楼的兄弟指点。因为我是初搞pic单片机,对此也不是很熟,所以还要兄弟们多多指教才是,你说的这种方式我当初也想过了。因为在怎个程序运行的过程之中,我设定了一个TIME1定时器,是每隔20ms中断一次,我要以此来判定,硬件在运行的过程之中是否会断电。如果断电时间超过一秒,在下一次上电时从这个模式从新运行,如果断电时间在一秒以内,下一次上电就从这个模式的下一个模式再运行。如果在中断这里设定标志,当硬件断电之后再上电(时间在1秒以内,因为硬件上有一个大电容,所以系统不会复位,程序可以接着运行),如果将程序跳到开始再运行,则中断没有返回,下一次断电就检测不到,如果中断返回了又不能运行新的模式,所以,在这里不知如何处理,不知兄弟能否教我,谢谢了。

使用特权

评论回复
地板
cloud2k| | 2007-3-19 22:32 | 只看该作者

做标志位

中断做标志位,然后在程序运行的过程中不断的检测,呵呵.
没有做过.

使用特权

评论回复
5
ch_ljun|  楼主 | 2007-3-20 00:57 | 只看该作者

这个方案试过

这个方案试过,在两个模式的循环之中有一个5秒的延时,其一不可能到延时里检测,其二在同一个模式下又有几种变化,如果在运行中断电,程序也会乱的,所以这个方案行不通,看那路高手有更好的主意。谢谢。

使用特权

评论回复
6
FZJ| | 2007-3-20 08:40 | 只看该作者

楼主想要的是掉电一秒内的**功能吧

那就别软件了,交给硬件,由硬件来完成...
搞个掉电检测端口,一掉电就SLEEP,这时测量一下MCU消耗电流,然后合理选择储能电容容量,就是说储能电容容量只能维持单片机在SLEEP下放电1S,如果放电时间过长MCU因得不到维持电压而复位.

使用特权

评论回复
7
yewuyi| | 2007-3-20 08:51 | 只看该作者

如果你非要按照你的想法做,只有换成可以操作堆栈的MCU

使用特权

评论回复
8
尘埃读电子| | 2007-3-20 20:22 | 只看该作者

中断可以不返回吗?>

PIC中断只有8级你不返回就会逸出的

使用特权

评论回复
9
soso| | 2007-3-20 20:29 | 只看该作者

你的设计原理没错

  不过的软件设计思路错误。你可以在中断中设置一个全局标记,全身快速退出,安全的时间内保存到EEPROM,下次开机检测状态标记决定做啥。

使用特权

评论回复
10
ch_ljun|  楼主 | 2007-3-24 21:47 | 只看该作者

问题解决

这个项目我已经搞定了,因为这个有些功能不用了,所以没有简单多了,另外这个项目,大家可以讨论一下,看有没有办法做到我说的那个功能,另外,硬件部份是已经做好了的,没有办法改动的。只有在软件上想办法,请各路高手讨论一下。

使用特权

评论回复
11
ch_ljun|  楼主 | 2007-4-3 14:54 | 只看该作者

还有其它方案吗

怎么这段时间没有高手发言,看还有其它方案吗,望高手们在这里指点,看有什么更好的思路。

使用特权

评论回复
12
兰天白云| | 2007-4-3 17:12 | 只看该作者

断电1秒钟,电路还有电压吗?

如果没有,那又怎么知道是断电1秒呢?

使用特权

评论回复
13
alin_99| | 2007-4-4 08:53 | 只看该作者

从备用电源的角度来考虑或者超级电容来考虑

使用特权

评论回复
14
ch_ljun|  楼主 | 2007-4-4 10:48 | 只看该作者

硬件有电容

我在题里说过了,在硬件是有一个大电容,外部断电了,电容可以支持单片机跑1秒多,所以就存在这样的问题出现了。

使用特权

评论回复
15
xieyuanbin| | 2007-4-4 18:49 | 只看该作者

是不是超过一秒钟重新运行,而不超过一秒返回?

简单:
如果超过一秒钟,那么程序进入一个死循环,让单片机WDT复位,重新运行,前提当然是WDT要开启.
如果不超过一秒钟,从中断返回应该没问题吧?
如果对堆栈很清楚,让堆栈下溢也是没问题的.不过要把GIE给补上,但从中断中直接跳转到正常程序是很危险的行为,因为很多值被你改变了.比如W和STATUS

使用特权

评论回复
16
ch_ljun|  楼主 | 2007-4-27 13:09 | 只看该作者

可以试试

楼上的兄弟说的这个方案,我也想过,感觉可行,可是我们WDT的用法不是很熟,不知道经过WDT复位之后,程序是自动从最开始运行,还是说会复位到中断跳出来的这个地方,如果是复位到叫断跳出来的这个地方那就有问题了,你高手们指点。

使用特权

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

本版积分规则

1

主题

12

帖子

0

粉丝