51单片机在执行外部中断0时,未拔起急停按钮【使用常开触点】,如何保持单片机当前输出状态,拔起按钮

51单片机在执行外部中断0时,未拔起急停按钮【使用常开触点】,如何保持单片机当前输出状态,拔起按钮后执行顺序复位程序

如何保持单片机当前输出状态,
--while(estop==0);,即可。

拔起按钮后执行顺序复位程序
--51 单片机,现在,有众多的厂家、品牌、型号。
--令其自动复位,有不同的方式。
--最简单的,应该是利用看门狗了。
--饿它一次,即可复位。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-03-26
中断函数里先判断按键状态,如果按键按下如何工作,不按下如何工作,简单的很。追问

试过了,不行的,中断要么在低电平,要么下降沿,等你拔起急停时,中断条件已经不满足,判断语句无法执行了

追答

首先声明我是新手,只为参与高手可以无视,依你所说,有些糊涂,貌似按键的两个状态控制单片机不同的工作,现在的问题是你想在A状态下执行B状态的指令,这貌似不行,因为,只要按键的某个状态触发了单片机的中断,则,按键状态不变就不能退出中断,你也就不能执行别的指令了,(下降沿触发或有不同),采用I/O口查询的方式不知是否可行。

追问

我是这个意思:急停按钮按下,即执行中断0时,单片机保持输出状态,不做任何动作,当急停按钮拔起时,执行一个顺序复位程序,但是现在问题是执行中断后,输出状态保持不住,直接就执行复位程序了,我在中断0里面写了一个while(estop==0); 语句,没起到作用,我也是新手,请不吝赐教

追答

既然都是菜鸟,又探讨了这么多,就在说说想法吧,一下代码只是示意没有实用性质:
#define uchar unsigned char
uchar key;
void inte_0() interrupt 0

{
所有涉及输出控制的代码
}
main()
{
EA=1;//开总中断
EX0=1;//开外部中断0
IT0=0;//外部中断0低电平触发
{
while(1)
{
if(key)
{
复位代码(假设硬件电路为开关拔起接高电平按下接低电平)
这里可不要是单片机复位,如果是单片机复位就怕连中断也不操作了
}
}}
代码的本意是,主循环就在那里执行复位操作,当遇有按键按下时就进入中断执行输出操作
总是感觉这个设计怪怪的,没啥事情总在哪儿复位操作,单片机啥也干不成了。

追问

我这么设计是出于对机器的安全考虑,你的这个想法我也试过,但是在中断程序执行完之后会回到断点,执行主程序,if(key)下面的语句不会执行

追答

只能帮这些了,相信你会搞定的,祝成功。

追问

嗯,不过还是谢谢

本回答被网友采纳
第2个回答  2015-03-25
需要给你写一份吗追问

非常需要,谢谢

C语言的,感激不尽

追答

需要定做可以丘上说
我id