webmaster 发表于 2010, January 12, 7:08 PM.
发表在:
//作者:Am programer
Network 1 // 循环6次将VW0--VW10相加,结果放在VW12内
LD SM0.0
MOVW 0, VW12 //结果清零
MOVD &VB0, VD20 //将VB0的地址放到VD20
FOR VW14, 1, 6 //循环6次
+I *VD20, VW12 //将VD20指向的地址内的数据与VW12相加,结果放到VW12
+D 2, VD20 //VD20内的地址加2 (例如:第一次是VB0,VB0+2=VB2)
Network 2
NEXT
//作者: 芳季
<域和>
ORGANIZATION_BLOCK 主程序:OB1
TITLE=程序注释
BEGIN
Network 1 // 网络标题
// 网络注释
END_ORGANIZATION_BLOCK
SUBROUTINE_BLOCK SBR_0:SBR0
TITLE=子程序注释
BEGIN
Network 1 // 网络标题
// 网络注释
END_SUBROUTINE_BLOCK
SUBROUTINE_BLOCK 域和:SBR1
TITLE=子程序注释
// 程序目的:
// 把指定连续V区域中的整数进行求和。
// 适用范围:
// 不适合在中断中使用。建议在使用时通过边缘指令调用一次。
// 参数类型:
// 连续数 字。总共参与计算的字的个数。
// 起始位 偏移量,字。第一个数据的地址相对VB0的增量。
// 模式 字节。计算对象的位长。0:8位;1:16位;2:32位。
// 执行过程:每执行一次得到一次计算结果。
VAR_INPUT
连续数:WORD;
首址偏移:WORD; // 这是对VB0的偏移量。
模式:BYTE; // 0:字节;1:字;2:双字
END_VAR
VAR_OUTPUT
域和:DWORD;
END_VAR
VAR
循环值:WORD;
过程量:DWORD;
希望人过留名下载过程序的朋友签个名就是了
起始位:DWORD;
END_VAR
BEGIN
Network 1 // 确定具体指针值。清除旧值。
LD SM0.0
MOVW 16#0800, LW15
MOVW LW2, LW17
ANDB 2#11, LB4
MOVD +0, LD5
MOVW +0, LW9
Network 2 // 用循环累加。循环次数是数据的个数。
LD SM0.0
FOR LW9, +1, LW0
Network 3 // 按照模式指定的位长转换成双字进行计算。 利用起始位作指针,指示循环过程中变化的当前累加位置。指针值增加,指向下一个对象。
LDN L6.0
AN L6.1
BTI *LD15, LW11
ITD LW11, LD11
INCD LD15
Network 4 // 这是16位时计算
LD L6.0
AN L6.1
ITD *LD15, LD11
+D 2, LD15
Network 5 // 这是32位时计算
LD L6.1
MOVD *LD15, LD11
+D 4, LD15
Network 6 // 第一个值加进和中。
LD SM0.0
+D LD11, LD5
Network 7
NEXT
END_SUBROUTINE_BLOCK
INTERRUPT_BLOCK INT_0:INT0
TITLE=中断程序注释
BEGIN
Network 1 // 网络标题
// 网络注释
END_INTERRUPT_BLOCK