导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→C51编程:中断中的中断,麻烦中的麻烦。 怎一个难字了得?挑[wt13]

 *第2885篇: C51编程:中断中的中断,麻烦中的麻烦。 怎一个难字了得?挑战高手

  
楼 主:wt13 2002年4月1日11:57
 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, 又必须响应  ………………于是中断永远也不能返回。

请各位高手,高高手, 牛哥牛姐,牛弟牛妹帮我分析分析。 不胜感激!

  
2楼:seasoblue 2002年4月1日13:20
 中断有优先级,在响应高时不会响应低级中断.
  
3楼:wt13 2002年4月1日13:42
 在响应高级中断的时候改变中断优先级呢?(当然是装牛角尖而已,想来也是绝对不行的)
有高手来提供一点思路吗?
  
4楼:seasoblue 2002年4月1日14:20
 它会保护当前中断数据,然后去响应更改后的更高优先级中断程序,处理后完再回来处理保护的那个中断。
  
5楼:e_gay 2002年4月2日13:44
 不要误导人家,你这个问题根本就不是问题

>>>>>>对该主题发表你的看法

本主题贴数5,分页: [第1页]


[上一篇主题]:C51编程:怎么没人讨论K*EIL V623版本破解的问题呀?是不允许了么?

[下一篇主题]:请问哪位有录音笔资料