您的位置 首页 编程

单片机两个PIT中止不能一起运转的解决方法

基于以下的事实:①中断子程序中,清楚中断标志位时,如果使用BSET位操作指令,PITTF清零,PIT1的中断标志位也被清零;(《单片机与嵌入式

根据以下的现实:

①中止子程序中,清楚中止标志位时,假如运用BSET位操作指令,PITTF清零,PIT1的中止标志位也被清零;(《单片机嵌入式体系开发办法》P238)
PIT中止优先级通道0大于通道1;
③1s恰好是10ms的整数倍。

所以,每到1s的时分,通道0和通道1一起产生中止,因为通道0优先级高,先进入通道0的中止子程序,而通道0的中止子程序中的清中止动作把通道1的中止标志位也清零,这样等通道0的中止程序回来时,通道1就不能产生中止了,这样通道1的中止子程序就永久不能运转。
我查看了PITTF_PTF = 1;的汇编代码为C083 BSET 0x0345,#2。

当然这仅仅猜测,验证如下:
1)针对③,把PIT1中止时刻改为979.975ms,200*39199/8000000=0.979975s,能够运转。
2)针对②,PIT0清中止的方法是封闭PIT通道后再敞开,PIT1清中止的方法是“PITTF_PTF1 = 1;”,能够运转。解说如下:通道0的中止程序运转后,立刻封闭通道0,这时CPU呼应通道1的中止,通道0的中止程序被中止,比及通道1的中止程序回来后,再运转通道0的中止程序。假如把PIT1清中止的方法变为封闭PIT通道后再敞开作用相同。
3)针对②,将PIT0和PIT1的中止时刻回转,PIT01s中止一次,PIT110ms中止一次,这样,运转1s,PIT1失效一次,能够运转。
4)把清中止的C句子改为不编译为BSET指令的句子,因为我对汇编不太懂,暂时不实验。

这样就能够证明猜测正确,一起也得出了解决办法。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/biancheng/259957.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部