C51编程:中断中的中断,麻烦中的麻烦。 怎一个难字了得?挑战高手
我现在要写这么一个小程序,希望实现以下功能:希望各位高手帮我分析一下
1.有两个小灯L1, L2; 还有一控制开关Vt。
2.当Vt第一次打开的时候,首先L1亮72秒,然后L1和L2都熄灭18秒,再L2亮72秒。再L1和L2
熄灭18秒,再继续L1亮72秒。如此循环。
2.当Vt关闭的时候,L1和L2都熄灭,但是要记住前面亮的是L1还是L2,假设为L1亮,且已经
亮了Ta1秒.这时如果Vt又打开,则L1继续亮,假设再亮Ta2秒以后,又Vt关闭,则熄灭,又
Vt打开,继续亮Ta3,…… 要满足一个条件:Ta1 + Ta2 + Ta3 + ...+ Tan = 72秒。 也就
是说,其中的一个灯,它亮的总时间必须是72秒,再开始亮另一个灯。
3.假设Vt关闭前亮的灯是L2,则L2和L1一样,亮的总时间必须72秒
4.如果Vt关闭前正处于L1和L2都熄灭的休息时间,则Vt再次打开的时候,将从L1开始亮的起
点重新循环。
我自己的分析:因为Vt关闭后,要保存前面的灯亮的时间,所以不能用Vt控制单片机芯片的
电源,把延时部分独立出来,暂不考虑。
2.把Vt信号作为一个中断,假设为INT1; 再将Vt信号反相作为一个中断(响应Vt关闭),假
设为INT0。当Vt打开的时候,就开始灯亮的过程。在响应INT1中断的过程中,设置INT0为高
优先级,所以当Vt关闭的时候能及时响应。在响应INT0的过程中,这时设置INT1为高优先
级,所以当Vt打开的时候又能及时响应。
疑问:因为在响应一个中断的时候,另一个中断来了,必须响应,这样中断得不到返回。那
样岂不是会造成内存泄漏(借用C/C++的概念,我不知道是不是这么一个说法)
举例吧:假如正在响应中断INT1 ------>这是来了INT0,必须响应,所以转入INTO的响
应中 ----->这时又来了INT1, 又是必须响应的,所以转入INT1的响应中 ------->假设又
来了INT0, 又必须响应 ………………于是中断永远也不能返回。
请各位高手,高高手, 牛哥牛姐,牛弟牛妹帮我分析分析。 不胜感激!
发表时间:2002年4月1日11:57:00