发布于 2011-12-23 17:39:28
9楼
看了各位大侠的回复,颇受启发,特别是火麒麟的提醒
现在感觉基本上找到出现此问题的原因了,主要问题就是定时器与程序扫描是异步的。定时器状态改变可能发生在程序扫描时的任意时刻。请各位大侠看看是否是这样
下面看看为什么T101无法启动:
AN T 101
L W#16#2009
SD T 101
(在某一个扫描周期的,程序扫描到这里,T101定时时间正好到,状态改变由0变1,这是小概率事件,但是也是必然事件,就跟日食肯定会发生差不多)
A T 101
R T 101
在第N个程序扫描周期
扫描AN T 101 ,假设T101状态为0。RLO结果为1
扫描SD T 101指令时,T101定时时间正好到,状态改变由0变1。
扫描指令A T 101, T101的状态为1。
扫描指令R T 101,T101的状态变为0。
在第N+1个程序扫描周期
扫描AN T 101 , T101状态为0,RLO结果为1。
对于这条指令的结果来说和上一个扫描周期N没有任何变化,RLO结果一直为1,没有上升沿,所以T101当然不会被启动。
如果在程序中有多处检查定时器状态的指令时,一定要注意此问题。有可能在同一个扫描周期内定时器状态不一样。
静心学习!!!