恭喜,你发布的帖子
发布于 2020-05-13 14:25:57
64楼
ORGANIZATION_BLOCK MAIN:OB1
TITLE=程序注释
BEGIN
Network 1
// 程序段注释
LD SM0.1
CALL SBR0
END_ORGANIZATION_BLOCK
SUBROUTINE_BLOCK SBR_0:SBR0
TITLE=子程序注释
BEGIN
Network 1
// 程序段注释
LD SM0.0
ATCH INT0, 21
MOVB 2, SMB34
ATCH INT1, 10
ENI
R T32, 1
TON T32, 2
END_SUBROUTINE_BLOCK
SUBROUTINE_BLOCK SBR_1:SBR1
TITLE=子程序注释
BEGIN
Network 1
// 程序段注释
LD SM0.0
FOR VW8, 1, 133
Network 2
LD SM0.0
SIN 0.987654, VD10
Network 3
NEXT
END_SUBROUTINE_BLOCK
INTERRUPT_BLOCK INT_0:INT0
TITLE=中断例程注释
BEGIN
Network 1
LD SM0.0
CALL SBR1
Network 2
LD SM0.0
MOVW 0, T32
Network 3
LD SM0.0
INCD VD0
END_INTERRUPT_BLOCK
INTERRUPT_BLOCK INT_1:INT1
TITLE=中断例程注释
BEGIN
Network 1
LD SM0.0
INCD VD4
Network 2
// 程序段注释
END_INTERRUPT_BLOCK
这个程序的SBR1是用于拖延时间的。就仅仅放在这个地方会对smb34和T32的同步产生差异。
还有,用mov指令代替R指令会更加的无缝,毕竟少一条指令。
执行t32中断程序,要无缝,或者少缝,就要尽快地执行下一次计时。如果在这个时候拖延时间,那么拖多久,缝就有多大。当程序执行得够快,进入中断到再次计时的时差(缝)小于一种程度的时候,就没有缝了。
这个程序在ST60上面运行过了。
452498和452512是两种中断的计数数值。这个拖延量之下开始有差异。
请填写推广理由:
分享
只看
楼主