中断中调用函数,if语句的怪问题

[复制链接]
5140|8
 楼主| 潘红民 发表于 2007-9-27 16:11 | 显示全部楼层 |阅读模式
中断中调用一函数,<br />语名,减到0不再往向减,事实上&gt0的判断不起作用.一直执行--操作.<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;(SignalFilterTimer.B0_TimerOFF&gt0)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SignalFilterTimer.B0_TimerOFF--;<br /><br />注:编译器为HI-TECHPICC-18pro9.61inpicc18.exe(demo)不知正版软件能否解决这个问题.<br /><br /><br />void&nbsp;SignalFilterTimerDec(void)<br />{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;(SignalScanStatus.Bits.B0&nbsp;==&nbsp;SCAN_FILTER_EN)&&(SignalFilterTimer.B0_TimerON&gt0)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SignalFilterTimer.B0_TimerON--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;(SignalFilterTimer.B0_TimerOFF&gt0)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SignalFilterTimer.B0_TimerOFF--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;(SignalScanStatus.Bits.B1&nbsp;==&nbsp;SCAN_FILTER_EN)&&(SignalFilterTimer.B1_TimerON&gt0)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SignalFilterTimer.B1_TimerON--;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;&nbsp;SignalFilterTimer.B1_TimerOFF&gt0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SignalFilterTimer.B1_TimerOFF--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;(SignalScanStatus.Bits.B2&nbsp;==&nbsp;SCAN_FILTER_EN)&&(SignalFilterTimer.B2_TimerON&gt0)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SignalFilterTimer.B2_TimerON--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;&nbsp;SignalFilterTimer.B2_TimerOFF&gt0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SignalFilterTimer.B2_TimerOFF--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;(SignalScanStatus.Bits.B3&nbsp;==&nbsp;SCAN_FILTER_EN)&&(SignalFilterTimer.B3_TimerON&gt0)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SignalFilterTimer.B3_TimerON--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;&nbsp;SignalFilterTimer.B3_TimerOFF&gt0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SignalFilterTimer.B3_TimerOFF--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;(SignalScanStatus.Bits.B4&nbsp;==&nbsp;SCAN_FILTER_EN)&&(SignalFilterTimer.B4_TimerON&gt0)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SignalFilterTimer.B4_TimerON--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;&nbsp;SignalFilterTimer.B4_TimerOFF&gt0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SignalFilterTimer.B4_TimerOFF--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;(SignalScanStatus.Bits.B5&nbsp;==&nbsp;SCAN_FILTER_EN)&&(SignalFilterTimer.B5_TimerON&gt0)&nbsp;)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SignalFilterTimer.B5_TimerON--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;&nbsp;SignalFilterTimer.B5_TimerOFF&gt0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SignalFilterTimer.B5_TimerOFF--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;(SignalScanStatus.Bits.B6&nbsp;==&nbsp;SCAN_FILTER_EN)&&(SignalFilterTimer.B6_TimerON&gt0)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SignalFilterTimer.B6_TimerON--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;&nbsp;SignalFilterTimer.B6_TimerOFF&gt0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SignalFilterTimer.B6_TimerOFF--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;(SignalScanStatus.Bits.B7&nbsp;==&nbsp;SCAN_FILTER_EN)&&(SignalFilterTimer.B7_TimerON&gt0)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SignalFilterTimer.B7_TimerON--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;SignalFilterTimer.B7_TimerOFF&gt0)&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SignalFilterTimer.B7_TimerOFF--;<br /><br /><br /><br /><br />}
 楼主| 潘红民 发表于 2007-9-27 16:13 | 显示全部楼层

如果将程序函数放在main中调用一切正常

好像问题就出在中断中,<br />
 楼主| 潘红民 发表于 2007-9-27 16:46 | 显示全部楼层

W寄存器我看它为0还能执行aca6语句

&nbsp;&nbsp;AC9E&nbsp;&nbsp;&nbsp;&nbsp;0100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVLB&nbsp;0<br />&nbsp;&nbsp;ACA0&nbsp;&nbsp;&nbsp;&nbsp;5184&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVF&nbsp;0x84,&nbsp;W,&nbsp;BANKED<br />&nbsp;&nbsp;ACA2&nbsp;&nbsp;&nbsp;&nbsp;1183&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IORWF&nbsp;0x83,&nbsp;W,&nbsp;BANKED<br />&nbsp;&nbsp;ACA4&nbsp;&nbsp;&nbsp;&nbsp;E003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BZ&nbsp;0xacac<br />108:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SignalFilterTimer.B0_TimerOFF--;<br />&nbsp;&nbsp;ACA6&nbsp;&nbsp;&nbsp;&nbsp;0783&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DECF&nbsp;0x83,&nbsp;F,&nbsp;BANKED<br />&nbsp;&nbsp;ACA8&nbsp;&nbsp;&nbsp;&nbsp;A0D8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BTFSS&nbsp;0xfd8,&nbsp;0,&nbsp;ACCESS<br />&nbsp;&nbsp;ACAA&nbsp;&nbsp;&nbsp;&nbsp;0784&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DECF&nbsp;0x84,&nbsp;F,&nbsp;BANKED<br />
兰天白云 发表于 2007-9-29 15:51 | 显示全部楼层

如果=0 到0xACAC, 不执行aca6语句

&nbsp;&nbsp;AC9E&nbsp;&nbsp;&nbsp;&nbsp;0100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVLB&nbsp;0<br />&nbsp;&nbsp;ACA0&nbsp;&nbsp;&nbsp;&nbsp;5184&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVF&nbsp;0x84,&nbsp;W,&nbsp;BANKED<br />&nbsp;&nbsp;ACA2&nbsp;&nbsp;&nbsp;&nbsp;1183&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IORWF&nbsp;0x83,&nbsp;W,&nbsp;BANKED<br />&nbsp;&nbsp;ACA4&nbsp;&nbsp;&nbsp;&nbsp;E003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BZ&nbsp;0xacac<br /><br />如果=0&nbsp;到0xACAC,&nbsp;不执行aca6语句<br />
machunshui 发表于 2007-10-1 21:01 | 显示全部楼层

用仿真器看

SignalFilterTimer.B0_TimerOFF还在什么地方被赋值?????<br />仔细检查,<br />不要轻易怀疑编译器.
judge 发表于 2007-10-6 19:27 | 显示全部楼层

可能是INT类型吧。有可能会出问题,作者没有注意了。

  
computer00 发表于 2007-10-6 19:32 | 显示全部楼层

加volatile试试

  
zgl7903 发表于 2007-10-6 21:45 | 显示全部楼层

软件调一下阿

SignalFilterTimer.B0_TimerOFF&nbsp;=&nbsp;0;&nbsp;//设置个不成立的条件,看看是否还会减<br />if&nbsp;(&nbsp;SignalFilterTimer.B0_TimerOFF&nbsp;&gt&nbsp;0&nbsp;)<br />&nbsp;&nbsp;SignalFilterTimer.B0_TimerOFF--;<br /><br />个人认为是在中断外其它地方也访问到了这个值,把其它地方的操作先屏蔽掉看看,如果非得在中断和中断外都要访问这个值,应该在中断外访问这个值前关中断,操作完后恢复中断,以避免数据的共享冲突。
zhaoyu2005 发表于 2007-10-7 10:33 | 显示全部楼层

根据描述,明显就是有别的地方修改这个值了,导致条件一

还是找一下程序里的毛病吧,怀疑人家编译器,你还不够资格,人家的软件不是一个人写的,并且是经过验证的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

25

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部