恭喜,你发布的帖子
发布于 2017-04-10 19:55:05
34楼
老外一般是不用定时器的,如遇到计时,他们是这么写的,先建立个100MS脉冲,程序如下:
A "m_pulse_100ms" //If flag set from last cycle
R "m_pulse_100ms" // -> reset flag
L "mw_100ms_pulse" //Load stored time value
L #OB1_PREV_CYCLE //and add last cycle time
+I
T "mw_100ms_pulse"
L 100
JC l040 //yes -> go ahead
-I //no -> store difference to 100ms
T "mw_100ms_pulse" //as new initial value
SET
S "m_pulse_100ms"
比如要计时3S,先用传送指令 L 30 T MW100,然后每100MS减1,当MW100=0时,计时时间到。
一点疑问和改进,请各位大虾指正:
1、理解:累加时间小于100ms,则不置位“m_pulse_100ms”,大于等于100ms,累加时间减去100ms,且置位“m_pulse_100ms”。
2、疑问:“-I //no -> store difference to 100ms”这句改为赋值 “mw_100ms_pulse = 0”是不是更好?
3、改进:累加值减去100,改为赋值 mw_100ms_pulse = 0 。
4、理由:比如上一周期累加时间99ms,这个周期累计时间为 102ms,减去100ms,下一周期从 2ms 开始累加似乎没有必要了,应该直接从0ms开始吧?
5、其他:如果是累加计数,保留上“尾数” “2ms”才有意义。
请填写推广理由:
分享
只看
楼主