L #DB_No
T LW 22
OPN DB [LW 22]
L #Data1
T DBW 0
L #Data2
T DBW 2
L #Data3
T DBW 4
L #Data4
T DBW 6
L #Data5
T DBW 8
L #Data6
T DBW 10
L #Data7
T DBW 12
L #Data8
T DBW 14
L #Data9
T DBW 16
L #Data10
T DBW 18
L 0
SLD 3
T LD 10 //地址1
L 2
SLD 3
T LD 14 //地址2
L #Num
L 1
-I
NEX1: T #seq1
L #seq1
NEX2: T #seq2
L LD 10
LAR1
L LD 14
LAR2
L DBW [AR1,P#0.0]
L DBW [AR2,P#0.0]
<I
= L 18.0
A L 18.0
JNB m001
L DBW [AR1,P#0.0]
T #TempValue
m001: NOP 0
A L 18.0
JNB m002
L DBW [AR2,P#0.0]
T DBW [AR1,P#0.0]
m002: NOP 0
A L 18.0
JNB m003
L #TempValue
T DBW [AR2,P#0.0]
m003: NOP 0
L LD 14
+ L#16
T LD 14
L #seq2
LOOP NEX2
L LD 10
+ L#16
T LD 10
L LD 10
+ L#16
T LD 14
L #seq1
LOOP NEX1
以上是程序代码,内循环理解些了,外循环什么时候用?为什么加16呢?麻烦详细解释一下,特别是M03之后的部分。3Q
问题补充:
非常详细,基本明白了。为什么加16呢?是1个字的宽度吗?
最佳答案
之前的回答有误:
这个程序的意思是,执行第一次内循环时就是将第一个数依次与其他的数据进行比较第一数比其他的数小就调换数据,这个时候就将最大的一个数排到了第一的位置,第二次内循环的时候就要开始从第二个数开始了,所以就有了,LD10和LD14都要重新赋值的程序了,要注意LD14在内循环的时候也有自加16的数值,因为LD10的数值只在外循环前加上16,然后在赋值为LD14。
内循环的作用就是逐个比较,而外循环的作用就是保证这样的比较能够顺利的进行下去。
之前的回答不对,内循环和外循环应该是在一个周期内完成;
加16就是代表一个字的宽度,
提问者对于答案的评价:
还有一点不明白,为什么自加16呢?是1个字的宽度吗?
最佳答案作者回复:
是的,再看看我修改后的解释吧,之前解释的有点问题,这个排序和我自己写的不太一样。加个企鹅吧,再给你解释解释。283595951
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc214575.html