发布于 2003-10-22 22:36:12
0楼
是你程序的问题。
中断程序可能在一个扫描周期的任意时间执行,如果计算预制值的时候被中断,最后结果就可能出错。
ORGANIZATION_BLOCK MAIN:OB1
TITLE=PROGRAM COMMENTS
BEGIN
Network 1
LD SM0.1
MOVB 100, SMB34
ATCH INT_0, 10
ENI
Network 2
LD SM0.0
MOVW +5, MW0
MOVW +10, MW2
Network 3
LD SM0.0
MOVW MW0, MW4
//如果中断程序在这被触发,则MW6就是5而不是50了。
*I MW2, MW4
END_ORGANIZATION_BLOCK
INTERRUPT_BLOCK INT_0:INT0
TITLE=INTERRUPT ROUTINE COMMENTS
BEGIN
Network 1
LD SM0.0
MOVW MW4, MW6
END_INTERRUPT_BLOCK
解决办法1:
将Network 3做如下修改
Network 3
LD SM0.0
MOVW MW0, MW8
*I MW2, MW8
movw mw8 mw4
解决办法2:
将Network 3做如下修改
Network 3
LD SM0.0
disi //禁止中断,保证在ENI指令之前的程序不会被中断打断
MOVW MW0, MW4
*I MW2, MW4
eni