当持续保持触发外部中断0,LED灯亮8秒后熄灭。若期间取消外部中断,LED灯立即熄灭怎么用51单片机实现?

外部中断0最好是低电平触发,跪求C程序! 当然如果能用下降沿触发的实现这样的功能也可以,拜托各位大神了,能实现了再追加最大奖励!
我在想能不能通过配合在定时器中弄一个标志位来实现?

外部中断的优先级是高于定时器中断的。首先是触发外部中断嘛,在外部中断程序里面开定时器中断,定时器设置为50ms,这个直接装初值大概46000(晶振12M)的样子,具体你自己算一下。然后在调用定时器中断程序里面肯定是要有个标志位的,这个标志位会累加N个定时器时间直到8S,然后在这个定时器中断程序里面不断检测3.2口电平就行了,如果变回高电平就把灯在点亮(比如在这句直接将flag赋到设定的技术最大值)就行了。最好用下降沿触发,低电平触发容易出问题总感觉,可能你程序逻辑是完全正确的,但是仿真或者实物的时候会出问题。追问

我这里的8秒不一定是准确的,大概就好,用软件延迟都无所谓,所以感觉这么用定时器不太有用。我是想在持续外部中断中(也就是一直低电平触发)LED点亮一段时间后就熄灭了。但是若中途变为高电平(也就是灯还没点亮够足够的时间)灯立即熄灭。我也想用下降沿触发,但是实现不了撤掉中断,灯立即熄灭的效果,不懂有没有什么好方法

追答

建议还是用定时器,软件那个误差太大了。我只提供一个思路,你在中断程序中去检测3.2口的电平,变高就灭灯啊,我觉得我之前说的够清楚了,好像就算你一直维持低电平,它也不可能说一直处于触发状态,那样的话不就成了随时处于即将进入中断而非执行中断了。我是这样理解的反正:它低电平只是说在下降沿后检测到一个低电平就触发中断,至于这个低电平之后是什么,得让我执行完这次中断程序之后再说,不可能说因为我执行中断程序时,因为我这个中断还是低电平,那我自己再把自己打断一次进入中断嘛,那要是一直低电平,那不是进入死循环了?所以一旦触发中断之后,在这次中断执行完之前,这个引脚状态应该是和我中断无关了,这只是我的理解,我也没有具体测试过,你可以去试试。如果真是我说的那样,那么在中断程序里面去测3.2口电平就行了。

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答