本帖最后由 jmworkspace 于 2014-7-7 08:59 编辑
对于M051这块MCU来说,是不是不能跑线程这样的东西的,我想问问。可否利用中断来实现类线程的功能?
我的代码编写是主函数有一个循环是时时刻刻监控由中断改变的 duty、period、及PWM输出持续时间的变化,如下代码:
while(1)
{
CMR0A = i; //中:设定PWM0,1高占空比
CNR0A = x; //中:设定PWM0,1,2,3周期//en:Set PWM0,1,2,3 period
POEA |= (PWM0_OE | PWM1_OE ); //中:输出使能//en:Output enable
TMR0_Delay1ms(n);
POEA &= (0<<1) | (0<<0) ;
TMR0_Delay1ms(n);
}
当然这个循环必须每时每刻都检测及不断输出PWM波形。
若某个中断要控制PWM输出波形duty按delay某个时间持续增加减少,由0-100%-0的变化,或者自动从0增加到100%,或者从100%减少到0%,这个得需要中断函数持续1段时间。假设我设定1个Auto键,是由中断控制。当Auto为1则会执行这三种情况其中1种,若中断一直维持这个函数的变化,也要保持输出波形的变化同步,这可行吗?
所以,综合以上所谈,通常的中断工作原理是不是只是在主函数执行期间的千分之秒时间跑去处理中断函数然后跑回来主函数执行,期间必然有个1函数是暂停的?若按照上面3种模式,中断函数的执行时间必然延长,而且其中断函数工作更改的值只会是最后的值有效果。譬如duty由0-80%的变化。中断函数跑完了0-80%的变化但是主函数没有按照0-80%的变化,只是最后输出的波形是变成了80%。这样就不能看到或者证明是有经历过0-80%的duty变化。
按照我所说的方案,这个MCU能同时跑2个while()或多个while函数吗?类线程。并且同时没有相互的干扰,但是数据能同步更新。这可行吗?
哈哈,估计大家看这么多会觉得我的表达能力很差,但我也是尽力而为了。希望大家别见怪,有兴趣的可以探讨一下这个问题。先下班去吃饭了,首先感谢大家的意见。 |