我做了3个实验,第一个实验的程序如下:
LDN T33
TON T33, 10
LD T33
INCW VW0
用状态表监控VW0,其值为0不变。
原因见定时器在线帮助中的下图:

第2个实验的程序按上图修改如下:
LD I0.0
AN M0.0
TON T33, 10
LD T33
= M0.0
LD T33
INCW VW0
用状态表监控VW0,基本上能实现VW0每0.1秒加1。读取扫描周期为1ms。
实验3
实际的扫描周期不可能是1ms,因此增加了循环程序,扫描周期增大到50ms左右:
LD I0.0
AN M0.0
TON T33, 10
LD T33
= M0.0
LD T33
INCW VW0
LD I0.0
FOR VW2, 1, 1000
LD SM0.0
INCD VD6
NEXT
用状态表监控VW0,发现10s之内VW0没有加100,只加了50左右。
将循环次数增大10倍,扫描周期为500ms左右,发现VW0要1s多才加1次1。
下面是定时器在线帮助中对10ms定时器的说明:
“10毫秒定时器记录自现用10毫秒定时器启用以来10毫秒定时器间隔的数目。执行定时器指令即开始计时;但是,在每次扫描循环的开始更新10毫秒定时器,其方法是以当前值加上积累的10毫秒间隔的数目(自前一次扫描开始算起)(换言之,在整个扫描过程中,定时器当前值及定时器位保持不变)”
因为“在整个扫描过程中,定时器当前值及定时器位保持不变”,所以不能实现每100ms VW0加1。
看来只有用定时中断来实现周期为100ms的定时。